Minggu, 25 Februari 2018

program jam digital bascom avr

'ASSALAMU'ALAIKUM WARAHMATULLAHI WABARAKATUH

'NAMA                       : HERMANTONI
'SEKOLAH                 : SMK MUHAMMADIYAH 1 PADANG
'DI BUAT                    : 05 FEBRUARI 2018
'PROGRAM                : JAM DIGITAL  RTC DS1307
'SEVEN SEGMENT   :  SEGMENT ANODA (porta abc = min dan portd 1234 = plus)

$regfile = "m16def.dat"
$crystal = 12000000
$hwstack = 32
$swstack = 10
$framesize = 60

Dim Detik_sat As Byte , Detik_pul As Byte
Dim Menit_sat As Byte , Menit_pul As Byte
Dim Jam_sat As Byte , Jam_pul As Byte
Dim X As Word , Data_segment As Byte

Config Portb = Output
Config Porta.0 = Output
Config Porta.1 = Output
Config Porta.2 = Output
Config Porta.3 = Output
Config Porta.4 = Output
Config Porta.5 = Output
Config Portc.5 = Output
Config Portc.6 = Output
Config Portc.7 = Output
Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.7 = Output
Config Sda = Portc.1
Config Scl = Portc.0
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Config Clock = User
Dim Weekday As Byte , Buff3 As Byte , Buff2 As Byte , Buff As Byte
Dim I As Byte , Count As Integer , Tem1 As Integer , Tem2 As Integer
Dim Rib As Integer , Rat As Integer , Pul As Integer , Sat As Integer

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim W As Word , J As Word
Start Adc
'dibawah ko kato kato pengantar ee
Portb = &B1011111
Porta = &B1111111
Portd = &HF
Waitms 200
Portb = &B1111110
Waitms 200
Portb = &B1111101
Porta = &H0
Waitms 200
Portb = &B1111011
Waitms 200
Portb = &B1110111
Porta = &HF
Waitms 200
Portb = &B1101111
Waitms 200
Portb = &B1011111
Porta = &H0
Waitms 200
Portb = &B0111111
Porta = &HF
Waitms 100
Portb = &B0111111
Waitms 900
Portd = &H00
Waitms 300
Porta = &HF
'semua berawal dari rasa penasaran
'hingga akhirnya bisa :)
'_hour = 17
'_min = 27
'_sec = 00
'Gosub Settime
'nan iko namo adiak awak mah :) jan di copy lo lae
'Porta = &B0001110
'Portd = &B1000
'Wait 1
'fa
'For X = 0 To 500
'Porta = &B0001110
'Portd = &B0100
'Waitms 1
'Porta = &B0001000
'Portd = &B1000
'Waitms 1
'Next
'fau
'For X = 0 To 333
'Porta = &B0001110
'Portd = &B0010
'Waitms 1
'Porta = &B0001000
'Portd = &B0100
'Waitms 1
'Porta = &B1000001
'Portd = &B1000
'Waitms 1
'Next
'fauz
For X = 0 To 400
Portb = &B0001110
Portd = &B0001
Waitms 1
Portb = &B0001000
Portd = &B0010
Waitms 1
Portb = &B1000001
Portd = &B0100
Waitms 1
Portb = &B0100100
Portd = &B1000
Waitms 1
Next
'auzi
For X = 0 To 250
Portb = &B0001000
Portd = &B0001
Waitms 1
Portb = &B1000001
Portd = &B0010
Waitms 1
Portb = &B0100100
Portd = &B0100
Waitms 1
Portb = &B1111001
Portd = &B1000
Waitms 1
Next
'uzi
For X = 0 To 333
Waitms 1
Portb = &B1000001
Portd = &B0001
Waitms 1
Portb = &B0100100
Portd = &B0010
Waitms 1
Portb = &B1111001
Portd = &B0100
Waitms 1
Next
'zi
''For X = 0 To 500
'Porta = &B0100100
'Portd = &B0001
'Waitms 1
'Porta = &B1111001
'Portd = &B0010
'Waitms 1
'Next
'Porta = &B1111001
'Portd = &B0001
'Waitms 1000
Portd = &B00000000
Waitms 600
Gosub Thermostat
Portd = &B00000000
Waitms 400
Gosub Jam
Portd = &B00000
Waitms 400
Gosub Data01
Portd = &B00000
Waitms 400
Gosub Siap
Waitms 100
Porta = &H0
Do
Gosub Getdatetime
Gosub Baca_tombol
Gosub Kalkulasi
Gosub Indikator
Gosub Tampil_segment
Loop
'ko bagi mambagi angko nan dari rtc
Kalkulasi:
Jam_pul = _hour / 10
Buff2 = Jam_pul * 10
Jam_sat = _hour - Buff2
Menit_pul = _min / 10
Buff = Menit_pul * 10
Menit_sat = _min - Buff
Detik_pul = _sec / 10
Buff3 = Detik_pul * 10
Detik_sat = _sec - Buff3

If Detik_sat >= 10 Then
    Detik_sat = 0
