Kita dapat membuat stopwatch sederhana dengan menggunakan mikrokontoller AVR. Dalam simulasi ini digunakan mikrokontroller ATMEGA32 dan program dibuat dengan menggunakan BASCOM.
program menggunakan listing sederhana menggunakan interrupt timer0
listing:
'Program Stopwatch
$regfile = "m32def.dat"
$crystal = 12000000
'deklarasi LCD
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
Config Lcd = 16 * 2
Cursor Off
Cls
'Deklarasi variabel
Dim Pengali As Word
Dim Detik_1 As Byte
Dim Detik As Byte
Dim Menit As Byte
Dim Jam As Word
Dim Status As Byte
Dim Status2 As Byte
'konfigurasi timer
Config Timer0 = Timer , Prescale = 256
'setting porta
Ddra = 0
Porta = 255
'pengaktifan interupsi timer
On Ovf0 Int_timer0
'penggantian nama variabel
Pin_reset Alias Pina.2
Pin_on_off Alias Pina.1
Pin_capture Alias Pina.0
'setting nilai awal variabel
Pin_reset = 1
Pin_on_off = 1
Pin_capture = 1
Status = 0
Status2 = 1
'pengaktifan timer0
Enable Timer0
Do
If Pin_capture = 0 Then
Bitwait Pin_capture , Set
Incr Status2
Cls
Locate 1 , 5
Lcd "CAPTURE"
Locate 2 , 4
Lcd Jam ; ":" ; Menit ; ":" ; Detik ; ":" ; Detik_1 ; " " ; Capture1
End If
If Pin_on_off = 0 Then
Bitwait Pin_on_off , Set
Incr Status
End If
If Pin_reset = 0 Then
Pengali = 0
Detik_1 = 0
Detik = 0
Menit = 0
Jam = 0
End If
If Status > 2 Then
Status = 1
End If
If Status2 > 2 Then
Status2 = 1
Cls
End If
If Status = 1 Then Enable Interrupts
If Status = 2 Then Disable Interrupts
If Status2 < 2 Then
Locate 1 , 5
Lcd "STOPWATCH"
Locate 2 , 4
Lcd Jam ; ":" ; Menit ; ":" ; Detik ; ":" ; Detik_1 ; " "
End If
Loop
Int_timer0:
Incr Pengali
If Pengali > 0 Then
Pengali = 0
Incr Detik_1
End If
If Detik_1 > 99 Then
Detik_1 = 0
Incr Detik
End If
If Detik > 59 Then
Detik = 0
Incr Menit
End If
If Menit > 59 Then
Menit = 0
Incr Jam
End If
Return
karena masih pemula dalam pemrograman AVR maka program yang dibuat masih banyak kelemahan diantaranya fungsi start/stop yang masih kurang akurat saat penekanan tombol(telat beberapa milidetik) lalu pada fungsi lap(pause layar) terdapat angka nol yang entah darimana tiba2 muncul di pojok kiri bawah LCD.
bagi para pembaca yang sudah mahir tolong share apa yang kurang dari program diatas :)
4 comments:
untuk muncul keluar angka nol pada saat tombol capture ditekan itu disebabkan karena pada program
==>Lcd Jam ; ":" ; Menit ; ":" ; Detik ; ":" ; Detik_1 ; " " ; Capture1
seharunya tidak udah menggunakan capture1. Angka nol yang keluar diakibatkan nilai dari capture1 selalu bernilai nol. karena itu pada saat tombol capture ditekan, maka akan keluar angka 0
kalo masalah telat/ delay. ini mungkin disebabkan oleh 2 hal. jika anada menjalankan program ini di proteus, tentu saja ketika di simuilasikan waktu yang ditampilkan akan mengalami delay,namun tidak ketika program di download ke at32 sesungguhnya..
Namun sayangnya dalam program yang anda tuliskan ini digunakan clock internal 8Mhz, yang setiap clock nanti nya tidak akan mengeluarkan waktu tepat 1 detik melainkan 1,22detik, karena itu terdapt delay,
gue ada tugas nih buat project praktikum mikroprosessor…
disuruh buat program untuk membuat stopwatch…
bisa tolong dikasih arahan ini buatnya harus gimana???
coz gag ada bayangan nih..
ya ya ya
dateline nya buat minggu ini ni….
tolong ya..
ojok mbulet" lurd...
Kok dikatakan menggunakan clock internal 8mhz? Khan dalam program sudah dideklarasikan menggunakan xtal 12.000.000? Mohon penjelasannya.. jadi biar presisi harus bagaimana ya?
Post a Comment