Diberdayakan oleh Blogger.

Mengenai Saya

Foto saya
singoprono-mantup, lamongan-jatim, Indonesia

Blogger templates

RSS

CARA MEMBUAT JAM DIGITAL

Membuat Peraga Jam Dengan Led 7 Segmen Dilengkapi Dengan Alarm


Hai Sobat yang baik. Pada tulisanku sebelum ini, kita sudah melihat apa dan bagaimana mengoperasikan chip RTC-RAM baik dengan DS1302 maupun DS1307. Kita juga sudah membahas mengenai pengoperasian peraga dengan LED 7 segmen. Bagaimana kalau kali ini kita mencoba mengimplementasikan apa yang sudah pernah ditulis tersebut dalam sebuah rangkaian yang mungkin bermanfaat dan menyenangkan bagi para penghobi elektronik digital.
Tulisanku kali ini akan membahas mengenai pembuatan peraga jam menggunakan RTC-RAM DS1307 dengan penampil LED 7 segmen. Sebagai mikrokontroler akan digunakan AT89C51 dari keluarga MCS51 yang murah meriah. Sebelum merancang, ada baiknya kita memahami apa yang diinginkan pada rangkaian kita. Maka aku akan buatkan identifikasi spesifikasi rancangan tersebut, yaitu:
  1. Rangkaian akan menampilkan peragaan waktu dalam format jam dan menit. Untuk itu setidaknya memerlukan 4 digit LED 7 segmen.
  2. Rangkaian juga bisa menampilkan tanggal dan bulan jika perlu tahun dengan menekan tombol tertentu yang berkaitan dengan peragaan tanggal, bulan dan tahun. Nah, tombol-tombol ini juga akan digunakan juga untuk pengaturan waktu.
  3. Rangkaian juga akan dilengkapi dengan sistem alarm untuk memberikan tambahan fasilitas yang menarik.
Wah banyak juga ya maunya. Tapi sebagai penghobi seharusnya semakin banyak semakin menarik. Sekarang kita mulai saja merancang rangkaian yang diinginkan.
Karena kita hanya akan menampilkan sebanyak 4 digit, maka aku menetapkan menggunakan teknik peragaan LED 7 segmen secara scanning untuk menghemat komponen. Agar terlihat atraktif akan ditambahkan 2 buah LED untuk flashing detik.

Untuk melakukan seting waktu dan alarm aku gunakan 2 tombol saja biar hemat, yaitu untuk tombol menu (SET) dan tombol untuk display (CEK). Tidak apa-apa kan?
Sebelum lupa, untuk alarm diperlukan 1 pin lagi.
Nah, kita langsung lihat rangkaiannya saja.
Untuk penampil waktu menggunakan sebanyak 12 saluran gerbang dengan rincian 7 bit gerbang P0 terdiri dari P00 –  P06 untuk dekoder LED 7 segmen dan 4 bit gerbang P1 yaitu P10 – P13 untuk scanning digit (LED1 – LED4). Sementara indikator detik menggunakan P07.
Untuk informasi waktu kita menggunakan DS1307 yang memiliki antarmuka I2C sehingga hanya membutuhkan 2 saluran gerbang yaitu P26 untuk SCLK dan P27 untuk SDA. DS1307 memiliki fitur keluaran gelombang persegi atau SQW yang akan disetel pada perioda 1 detik dan dihubungan pada gerbang p25.
Peraga waktu kita dilengkapi dengan tombol untuk pengaturan yang terdiri dari SET dihubungkan pada gerbang P20 dan CEK pada gerbang P21.
Nah, sebagai pelengkap akan kita tambahkan keluaran untuk alarm yang akan dihubungkan pada buzer melalui gerbang P23.
Oke lah, kita langsung saja menuju barisan program yang harus diisikan pada mikrokontroler.
$mod51
BufferWaktu       data  8h
BufferProg        data  0bh
RegBendera        data  2fh
      FSRDY       bit   RegBendera.0
      FACK        bit   RegBendera.1
      FLB         bit   RegBendera.2
      Menu        bit   RegBendera.3
      Dsp         bit   RegBendera.4
      Ubahan      bit   RegBendera.5
      Pulsa       bit   RegBendera.6
      Alarm       bit   RegBendera.7