End If
If Detik_pul >= 6 Then
    Detik_pul = 0
End If
If Menit_sat >= 10 Then
    Menit_sat = 0
End If
If Menit_pul >= 6 Then
    Menit_pul = 0
End If
If Jam_sat >= 10 Then
    Jam_sat = 0
End If
If Jam_pul >= 2 And Jam_sat >= 4 Then
    Jam_sat = 0
    Jam_pul = 0
End If
Return

Jam:
'kalau ko jam
For X = 0 To 500
Portb = &B1110001
Portd = &B0001
Waitms 1
Portb = &B0001000
Portd = &B0010
Waitms 1
Portb = &B1001100
Portd = &B0100
Waitms 1
Portb = &B1011000
Portd = &B1000
Waitms 1
Next
Return
'ko kabawah alarm jam 5 pagi wak mah, bia ndak talambek, hehe...
'jo pergantian jam
Indikator:
If _min = 00 And _sec = 00 Then
Portc.5 = 1
Portd.7 = 1
 If _hour =< 4 Then
 Portd.7 = 0
 End If
 If _hour => 21 Then
 Portd.7 = 0
 End If
 Waitms 400
 Else
 Portc.5 = 0
End If
If _hour = 05 Then
Portd.7 = 1
Gosub Seni_e_mah
End If
If _hour = 07 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 08 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 09 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 10 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 11 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 12 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 13 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 14 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 15 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 16 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 17 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 18 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 19 And _min = 00 Then
Gosub Seni_e_mah
End If
If _hour = 20 And _min = 00 Then
Gosub Seni_e_mah
End If
'If _min = 00 And _sec = 00 Then
'Portd.7 = 1
'End If
'If _hour = 21 And _min = 00 Then
'Gosub Seni_e_mah
'End If
'If _min = 10 And Detik_pul = 0 Then
'Gosub Jam
'Portd = &B00000
'Gosub Data01
'Waitms 300
'Portd = &B00000
'End If
'If _min = 20 And Detik_pul = 0 Then
'Gosub Jam
'Portd = &B00000
'Gosub Data01
'Waitms 300
'Portd = &B00000
'End If
'If _min = 30 And Detik_pul = 0 Then
'Gosub Jam
'Portd = &B00000
'Gosub Data01
'Waitms 300
'Portd = &B00000
'End If
'If _min = 40 Then
'Gosub Jam
'Portd = &B00000
'Gosub Jam
'Gosub Data01
'End If
'If _min = 50 Then
'Gosub Data01
'End If
If Detik_pul = 0 Then
Porta.0 = 1
Else
Porta.0 = 0
End If
If Detik_pul = 1 Then
Porta.1 = 1
Else
Porta.1 = 0
End If
If Detik_pul = 2 Then
Porta.2 = 1
Else
Porta.2 = 0
End If
If Detik_pul = 3 Then
Porta.3 = 1
Else
Porta.3 = 0
End If
If _min = 50 And Detik_pul = 0 Then
Gosub Thermostat
Gosub Thermostat
Waitms 100
End If
If _min = 30 And Detik_pul = 0 Then
Gosub Thermostat
Gosub Thermostat
Waitms 100
End If
If _min = 10 And Detik_pul = 0 Then
Gosub Thermostat
Gosub Thermostat
Waitms 100
End If
Return
Siap:
For X = 0 To 600
Portb = &B0010010
Portd = &B00001
Waitms 1
Portb = &B1111001
Portd = &B00010
Waitms 1
Portb = &B0001000
Portd = &B00100
Waitms 1
Portb = &B0001100
Portd = &B01000
Waitms 1
Next
'smile
For X = 0 To 400
Portb = Not &B0010000
Portd = &B10000
Waitms 1
Portb = &B1000111
Portd = &B00001
Waitms 1
Portb = &B0010100
Portd = &B00010
Waitms 1
Portb = &B0010100
Portd = &B000100
Waitms 1
Portb = &B1110001
Portd = &B001000
Waitms 1
Next
Portb = Not &B10000001
Portd = &B00000
Waitms 100
Return
Tampil_segment:
   'Portd = &B00100000
 '    Data_segment = Lookup(detik_sat , 7_seg)
'     PortD = Data_segment
     'Waitus 40
   Portd = &B10000
     'Data_segment = Lookup(detik_pul , 7_seg)
   Portb = Not &B0010001
     Waitms 3
   Portb = &B1111111
   Portd = &B01000
     Data_segment = Lookup(menit_sat , 7_seg)
     Portb = Data_segment
     Waitms 3
   Portb = &B1111111
   Portd = &B00100
     Data_segment = Lookup(menit_pul , 7_seg)
     Portb = Data_segment
     Waitms 3
   Portb = &B1111111
   Portd = &B00010
     Data_segment = Lookup(jam_sat , 7_seg)
     Portb = Data_segment
     Waitms 3
   Portb = &B1111111
   Portd = &B00001
     Data_segment = Lookup(jam_pul , 7_seg)
     Portb = Data_segment
     Waitms 3
   Portd = &B00000
