Jam Digital Tampilan LCD dan 7 Segment

Alhamdulillah, sobat inkubatek semoga dalam keadaan yang tambah baik, makin makmur, selalu bersyukur.. Wah sudah lama ya tidak posting tentang mikrokontroler, khususnya mikrokontroler AVR. Baik, kali ini kami akan memenuhi janji ke sobat inkubatek. Dulu ada yang nanya program mikrokontroler untuk jam digital dengan BASCOM-AVR. Kalau yang sudah diposting kan pakai bahasa CodeVisionAVR (CVAVR), silakan cek disini : “Jam Digital dengan Mikrokontroler“.

99 proyek arduino

Kali ini memakai mikrokontroler AVR ATmega8535. Sebagai RTC nya DS1307. Untuk program pertama kita tampilkan ke LCD, ditambah 2 tombol untuk seting jam dan menitnya ya. Rangkaian mikrokontroler dengan LCD dan RTC tampak seperti gambar berikut :

Rangkaian Jam Digital Tampilan LCD

Rangkaian Jam Digital Tampilan LCD

Program mikrokontroler untuk jam digital dengan tampilan LCD seperti  ini :

$regfile = “m8535.dat”
$crystal = 16000000
$lib “ds1307clock.lib”

Config Sda = Portd.7
Config Scl = Portd.6

Const Ds1307w = &HD0 ‘
Const Ds1307r = &HD1

Config Clock = User

Dim Weekday As Byte
Dim I As Byte , Jam As Byte , Menit As Byte

Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.6 , E = Portc.2 , Rs = Portc.0
Config Lcd = 16 * 2
Cursor Off
Cls
Lcd ” Jam Digital”
Lowerline
Lcd ” RTC DS1307″
Wait 1
Cls
Lcd “Date=”
Lowerline
Lcd “Time=”

Config Portb = Input
Portb = &HFF
Master Mikrokontroler
‘——————————————–
Do
Locate 1 , 6
Lcd Date$
Locate 2 , 6
Lcd Time$
For I = 0 To 50
If Pinb.0 = 0 Then
Incr _hour
Gosub Settime
Waitms 100
Locate 2 , 6
Lcd Time$
Elseif Pinb.1 = 0 Then
Incr _min
Gosub Settime
Waitms 100
Locate 2 , 6
Lcd Time$
End If
Waitms 20
Next I
Loop

‘************************** RTC *****************************************
‘called from ds1307clock.lib
Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0

I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 4 7
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Return

Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
Return

Sekarang kita lihat hasilnya. Saya memakai hardware Master Mikro AVR V2 untuk uji cobanya. Udah lengkap soalnya, ada USB Downloadernya (on board), RTC, LCD dll.

Jam Digital Tampilan LCD

Jam Digital Tampilan LCD

Untuk seting jam tinggal tekan saja tombol SW1 dan untuk seting menit tinggal tekan SW2.

Sekarang kita pakai 7 segment untuk menampilkan nilai jamnya. Siapkan rangkaian tambahan berupa 4 digit 7 segment common anoda. Rangkaian mikrokontroler jam digital dengan 7 segment tampak seperti pada gambar berikut :

Rangkaian Jam Digital Tampilan 7 Segment

Rangkaian Jam Digital Tampilan 7 Segment

Program mikrokontroler jam digital dengan 7 segment pakai BASCOM-AVR agak panjang sedikit ya, ..

$regfile = “m8535.dat”
$crystal = 16000000

Config Porta = Output
Config Portb = Input
Config Portc = Output
Porta = &HFF
Portb = &HFF
Portc = &HFF

Config Sda = Portd.7
Config Scl = Portd.6

Const Ds1307w = &HD0 ‘
Const Ds1307r = &HD1

Config Clock = User

Dim Weekday As Byte , S2 As Byte , S1 As Byte
Dim Jam_pul As Byte , Jam_sat As Byte , Men_pul As Byte , Men_sat As Byte

Dim Det_pul As Byte , Det_sat As Byte , I As Byte
Dim F_tombol As Byte
Dim C As Word
Dim F_kpd As Bit , Menu As Byte

Do
S1 = _sec
Gosub Getdatetime
Jam_pul = _hour / 10
Jam_sat = _hour Mod 10
Men_pul = _min / 10
Men_sat = _min Mod 10

Gosub Tampil_jam
‘Gosub Scan_tombol
If Pinb.0 = 0 Then
Incr _hour
Gosub Settime
Jam_pul = _hour / 10
Jam_sat = _hour Mod 10
For I = 0 To 20
Gosub Tampil_jam
Next I
Elseif Pinb.1 = 0 Then
Incr _min
Gosub Settime
Men_pul = _min / 10
Men_sat = _min Mod 10
For I = 0 To 20
Gosub Tampil_jam
Next I
End If
Loop

‘——————-
Tampil_jam:
Portc = &B1110
Porta = Lookup(jam_pul , Angka)
Waitms 2

Portc = &B1101
Porta = Lookup(jam_sat , Angka)
Waitms 2

Portc = &B1011
Porta = Lookup(men_pul , Angka)
Waitms 2

Portc = &B0111
Porta = Lookup(men_sat , Angka)
Waitms 2
Return
‘————————–

Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0

I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
Aplikasi Mikrokontroler

Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 47
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Return

Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
Return

Angka:
Data &H40 , &H79 , &H24 , &H30 , &H19 , &H12 , &H02 , &H78 , &H00 , &H10 , &H7F

Hasilnya pada 2 digit pertama tampil nilai jam, sedangkan pada digit ketiga dan keempat tampil menitnya.

jam 7seg

Untuk tampilan lebih menarik, antara jam dan menit dikasih 2 LED yang berkedip sebagai detikan. Silakan dimodifikasi sambil belajar pemrograman mikrokontroler.

Ok, semoga bermanfaat.

This entry was posted in Mikrokontroler AVR and tagged , , , . Bookmark the permalink.

4 Responses to Jam Digital Tampilan LCD dan 7 Segment

  1. Vian says:

    Mas yang pakai bahasa CVAVR “klik disini “kok nggak bisa ya?

  2. apandi57 says:

    Ahiiiwww…udah di update lagi nich inkubatec,saya banyak belajar mikro dari sini

Leave a Reply