Monday, October 11, 2010

Simulasi Stopwatch Dengan Proteus


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:

wisnu menggelegar said...

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,

riry said...

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..

sffa said...

ojok mbulet" lurd...

jemmy said...

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