Data7Seg          data  p0
LED_Detik         bit   p0.7
Digit7Seg         data  p1
Digit1            bit   p1.0
Digit2            bit   p1.1
Digit3            bit   p1.2
Digit4            bit   p1.3
T_Set             bit   p2.0
T_Cek             bit   p2.1
Buzzer            bit   p2.3
SDA               bit   p2.7
SCL               bit   p2.6
PulsaDetik  bit   p2.5
StackPointer      data  30h
org   0h
Inisialisasi:
      mov   sp, #StackPointer-1
      mov   r0, #BufferWaktu
      mov   a, #8
      mov   b, #0
      acall DS1307_Read
      mov   a, BufferWaktu
      anl   a, #01111111b
      mov   BufferWaktu, a
      mov   a, BufferWaktu+2
      anl   a, #00111111b
      mov   BufferWaktu+2, a
      mov   BufferWaktu+7, #10h
      mov   a, #8
      mov   b, #0
      acall DS1307_Write
      mov   Data7Seg, #255
      mov   Digit7Seg, #11110111b
      mov   r2, #128
Setelah inisialisasi, program dimulai dengan melakukan beberapa pemeriksaan termasuk tombol dan status pulsa SQW dari DS1307.
Mulai:
      jnb   T_Set, TombolMenu
      jnb   T_Cek, TombolCek
      jb    PulsaDetik, PeragaDetik
      jnb   LED_Detik, Peraga
      setb  Pulsa
      clr   LED_Detik
      jb    Menu, Peraga
      jb    Dsp, Peraga
Penyegaran informasi waktu diambil pada pulsa rendah yang diindikasikan oleh SQW. Jumlah data yang diambil berjumlah 11 byte meskipun beberapa tak digunakan, dimulai dari alamat register 01H atau register menit. Data lainnya yang dibaca meliputi jam, hari (tidak digunakan) tanggal, bulan, tahun dan kontrol (tak dipakai) serta 4 byte isi data RAM yang berisi menit dan jam alarm, durasi alarm dan Bell Chime penunjuk pergantian jam.
Setelah penyegaran informasi waktu, jika seting Bell Chime bukan 0 maka setiap nilai menit menunjuk 00 berarti juga perubahan jam maka program akan mengaktifkan buzzer selama 5 detik sesuai isi register R4. Tetapi fasilitas Bell Chime tidak dijalankan jika status alarm sedang aktif.
      AmbilWaktu:
            mov   r0, #BufferWaktu+1
            mov   a, #10
            mov   b, #01h
            acall DS1307_Read
            clr   LED_Detik
            jb    Alarm, PeriksaSelesai
            mov   a, BufferWaktu+11
            jz    PeriksaAlarm
            mov   a, BufferWaktu+1
            jnz   BellChime
            clr   Buzzer
            mov   r4, #5
            ajmp  PeriksaAlarm
            BellChime:
                  setb  Buzzer
Berikut adalah program memeriksa waktu alarm. Data alarm yang ada pada RAM DS1307 dan disimpan pada BufferWaktu diperiksa. Jika sama maka bit Alarm dan buzzer akan diaktifkan. Lamanya durasi alarm juga dimasukkan pada register R4 untuk dicacah mundur, nanti.
            PeriksaAlarm:
                  mov   a, BufferWaktu+8
                  xrl   a, BufferWaktu+1
                  jnz   PeriksaSelesai
                  mov   a, BufferWaktu+9
                  xrl   a, BufferWaktu+2
                  jnz   PeriksaSelesai
                  mov   r4, BufferWaktu+10
                  setb  Alarm
                  clr   Buzzer
Usai pemeriksaan waktu alarm, program dilanjutkan dengan persiapan untuk memperagakan informasi yang diterima pada peraga LED 7 segmen.
            PeriksaSelesai:
                  mov   r0, #BufferWaktu+2
                  ajmp  Peraga
Untuk mematikan alarm, Sobat cukup menekan sembarang tombol yang ada.
      TombolMenu:
            jb    Alarm, ResetAlarm
            ajmp  MenuProg
      TombolCek:
            jb    Alarm, ResetAlarm
            ajmp  MenuCek
      ResetAlarm:
            clr   Alarm
            setb  Buzzer
            jnb   T_Set, $
            jnb   T_Cek, $
            ajmp  Mulai
      PeragaDetik:
            jnb   LED_Detik, Peraga
            setb  LED_Detik
