Malam hari yang cerah ditemani nyamuk2 genit, kali ini saya akan menjelaskan mengenai bagaimana cara membuat alat yang digunakan untuk mengetahui kecepatan putaran motor atau RPM meter sederhana menggunakan mikrokontroller ATMega16 dan Crystal 12 Mhz, prinsip kerjanya yaitu terdapat sebuah optocoupler , encoder dan motor dc, kemudian motor akan berputar yang mana juga akan memutarkan encoder, dari encoder masuk ke optocoupler sehingga data yang dihasilkan adalah berupa data high dan low (nilai 1 dan nilai 0). Nilai 0 artinya tegangan kurang dari 2,5 v dan jika lebih dari 2,5 v akan bernilai high. berikut adalah penjelasan program dan skemanya.
a. Minimum System
b. Motor DC dan Encoder
c. Program Bascom AVR
$regfile = "m16def.dat"
$crystal = 12000000
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2
Config Lcdpin = Pin , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 16 * 2
'setting pwm
Config Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Up
Config Timer0 = Timer , Prescale = 256
Ddrb.0 = 1
Ddrb.1 = 1
Cls
Cursor Off
'=========== set counter ==========
Ch Alias Pind.2
Config Pind.2 = Output
Config Ch = Input
Config Int0 = Falling
Const Debouncetime = 1
Dim Wtime As Byte
Dim Encounter As Integer
Dim Rpm As Integer
Dim Detak As Byte
Dim Detik1 As Integer
Dim Detik As Byte
Set Ch
On Int0 Getencoder
On Ovf0 Int_timer0
Wtime = 100
Encounter = 0
Enable Interrupts
Enable Int0
Enable Timer0
'=================================
Do
Portb.0 = 0
Portb.1 = 1
Pwm1a = 200
Upperline
Lcd "Lubang = " ; Encounter ; " " ; Detik
Lowerline
Lcd "RPM = " ; Rpm
Loop
Getencoder:
Waitms Debouncetime
If Ch = 0 Then
Incr Encounter
End If
Gifr = 64
Return
Int_timer0:
Incr Detak
If Detak > 0 Then
Detak = 0
Incr Detik1
End If
'nilai 197 adalah nilai counter untuk mencapai satu detik
If Detik1 > 197 Then
Detik1 = 0
Incr Detik
'mengubah ke RPM
'dikalikan 60 untuk mendapatkan nilai per menit
'dibagi 20 yaitu lubang encoder yang dipakai
Rpm = Encounter * 60
Rpm = Rpm / 20
Encounter = 0
End If
Return
d. VIDEO HASILNYA
$crystal = 12000000
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2
Config Lcdpin = Pin , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 16 * 2
'setting pwm
Config Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Up
Config Timer0 = Timer , Prescale = 256
Ddrb.0 = 1
Ddrb.1 = 1
Cls
Cursor Off
'=========== set counter ==========
Ch Alias Pind.2
Config Pind.2 = Output
Config Ch = Input
Config Int0 = Falling
Const Debouncetime = 1
Dim Wtime As Byte
Dim Encounter As Integer
Dim Rpm As Integer
Dim Detak As Byte
Dim Detik1 As Integer
Dim Detik As Byte
Set Ch
On Int0 Getencoder
On Ovf0 Int_timer0
Wtime = 100
Encounter = 0
Enable Interrupts
Enable Int0
Enable Timer0
'=================================
Do
Portb.0 = 0
Portb.1 = 1
Pwm1a = 200
Upperline
Lcd "Lubang = " ; Encounter ; " " ; Detik
Lowerline
Lcd "RPM = " ; Rpm
Loop
Getencoder:
Waitms Debouncetime
If Ch = 0 Then
Incr Encounter
End If
Gifr = 64
Return
Int_timer0:
Incr Detak
If Detak > 0 Then
Detak = 0
Incr Detik1
End If
'nilai 197 adalah nilai counter untuk mencapai satu detik
If Detik1 > 197 Then
Detik1 = 0
Incr Detik
'mengubah ke RPM
'dikalikan 60 untuk mendapatkan nilai per menit
'dibagi 20 yaitu lubang encoder yang dipakai
Rpm = Encounter * 60
Rpm = Rpm / 20
Encounter = 0
End If
Return
d. VIDEO HASILNYA
No comments:
Post a Comment