Digital Stopwatch

Akhirnya setelah lama ga posting di blog saya niatkan hari ini untuk posting lagi,, :D
yang akan saya bahas adalah, digital stop watch, menggunakan ATMEGA 32 , LCD 16*2.


Seperti biasa, kode pemrograman di tulis dalam bahasa basic dan di compile, kemudian hasil dari copiler tersebut (hex Code) di inputkan ke dalam proteus simulator,

konfigurasi rangkaian nya seperti gambar di bawah ini,
Kode Pemrograman :

'===============================================================================
'Program : Digital Stopwatch using M32 and LCD display 16*2 Monochrome
'Date : 03-March-2012
'Size : 9% of M32 Capacity flash ROM
'Requested : Dewi Nurazizah S (Budak baong minta program)
'Uploaded : 03-March-2012
'===============================================================================
'Micro chip declaration=========================================================
$regfile = "m32def.dat"
$crystal = 12000000

'port I/O Configuration=========================================================
Config Porta = Input
Config Portc = Output 'used as LCD output

Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.0 , Rs = Portc.1
Config Lcd = 16 * 2

'Dimension variable and Constant================================================
Dim Lap As Byte
Dim Perdetik As Byte
Dim Detik As Byte
Dim Menit As Byte
Dim Jam As Byte
Dim Stopwatch As String * 11
Dim Perdetik$ As String * 2
Dim Detik$ As String * 2
Dim Menit$ As String * 2
Dim Jam$ As String * 2
Dim Lap$ As String * 2
Dim Huruf As String * 1
Dim Eja As Byte
Dim I As Byte
Dim Lap_mem As Byte

Const Delay_huruf = 100 'Please adjust this number for delay
Const Delay_counter = 100 'please adjust this number for delay counter

Dim Text(2) As String * 16

Text(1) = " Stop Watch "
Text(2) = "Dewi Nurazizah S"

'Aliasing pin with real name====================================================
Mulai Alias Pina.0
Tambah Alias Pina.1
Kurang Alias Pina.2
'Berhenti Alias Pina.3
Reset_pin Alias Pina.4

'Setting value==================================================================
Perdetik$ = "00"
Detik$ = "00"
Menit$ = "00"
Jam$ = "00"
Lap$ = "00"

Perdetik = 0
Detik = 0
Menit = 0
Jam = 0
Lap = 0

Cursor Off
Cursor Noblink
Cls
'Fisrt Subroutine ==============================================================
Gosub Welcome

Cursor Off
Cursor Noblink
Cls

'Reset Display =================================================================
Reset_sub:
Locate 1 , 1
Lcd "Time:"
Locate 1 , 12
Lcd "|Lap:"
Locate 2 , 12
Lcd "| 00"
Stopwatch = Jam$ + ":" + Menit$ + ":" + Detik$ + ":" + Perdetik$
Locate 2 , 1
Waitms 10
Lcd Stopwatch
Waitms 10

'Setting Input for Laps Number==================================================
While Mulai = 1 Or Lap = 0 'it will stays looping as long as the laps number is zero
If Tambah = 0 And Kurang = 1 Then
Incr Lap
Lap$ = Str(lap)
If Lap < 10 Then
Locate 2 , 15
Lcd "0" ; Lap$
Else
Locate 2 , 15
Lcd Lap$
End If
Waitms 100 'adjust this number compared with actual counter (example: watch)
Elseif Tambah = 1 And Kurang = 0 Then
Decr Lap
Lap$ = Str(lap)
If Lap < 10 Then
Locate 2 , 15
Lcd "0" ; Lap$
Else
Locate 2 , 15
Lcd Lap$
End If
Waitms 100
End If

If Mulai = 0 And Lap = 0 Then
For I = 1 To 3
Cls
Waitms 100
Locate 1 , 1
Lcd "..Please Enter.."
Locate 2 , 1
Lcd "..Laps Number..."
Waitms 300
Next 1
Cls
Locate 1 , 1
Lcd "Time:"
Locate 1 , 12
Lcd "|Lap:"
Locate 2 , 12
Lcd "| 00"
Stopwatch = Jam$ + ":" + Menit$ + ":" + Detik$ + ":" + Perdetik$
Locate 2 , 1
Waitms 10
Lcd Stopwatch
Waitms 10
End If

Wend

Lap_mem = Lap
Lap = 0
Locate 2 , 15
Lcd "00"

'Interrupts Enabling for Laps detector (infra red sensor) and Stop Button=======
Enable Interrupts
Enable Int0
Enable Int1
Config Int0 = Falling
Config Int1 = Falling
On Int0 Tulis
On Int1 Selesai