Peragaan tampilan LED dimulai di sini. Waktu aktif setiap LED 7 segmen berkisar antara 5 ms dengan nilai register R2 adalah 128. Dan pengulangan waktu aktif menjadi sekitar 20 ms atau kurang lebih 50 Hz.
Peraga:
      djnz  r2, Mulai
      mov   r2, #128
      PeragaLED1:
            mov   a, @r0
            dec   r0
            jb    Digit4, PeragaLED2
            swap  a
            acall DataLED
            clr   Digit1
            ajmp  AkhirPeraga
      PeragaLED2:
            jb    Digit1, PeragaLED3
            acall DataLED
            clr   Digit2
            ajmp  AkhirPeraga
      PeragaLED3:
            mov   a, @r0
            jb    Digit2, PeragaLED4
            swap  a
            acall DataLED
            clr   Digit3
            ajmp  AkhirPeraga
      PeragaLED4:
            setb  Digit3
            acall DataLED
            clr   Digit4
      AkhirPeraga:
            jb    Menu, DelayPeraga
            jb    Dsp, DelayPeraga
            jnb   Buzzer, DelayPeraga
            ajmp  Mulai
            DelayPeraga:
                  jnb  Pulsa, KeluarPeraga
                  clr   Pulsa
                  djnz  r4, KeluarPeraga
                  mov   RegBendera, #0
                  clr   Buzzer
                  ajmp  AmbilWaktu
                  KeluarPeraga:
                        ajmp  Mulai
Tampilan LED 7 segmen adalah sesuai dengan data pada Kode7Segmen. Jika diterjemahkan maka akan menampilkan 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, t, A, d, C dan blank. Untuk mengambil kode tersebut mengunakan perintah MOVC
DataLED:
      mov   Digit7Seg, #255
      mov   Data7Seg, #255
      anl   a, #0fh
      mov   dptr, #Kode7Segmen
      movc  a, @a+dptr
      mov   Digit7Seg, a
      ret
      Kode7Segmen:
            db 11000000b, 11111001b, 10100100b, 10110000b, 10011001b
            db 10010010b, 10000010b, 11111000b, 10000000b, 10010000b
            db 10000111b, 10001000b, 10100001b, 11000110b, 255
Berikut adalah program rutin MenuProg yang berkaitan dengan penekanan tombol SET. Untuk kebutuhan pemrograman maka digunakan BufferProg untuk menyimpan informasi yang akan dilakukan pengaturan ulang dimulai dari pengaturan menit sampai pengaturan Chime.
Setiap penekanan tombol SET maka menu akan berpindah dari menu pertama hingga akhir sebanyak total 9 menu kemudian kembali ke posisi normal yaitu menunjukkan waktu jam dan menit.
MenuProg:
      clr   LED_Detik
      clr   Buzzer
      jnb   Dsp, ProsesMenu
      ajmp  AmbilWaktu
      ProsesMenu:
            mov   r0, #BufferProg
            mov   a, #10
            mov   b, #1
            acall DS1307_Read
            mov   r4, #5
            jb    Menu, MenuBerikut
            setb  Menu
            clr   Ubahan
            mov   r1,#0
            ajmp  MenuMenit
Setiap penekanan tombol SET maka menu akan berpindah dari menu pertama hingga terakhir sebanyak 9 menu kemudian kembali ke posisi normal menunjukkan waktu jam dan menit. Tapi sebelum kembali ke posisi normal jika terdapat perubahan maka perubahan tersebut akan disimpan.
      MenuBerikut:
            inc   r1
            cjne  r1, #9, MenuMenit
            jnb   T_Set, $
            setb  Buzzer
            jb    Ubahan, SimpanUbahan
            ajmp  AmbilWaktu
            SimpanUbahan:
                  mov   r0, #BufferProg
                  mov   a, #10
                  mov   b, #1
                  acall DS1307_Write
                  ajmp  AmbilWaktu