Return
Thermostat:
For J = 0 To 100
W = Getadc(7)
J = W * 2
Count = J + 45
Rib = Count / 1000
Tem1 = Count Mod 1000
Rat = Tem1 / 100
Tem2 = Tem1 Mod 100
Pul = Tem2 / 10
Sat = Tem2 Mod 10
For X = 0 To 600
Portd = &B0001
Portb = Lookup(rat , 7_seg)
Waitms 3
Portd = &B0010
Portb = Lookup(pul , 7_seg)
Waitms 3
Portd = &B0100
Portb = &B0011100
Waitms 3
Portd = &B1000
Portb = &B1000110
Waitms 3
Next
Next
Return
'tibo disiko kun panik palo wak aaa....
Baca_tombol:
 W = Getadc(5)
 If W = 0 Then
 Portc.7 = 1
 Else
 Portc.7 = 0
 End If
 If Portc.7 = 1 Then
 Incr _min
 _sec = 00
 Gosub Settime
 Gosub Getdatetime
 Waitms 800
 End If
 J = Getadc(4)
 If J = 0 Then
 Portc.6 = 1
 Else
 Portc.6 = 0
 End If
 If Portc.6 = 1 Then
 Incr _hour
 _min = 00
 _sec = 00
 Gosub Settime
 Gosub Getdatetime
 Waitms 800
 End If
 Return
'If Porta.7 = 0 Then
'Incr _min
'Waitus 100
'Gosub Settime

'Detik_sat = 0
'Detik_pul = 0
'Gosub Tampil_segment
'End If

'If Portd.6 = 0 Then
'Incr _hour
'Waitus 100
'Gosub Settime
'Detik_sat = 0
'Detik_pul = 0
'Gosub Tampil_segment
'End If
'Return

7_seg:
Data &B1000000                                              '11111000                                  '0
Data &B1111001                                              '11000000                                  '1
Data &B0100100                                              '10110111                                  '2
Data &B0110000                                              '10110111                                  '3
Data &B0011001                                              '4
Data &B0010010                                              '5
Data &B0000010                                              '6
Data &B1111000                                              '7
Data &B0000000                                              '8
Data &B0010000                                              '9

'mambaco data jak di rtc ko mah
Getdatetime:
  I2cstart
  I2cwbyte Ds1307w
  I2cwbyte &H0
  I2cstart
  I2cwbyte Ds1307r
  I2crbyte _sec , Ack
  I2crbyte _min , Ack
  I2crbyte _hour , Nack
  I2cstop
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
Return
Data01:
'ya awak lh nyo :)
For X = 0 To 500
'Porta = Not &B0000011
'Portd = &B10000
'Waitms 1
Portb = &B0000111
Portd = &B000001
Waitms 1
Portb = &B1000000
Portd = &B0010
Waitms 1
Portb = &B1001000
Portd = &B0100
Waitms 1
Portb = &B1111001
Portd = &B1000
Waitms 1
Next
Return
'ko maatur waktu pas patamo kali di download
Settime:
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  I2cstart
  I2cwbyte Ds1307w
  I2cwbyte &H0
  I2cwbyte _sec
  I2cwbyte _min
  I2cwbyte _hour
  I2cstop
Return

'maedit program : HERMAN TONI
'05 FEBRUARI 2018
'awak ambiak pedoman dari http/muhihsan54.blogspot.co.id/search/label/mikrokontroler
'END
'EH YOO, LUPO AWAK.....
'ko seni nyo bana mah, dak buliah tingga do, hehe...

Seni_e_mah:
Porta = &HF
Portc.5 = 1
Waitms 250
Porta = &H0
Portc.5 = 0
Portd.7 = 0
Waitms 200
Return



itulah program nya, di jam ini sudah dilengkapi dengan sensor suhu.

untuk sensornya, saya menggunakan TTC 104 yang saya ambil di power amplifier mobil.
biasanya sensor ini di tempelkan ke bodi/heatsink mosfet, sensor ini berwarna hijau.
kalo ga ada ga apa apa ko, cuma nanti pas menit ke 10, 20, 30, 40, 50 akan tampil 0'C

diprogram yg ana buat diatas, sengaja ana tambahkan alarm jam 05.00
led yang di PORTA akan kedip kedip, disertai dengan bunyi beb pada buzzer

berikut hasil simulasi dengan proteus



untuk untuk hasil video jamnya klik disini !!!
Tman² juga bisa download source file.bas nya disini...!!!


Jika ada yang perlukan sitanyakan, silahkan di kolom komentar.

Atau email hermantoni510@gmail.com disertai dengan url nya.

Fast respon via watsapp di no 0896 5222 733

Mari berteman di facebook, facebook.com/antonio.herman.50

Cukup sekian dulu pada tulisan kali ini, dilain waktu dishare lagi rangkain yg lain....

Wassalamu'alaikum wr.wb.



Poetra pultim....

Pultim fc, moga bangkit kembali !!!

Nak rang sijunjung….,