Jam Digital 7 segment dengan ATmega8 dan RTC DS1307

Sudah lama sekali tidak berkreasi di blog ini…sekarang pengen coba share gimana membuat sebuah jam digital

akan saya paparkan skematik dan kode nya disini,,,silakan dicoba ya teman semua

setting xtall = 1 Mhz Internal,,, jadi ga perlu pakai xtall, dengan kata lain ketika kita beli ic Atmega8 yg masih baru yg belum diapa-apakan,,, bisa langsung diberi program ini, tanpa perlu setting fusebit nya. atau kalau ingin pakai Xtall dikasih xtall 1Mhz dan setting eksternal crystall oscillator. 

code

#include <mega8.h>
#asm
.equ __i2c_port=0x18 ;portc
.equ __sda_bit=5
.equ __scl_bit=4
#endasm
#include <i2c.h>
#include <delay.h>
#include <ds1307.h>
#include <math.h>
/*
7 segment
a = 6
b = 4
c = 0
d = 1
e = 2
f = 5
g = 3

*/
char status=0;
unsigned char jam,menit,detik,segment;

void init_dev(void)
{
 DDRC=0b11111100;
 DDRD=0XFF;
 i2c_init();
 rtc_init(0,1,0);
}

void write7segment(unsigned char digit, unsigned char bilangan)
{

 switch (bilangan)
 {
 case 0 : { PORTD=~(0b1110111); }; break;
 case 1 : { PORTD=~(0b0010001); }; break;
 case 2 : { PORTD=~(0b1011110); }; break;
 case 3 : { PORTD=~(0b1011011); }; break;
 case 4 : { PORTD=~(0b0111001); }; break;
 case 5 : { PORTD=~(0b1101011); }; break;
 case 6 : { PORTD=~(0b1101111); }; break;
 case 7 : { PORTD=~(0b1010001); }; break;
 case 8 : { PORTD=~(0b1111111); }; break;
 case 9 : { PORTD=~(0b1111011); }; break;
 };

 switch (digit)
 {
 case 0 : { PORTC=((0b1110)<<2); }; break;
 case 1 : { PORTC=((0b1101)<<2); }; break;
 case 2 : { PORTC=((0b1011)<<2); }; break;
 case 3 : { PORTC=((0b0111)<<2); }; break;
 };

}
void sevsegmentjam( void )
{
 unsigned int tempdata;
 unsigned int digit1,digit2,digit3,digit4,digit5,digit6;

 tempdata=menit;
 digit3=tempdata%10;
 write7segment(0,digit3);
 delay_ms(5);

 tempdata/=10;
 digit4=tempdata%10;
 write7segment(1,digit4);
 delay_ms(5);

 tempdata=jam;
 digit5=tempdata%10;
 write7segment(2,digit5);
 delay_ms(5);

tempdata/=10;
 digit6=tempdata%10;
 write7segment(3,digit6);
 delay_ms(5);
}

&nbsp;

void sevsegmentjamset( char dig )
{
 unsigned int tempdata;
 unsigned int digit1,digit2,digit3,digit4,digit5,digit6;

 tempdata=menit;
 digit3=tempdata%10;
 tempdata/=10;
 digit4=tempdata%10;

 tempdata=jam;
 digit5=tempdata%10;
 tempdata/=10;
 digit6=tempdata%10;

 if (dig==0)
 {
 write7segment(0,digit3);
 delay_ms(5);
 write7segment(1,digit4);
 delay_ms(5);
 }
 if (dig==1)
 {
 write7segment(2,digit5);
 delay_ms(5);
 write7segment(3,digit6);
 delay_ms(5);
 }

}

void read_key(void)
{
 if (PINC.0==0)
 {
 while (PINC.0==0);
 status++;
 if (status==3)
 {
 init_dev();
 rtc_set_time(jam,menit,0);
 status=0;
 }
 }
 if (PINC.1==0)
 {
 while (PINC.1==0);
 if (status==1)
 {
 menit++;
 if (menit==60) menit=0;
 }
 if (status==2)
 {
 jam++;
 if (jam==24) jam=0;
 }
 }
}