'Main Program =================================================================
Do
Locate 2 , 1
Lcd Jam$
While Jam < 100
Locate 2 , 4
Lcd Menit$
While Menit < 60
Locate 2 , 7
Lcd Detik$
While Detik < 60
Locate 2 , 10
Lcd Perdetik$
While Perdetik < 100
Perdetik$ = Str(perdetik)
If Perdetik < 10 Then
Locate 2 , 11
Lcd Perdetik$
Else
Locate 2 , 10
Lcd Perdetik$
End If
Waitms 1
Incr Perdetik
Wend
Incr Detik
Perdetik = 0
Perdetik$ = "00"
Detik$ = Str(detik)
If Detik < 10 Then
Locate 2 , 8
Lcd Detik$
Else
Locate 2 , 7
Lcd Detik$
End If
Wend
Incr Menit
Detik = 0
Detik$ = "00"
Menit$ = Str(menit)
If Menit < 10 Then
Locate 2 , 5
Lcd Menit$
Else
Locate 2 , 4
Lcd Menit$
End If
Wend
Incr Jam
Menit = 0
Menit$ = "00"
Jam$ = Str(jam)
If Jam < 10 Then
Locate 2 , 2
Lcd Jam$
Else
Locate 2 , 1
Lcd Jam$
End If
Wend

Loop

End 'end program

'Sub Routine ===================================================================
Tulis:
Incr Lap
Lap$ = Str(lap)
If Lap < 10 Then
Locate 2 , 16
Lcd Lap$
Else
Locate 2 , 15
Lcd Lap$
End If
If Lap = Lap_mem Then
Goto Selesai
End If
Return

Welcome:
Locate 1 , 1
For I = 1 To 16
Huruf = Mid(text(1) , I , 1)
Lcd Huruf
Waitms Delay_huruf
Next I
Locate 2 , 1
For I = 1 To 16
Huruf = Mid(text(2) , I , 1)
Lcd Huruf
Waitms Delay_huruf
Next I
Wait 2
Return

Selesai:
Locate 1 , 1
Lcd "Total :"
Waitms 10
While Reset_pin = 1
Perdetik$ = "00"
Detik$ = "00"
Menit$ = "00"
Jam$ = "00"
Lap$ = "00"

Perdetik = 0
Detik = 0
Menit = 0
Jam = 0
Lap = 0
Wend
Goto Reset_sub

Ide pemrograman :
Smua data di pipsahkan menjadi 4 bagian,
1. perdetik (menghitung detik di bagi dalam 100 hitungan)
2. detik
3. menit
4. jam

karena rangkaian ini tidak menggunakan external clock source untuk meghitung delay waktunya, maka semua penghitungan "perdetik" membebankan counter / clock internal dari mikro tersebut. yang di hasilkan oleh crystal dengan frequency 12 MHz,
maka dari itulah, kita tidak bisa menuliskan 1ms utuk delay yang sebenarnya selama 1 mili second. tapi ya kita harus mencoba dengan cara mencocokan dengan nilai 1 detik yang sebenarnya dengan cara mengatur jumlah delay yang ada pada tiap siklus "perdetik" got it? :D

pada awal memulai program akan ada welcome text yang di tampilkan di LCD, ini hanya pemanis sekaligus eksistensi diri saat tugas di kumpulkan hehehe..


Note: nama saya Bukan Dewi ya.. -_____-" itu nama adek kelas yang "minta tolong" di bikinin program nya..

oke, nanuts.. alias lanjut!

setelah welcome text display akan di reset dan masuk ke mode standby penghitungan, apaila langsung di tekan "start" button, akan keluar kode error :



itu disebabkan karna jumlah lap yang akan di lalui belum di tentukan,
jadi,, isilah terlebih dahulu jumlah lap nya, kemudian start..

saat Laps yang di tentukan sudah di lalui, maka stopwatch ini akan berhenti secara otomatis dan menunjukan total waktu yang terhitung dari mulai Lap-1 sampai lap terakhir.



bagi yang ingin mendownload full dokumen nya,

klik Disini

Comments

  1. bisa kode programnya di buat dalam CodeAVR

    ReplyDelete
  2. Verification of Binance account is required and it is done on any device you are using your Binance account on. If you failed to verify your Binance account while using the Mobile app, you can ask for the assistance from the skilled professionals by dialing Binance Support Number at 1-800-665-6722 which is active nonstop. The professionals are approachable around the clock so, take your full time and avail the best possible solutions from them at less time. Visit website:- http://www.cryptophonesupport.com/exchange/binance

    ReplyDelete

Post a Comment