Setiap menu akan mengubah tampilan di mana digit 1 dan 2 yang semula menunjukkan waktu jam menjadi penunjuk kode menu. Untuk menu pengaturan menit akan menampilkan “t1”, Menu Jam dengan “t2”, tanggal dengan “t3”, bulan dengan “t4”, tahun dengan “t5”, penunjuk menit alarm dengan “A1”, jam alarm dengan “A2”, durasi alarm dengan “A3” dan terakhir untuk Chime dengan “C1”.
Untuk digit 3 dan 4 adalah informasi sesuai dengan menu-menu di atas. Semua data dalam format BCD (binary code decimal). Penunjuk jam menggunakan format 24 jam. Tahun dibatasi hingga maksimal sampai dengan 2025, jika ingin lebih tinggi bisa mengubahnya tapi maksimal adalah 2099. Durasi alarm juga dibatasi hingga 10 menit yang juga bisa dirubah sampai dengan maksimal 99 menit.
      MenuMenit:
            cjne  r1, #0, MenuJam
            mov   r0, #BufferProg
            jnb   T_Cek, SetMenit
            mov   BufferWaktu+2, #0a1h
            mov   BufferWaktu+1, BufferProg
            ajmp  AkhirMenu
            SetMenit:
                  acall UbahWaktu
                  cjne  a, #60h, X_Ubah
      MenuJam:
            cjne  r1, #1, MenuTanggal
            mov   r0, #BufferProg+1
            jnb   T_Cek, SetJam
            mov   BufferWaktu+2, #0a2h
            mov   BufferWaktu+1, BufferProg+1
            ajmp  AkhirMenu
            SetJam:
                  acall UbahWaktu
                  cjne  a, #24h, X_Ubah
                  ajmp  W_Reset
      MenuTanggal:
            cjne  r1, #2, MenuBulan
            mov   r0, #BufferProg+3
            jnb   T_Cek, SetTanggal
            mov   BufferWaktu+2, #0a3h
            mov   BufferWaktu+1, BufferProg+3
            ajmp  AkhirMenu
            SetTanggal:
                  acall UbahWaktu
                  cjne  a, #24h, X_Ubah
                  ajmp  W_Reset
      MenuBulan:
            cjne  r1, #3, MenuTahun
            mov   r0, #BufferProg+4
            jnb   T_Cek, SetBulan
            mov   BufferWaktu+2, #0a4h
            mov   BufferWaktu+1, BufferProg+4
            mov   r0, #BufferProg+4
            ajmp  AkhirMenu
            SetBulan:
                  acall UbahWaktu
                  cjne  a, #13h, X_Ubah
                  ajmp  T_Reset
                  W_Reset:
                        mov   a, #0
                        ajmp  X_Ubah
                  T_Reset:
                        mov   a, #1
                  X_Ubah:
                        mov   @r0, a
                        ajmp  AkhirMenu
      MenuTahun:
            cjne  r1, #4, MenuAlarmMenit
            mov   r0, #BufferProg+5
            jnb   T_Cek, SetTahun
            mov   BufferWaktu+2, #0a5h
            mov   BufferWaktu+1, BufferProg+5
            ajmp  AkhirMenu
            SetTahun:
                  acall UbahWaktu
                  cjne  a, #25h, X_Ubah
                  ajmp  T_Reset
      MenuAlarmMenit:
            cjne  r1, #5, MenuAlarmJam
            mov   r0, #BufferProg+6
            jnb   T_Cek, SetMenit
            mov   BufferWaktu+2, #0b1h
            mov   BufferWaktu+1, BufferProg+6
            ajmp  AkhirMenu
      MenuAlarmJam:
            cjne  r1, #6, AlarmDurasi
            mov   r0, #BufferProg+7
            jnb   T_Cek, SetJam
            mov   BufferWaktu+2, #0b2h
            mov   BufferWaktu+1, BufferProg+7
            ajmp  AkhirMenu
      AlarmDurasi:
            cjne  r1, #7, BellJam
            jnb   T_Cek, SetDurasi
            mov   BufferWaktu+2, #0b3h
            mov   BufferWaktu+1, BufferProg+8
            mov   r0, #BufferProg+8
            ajmp  AkhirMenu
            SetDurasi:
                  acall UbahWaktu
                  cjne  a, #11h, X_Ubah
                  ajmp  T_Reset
      BellJam:
            mov   r0, #BufferProg+9
            jnb   T_Cek, SetChime
            mov   BufferWaktu+2, #0c1h
            mov   BufferWaktu+1, BufferProg+9
            ajmp  AkhirMenu
            SetChime:
                  mov   a, @r0
                  inc   a
                  cjne  a, #2, X_Ubah
                  ajmp  W_Reset
      UbahWaktu:
            clr   ac
            clr   c
            mov   a, @r0
            swap  a
            anl   a, #0fh
            xch   a, b
            mov   a, @r0
            anl   a, #0fh
            da    a
            swap  a
            orl   a, b
            swap  a
            ret
      AkhirMenu:
            jnb   T_Set, $
            jnb   T_Cek, $
            setb  Buzzer
            mov   r0, #BufferWaktu+2
            ajmp  Peraga