void main (void)
{
 unsigned long int j;
 init_dev();
 //rtc_set_time(13,30,00);
 while(1)
 {
 while(status==0)
 {
 rtc_get_time(&jam,&menit,&detik);
 if (status==0)
 {
 for (j=0;j<1000;j++)
 {
 if (status==0) read_key();
 if (status==0) sevsegmentjam();
 }
 }
 };
 while(status!=0)
 {
 if (status==1)
 {
 read_key();
 sevsegmentjamset(0);
 }
 if (status==2)
 {
 read_key();
 sevsegmentjamset(1);
 }

 }
 }
}

ini file projectnya
http://www.ziddu.com/download/19513172/clock.zip.htm


ini foto asli alatnya,,,,mungkin temen2 bisa berkreasi sendiri rangkaian yang diinginkan

 

itu button yg nyambung ke PINC.0 berfungsi untuk pindah2 mode set menit dan jam, dan yang terhubung ke PINC.1 berfungsi merubah angka menit dan jam, dan setelah merubah angka menit dan jam tekan button yg terhubung ke PINC.0 lagi maka jam akan tersimpan dan kembali ke mode normal :)

About these ads

99 thoughts on “Jam Digital 7 segment dengan ATmega8 dan RTC DS1307

  1. karso says:

    hitungan detik led keluaran 1 hz ds1307 koh ga 60 detik permenit nya malah 65 detik…. ada solusi…

    • owh,,,klo itu ga masalah kok mas,,,soalnya khan si mikro ngambil data detiknya dari ic rtc ds1307 jadi hitungannya tetep 60 detik,,,,hanya di program saya refresh data nya tidak bisa tepat 60 detik karena untuk menyalakan 7 segment secara scanning waktu nya sangat kompleks akibat akumulasi perhitungan tiap scripts di mikro nya:D, kalau mau diganti LCD mungkin bisa tepat 60 detik

      • kalau boleh tau mas nya udah nyoba langsung ke alat belum, biasanya kalau nyoba di simulasi itu juga berbeda dengan asli nya…seringnya lebih akurat kalau eksperimen langsung

    • wah kenapa ya,,,padahal saya udah buat itu bisa jalan pas 60 detik,,,kemungkinan dari mikro juga,,,atau ada yg settingnya belum tepat

    • ga perlu pakai xtall mas,,,ini project nya menggunakan speed 1Mhz Internal, kalau mau pakai xtall dikasih 1Mhz dan setting externall crystall oscillator…makasih udah mampir

  2. oh iya saya menggunakan atmega 16 sebagai mikon nya dan k125 sebagai downloadernya..
    gimana mas ya..
    kalau dari rangkaian itu pasti bener mas?walaupun dengan program yg berbeda? saya ingin mencoba dengan bascom sebenernya mas, maklum belum bisa bahasa c hehehe

    • owh bisa kalau mau mengganti mikro apa saja tentu bisa,asalkan bisa berkomunikasi dengan IC DS1307,,,bahasa apa saja bisa kok…semoga sukses

  3. kimimaru says:

    aku uda coba tp seven segmentnya kok nyala semua ya?apa sda & scl dari RTC harus ketemu pada sda dan scl pada mikro???

  4. indraarf says:

    Saya tertarik dgn jam digital ini,apa saya bisa dikirim untuk percobaan.Soalnya baru belajar
    masih gaptek.Tlg kalau meghubungi bapak emailnya apa ya?

  5. latief says:

    mas, mw tnya ni..file yg mas postting udah di download…trus tak simulasiin jalan..cuma kok tampilan 7 segment kok g sempurna penunjukkan angkanya..tpi blum sy cba ke harware..mhon pncerahan..trmkasih

    • owh,,,itu biasa pak,,,soalnya program mikronya menggunakan sistem scanning untuk menampilkan seven segment,,,tapi kalau di alat sebenarnya tampilannya mulus kok pak :)

    • semestinya sih bisa,,,tapi itu tergantung pada jumlah pin out nya,,,untuk 7 segment membutuhkan 11 pin, tombol ada pin dan untuk RTC butuh 2 pin… pin attiny ada 20 pin 2 pin untuk power jadi tersisa 18 pin, 4 pin yg tidak terpakai

      • rendywarr says:

        mas bro kalau menggunakqn atmega8535 bagai mana cara programx?kala saya ganti persi atmega8 menjadi atmega8535 tanpa rubah code programx bisa gak?tlont bantuanx mas?trimakasih sebelumx

  6. ugi says:

    mas bro saya tertarik dengan jam digital..mau tanya kalo cara masukin program k IC atmg8 pk file listing program yg mana soalnya file yg ane download dr mas banyak file nya?hehe maklum pemula banget,.

  7. itu button yg nyambung ke PINC.0 berfungsi untuk pindah2 mode set menit dan jam, dan yang terhubung ke PINC.1 berfungsi merubah angka menit dan jam, dan setelah merubah angka menit dan jam tekan button yg terhubung ke PINC.0 lagi maka jam akan tersimpan dan kembali ke mode normal :)

  8. ugi says:

    mas kebanyakan saya baca di blog lain menggunakan ic uln2803 biar ga redup bagian depan 7segment waktu digilr?? rangkaian yang mas buat seperti itu ga??

  9. ugi says:

    mas mau tanya..di skematik kaki 7segment itu udh berurutan abcdefg? pk 7segment cammon anoda?yang masuk ke transistor itu CA nya ya?

  10. riza fathur says:

    yang udah sukses bikin rangkaian diatas tlong d share dong ceritanya, saya mau bikin tapi masih ragu2 hehehe

    good job gan :D

  11. riza fathur says:

    nah maksud saya juga begitu kok mas hehehe :D

    trus saya skrg bingung buat downloadernya, atmega 8 pin yg mana saja yg perlu dikasih pin head buat dowloadernya? -.-’

  12. ugi says:

    hehe mas mau tanya lg nih,.mas kalo ngasih power supply masuk ke atmega8 nya ke pin brp?? ke pin 7(vcc) dan pin 8(GND)??? hehe maklum awam banget.

  13. ugi says:

    mas saya pake downloader DT-HiQ AVR USB ISP kok error terus ya?apa nya ya?software nay saya pake codevision avr

  14. byu says:

    Om/mas bro, boleh minta file .hex dari rangkaian diatas?(Kirim ke email) Aku buat malah jamnya gak jalan, mumet koleng aku!! Tq.

    • itu kemungkinan ada kesalahan pas copy paste dari blog ini, code program lengkap, simulasi dan skematik bisa di unduh ,,,ada link di bawah ulasan silakan dicoba lagi, makasih mas udah mampir

  15. kendro says:

    walah sayang banget rek. aku gae ra dadi 7segmen mlorok terus. mohon bantuanya mas aliex, file hex yang tak donlot error ta ? mohon diberi hex yang sip soale wis tuik katarak dan gak bisa progam.
    suwun ya atas bantuan nya.

    • coba dicek dulu rangkaian, tegangan, dan komponennya mas
      bisa jadi peletakan pin pin mikro nya berbeda,,,kalau bisa dipelajari juga programnya,,,
      tujuan share di sini khan untuk belajar bersama..
      dan alhamdulillah dari beberapa pengunjung banyak yang udah berhasil buat ,,,

      • aku_nich_mabuk says:

        mas kalau menambah alaram bagai mana caranya mas dan code programnya bagai mana?

      • owh ya dicoba-coba saja, dengan ngasih logic melihat waktu sekarang,lalu variabel waktu yg diinginkan alarm, jika sama maka alarm berbunyi :)

    • yah dicoba saja, itu khan udah dibaca detik nya, kalau mau tambah ya ditampilkan saja lalu ditambah 7 segmen 2 digit dibelakangnya

  16. pak itu file projectnya dibuka pake apa yah?

    terus punya skema layout file eagle ngga pak?
    listing programnya pake codevision?

    kalo boleh minta kirim ke email ya pak penjug@gmail.com

    terimakasih matur nuhun. semoga amal ibadahnya diterima :D

    • wah maaf saya gak ada project yg pakai eagle, mungkin bisa didesain sendiri mengikuti skematik yg sudah ada. untuk project code sudah saya ikutkan di akhir tulisan di atas

    • coba di urutkan kira2 kesalahannya dimana, programmnya lancar ketika di download, lalu rangkaiannya sudah bener?jalur2 nya udah bener? mohon dicek dahulu, thx

    • eror kenapa ya?sampean pakai codevision berapa?kalau versi 2.03 masih ada lib ds1307 nya,,,untuk versi atasnya memang ada yg hilang . thx

  17. mas, kegunaan transistornya untuk apa ya?
    kalau langsung dari pin ATMega menuju sev segment bagaimana?
    bukannya seharusnya pakai transistor jenis NPN?
    mohon pencerahannya mas

    • itu bisa pakai NPN atau PNP mas,,,tergantung kreasi program atau rangkaian, kebetulan kalau pakai PNP output tegangan di kolektor bisa mendekati nilai vcc jika diberi nilai v di basis mendekati 0 saja, sedang kalau NPN nilai keluaran di emitor nya linear tergantung nilai yg diberikan di basis nya,

    • bisa saja, ini menggunakan transistor guna nya untuk meringkas kan port yg dipakai, karena ada 4 buah segmen yg seharusnya butuh 7 pin x 4, diringkas mnjadi 8 pin karena 4 pin memakai decoder BCD to decimal ke masing2 pin 7 segment dan transistor di 4 pin sebagai switch, kalau ga pake transistor bisa jadi butuh 7 pin kali 4 untuk menyalakan semua 7 segmen,

    • Itu tempdata diisi data menit, kemudian digit3 diisi dg nilai sisa hasil akhir bagi 10 dari tempdata, misal tempdata bernilai 45 maka digit3 mendapat nilai 5,begitu seterusnya

  18. kevros says:

    mas saya udah bikin kmaren input programnya pake fusebit 8MHZ, pas udah dipasang eh yg nyala cuma LED doang itu aja gak kedip, seven segmentnya gak nyala blas, emang kesalahan fusebitnya apa gimana? trus program yg dipake yg big clock apa 7segment?

    • Coba dilihat lagi, program yg saya buat di atas pakai frekuensi ditulis default atmega8 = 1Mhz, kalau yg nyala hanya led biasanya jalur2 ada yg belum tersambung dg baik/bisa jd solderan kurang benar. Khan di post bisa kelihatan, di file downloadnya jg tinggal buka file project otomatis membuka file program yg mana, yg jelas ini pakai 7segmen bukan led saja

  19. chrisna says:

    halo mas, ada jam digital yang dengan alarm ga ?
    kalo nambahin fungsi buat alarm di programnya jadi gimana ya ?
    mohon bantuannya

  20. chrisna says:

    ada program yang jam digital dengan alarm ga ?
    kalo kita ngedit dari program diatas gmana ? mohon bantuannya

  21. afrizal says:

    mas mau tanya dong.. di project yang mas buat ukuran layar 7-segmentnya berapa ya? kalau saya buat jadi lebih besar kan otomatis penggunaan dayanya akan lebih besar ngakalinnya gimana ya mas?

  22. Irsad says:

    Mas, mau tnya , it vcc n gnd d gbng jd satu gk papa? Mksdnya vcc dpt 1 smbr + 5v n gnd dpt –
    trus vcc n gnd yg d pke pada atmega8 pin no brpa? 7 n 8 kah? Mksh

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s