Berikut adalah program yang berkaitan dengan penekan tombol CEK yang bisa digunakan untuk pengaturan tapi juga untuk peragaan lainnya selain jam dan menit yaitu tanggal/bulan, tahun dan waktu alarm.
MenuCek:
      clr   LED_Detik
      clr   Buzzer
      jnb   Menu, ProsesDsp
      ajmp  MenuMenit
      ProsesDsp:
            mov   r4, #5
            jb    Dsp, DspBerikut
            setb  Dsp
            mov   r1,#0
            ajmp  DspTanggal
      DspBerikut:
            inc   r1
            cjne  r1, #3, DspTanggal
            jnb   T_Cek, $
            setb  Buzzer
            ajmp  AmbilWaktu
      DspTanggal:
            cjne  r1, #0, DspTahun
            mov   BufferWaktu+1, BufferWaktu+4
            mov   BufferWaktu+2, BufferWaktu+5
            ajmp  AkhirMenu
      DspTahun:
            cjne  r1, #1, DspAlarm
            mov   BufferWaktu+1, BufferWaktu+6
            mov   BufferWaktu+2, #20h
            ajmp  AkhirMenu
      DspAlarm:
            mov   BufferWaktu+1, BufferWaktu+8
            mov   BufferWaktu+2, BufferWaktu+9
            ajmp  AkhirMenu
Untuk melengkapi program seutuhnya, diperlukan 2 buah modul untuk antar muka yang ada pada I2C.TXT dan DS1307.TXT yang sudah pernah aku sampaikan pada tulisanku sebelum ini.
$include (C:\tesasm\I2C.txt)
$Include (C:\tesasm\DS1307.txt)
End
Nah seperti itulah Sobat semua rancangan kita mengenai Jam dengan LED 7 segmen yang dilengkapi dengan alarm yang dapat disetel waktunya dan setiap jam juga ada bell chime. Masih banyak fasilitas yang dapat dikembangkan dalam pengimplementasiannya. Jadi bukan sekedar penampil waktu biasa.
DS1307 memiliki kapasitas sebesar 56 byte yang jika diinginkan dapat diisi dengan setidaknya 27 waktu alarm. Tapi penulis tidak ingin membayangkan jika hampir setiap jam alat kita membunyikan alarm belum lagi ditambah dengan bell chime. Tapi bel chime bisa di non-aktifkan dan keluaran untuk buzzer bisa digunakan untuk apa saja.
AT89C51 memiliki 32 bit gerbang I/O. Untuk rangkaian di atas masih menyisakan bahkan 1 byte gerbang yang benar-benar belum digunakan yaitu P3 ditambah 6 bit gerbang lainnya. Fasilitas serial pada P30 dan P31 juga perlu diberdayagunakan, belum lagi gerbang interupsi P32 dan P33, selain itu gerbang pewaktu P34 dan P35.
Aku pernah mencoba melengkapinya dengan remot audio/video yang ada di rumah, atau terhubung dengan PC melalui RS-232 baik menggunakan kabel maupun IR. Atau mengganti tombol dengan keypad. Bahkan yang masih terpasang tapi akhirnya tampilan LEDnya dihilangkan adalah pewaktu nyala lampu terprogram untuk semua lampu rumah.
Pokoknya sebagai penghobi elektronika adalah suatu yang menyenangkan mengotak-atik perangkat elektronik khususnya buatan sendiri.
Sudah ya, terima kasih sudah membaca artikel aku. Semoga bermanfaat dan bisa diterapkan oleh sobat semua.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS


Sholawat Ulul Albab
صلوات أولو الألباب
Sholawat Ulul Albab:
Sholawat Pembangun Karakter Umat Islam Yang Utuh dan Unggul.
Redaksi:
بسم الله الرحمن الرحيم
اللهُمَّ صَلِّ عَلَى سَيِّدِناَ مُحَمَّدٍ ذِى العَقْلِ وَ الفُؤَادِ،
صَلاَةً نَسْألُكَ بِهَا حُسْنَ الخَلْقِ وَ العَقْلِ وَ الفُؤَادِ،
وَ أنْ تَجْعَلَنَا بِهَا أهْلَ الذِّكْرِ وَ الفِكْرِ وَ الأوْرَادِ،
وَ عَلَى آلِهِ وَ أصْحَابِهِ وَ باَرِكْ وَ سَلِّمْ


Artinya indonesia ;
”Dengan nama Allah, yang Maha Pengasih lagi Maha Penyayang”,
Yaa Allah, beri Anugrah tuan kami Muhammad sang pemilik kecerdasan dan hati nurani, dengan anugrah yang sesungguhnya, kami mohon kepada-Mu, dengan berkat anugrah-Mu tersebut, bagusnya jasad, akal dan hati nurani kami. Dengan berkat anugrah-Mu tersebut hendaknya Engkau menjadikan kami sebagai ahli dzikir, ahli fikir dan ahli wirid (istiqomah), Demikian juga (beri anugrah) terhadap keluarga dan para sahabatnya, berkatilah dan sejahterakan (mereka).

Arti inggris :
SHOLAWAT ULUL ALBAB
Ya…Allah
Give your bestow to our prophet
Muhammad is smartest and most conscience
We pray to you with your blessing and your bestow
Sound of body, sound of mind and sound of heart
By blessing and your bestow you create us
As master of dzikir, fikir and wirid
Upon his families and companions
Please give them some mercies and happiness

A. Fadlilah / Kelebihan:
1. Sholawat yang merupakan media beribadah yang sangat tinggi pahalanya, sekaligus sebagai wasilah do’a yang sangat mustajab.
2. Do’a yang cukup singkat tetapi padat dan lengkap untuk pembentukan karakter bagi pengamal dan atau untuk orang lain, yang dikehendaki oleh pengamal.
3. Membentuk pribadi pengamal dan atau keluarganya, menjadi bebas penyakit dan ketidak seimbangan badan, akal dan hati nuraninya.
4. Menjadikan pribadi pengamal sehat dan indah badannya.Lurus, cerdas, kreatif, inovatif, dan kuat hafalannya. Hati nuraninya akan berkembang sensitive dan peka terhadap isyarat-isyarat dari alam malakut dan jabarut.
5. Insya Allah, Allah akan menjadikan pengamalnya menjadi profil ulul albab (cendikiawan yang diridloi Allah). Yakni menjadi ahli dzikir dan ahli fakir serta ahli amal yang istiqomah (konsisten dan komitmen).
B. Tatacara Mengamalkan
1. Amalan Rutin / Wirid, dibaca 4x, setiap selesai sholat lima waktu.
2. Terapi; dibaca 5x setiap selesai sholat lima waktu. Khusus untuk;
a. Kelainan tubuh, setiap kali sampai kata husnal kholqi di ulang 3x.
b. Kelainan akal: ketika sampai kata wal ‘aqli digati husnal ’aqli dan diulang 3x.
c. Kelainan jiwa: ketika sampai kata wal fu adi, diganti wa husnal fuadi, diulang 3x.
  1. Akan lebih baik jika pengamal sholawat ini membacakan surat al-fatihah kepada muallif sholawat ini sebelum mengamalkan, khususnya jika hendak untuk terapi.
  2. Untuk Ruqyah Syar’i dibaca 100x dan lebih utama jika dilaksanakana berjamaah.
Ttd
Kharisudin Aqib al-Faqir.
Muallif

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS