Jumat, 03 September 2010

Counter motor using hall efek sensor UA1301

Alhamdulillah di sela2 kesibukan bisa bantu tmn ngerjain tugas dari dosen.,kali ini tugasnya buat counter motor dengan sensor hall efek ua1301 outpunya adalah tegangan.,sedangkan hasil dari pegukuran nanti akan di tampilkan di layar televisi anda.,wkakaaaaa.,bacanya nyatai cuy...
maksudnya di lcd..nanti alat ini akan digunakan untuk menghitung putaran motor selama 1 menit..



untuk kontroller cukup menggunakan atmega8.,lcd dikontrol melalui PORTD.,sensor akan masuk melalui PORTC.0 atau ADC.0
terus adaa sepesial ruquest dari teman saya yaitu di program pake bahasa basic.,jangan pake C.,
(saya) : lho emg knp?
(teman) : iya request dosenne?
(saya) : ?????? (curiga mode on)
(saya) : ojo2 dosene ga iso peka bahasa C?? ( basaha jogja mode on)
(teman) : mikir sejenak sambil nyengir
(teman) : iya ndean (bahsa ngapak mode on)

kira2 seperti itulah kronologisnya...hahaaaaaa...
Ya sudahlah apa boleh baud.,maksudnya apa boleh buat..akhirnya saya kerjakan dengan senang hati...

nie codenya
$regfile = "m8def.dat"
$crystal = 8000000


Dim A As Byte , B As Long

Dim Count As Word


Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.3

Config Lcd = 16 * 2


Config Adc = Single , Prescaler = Auto , Reference = Avcc

Dim Nilai As Long

Dim Channel As Byte

Start Adc


Config Timer1 = Timer , Prescale = 8

Timer1 = 64536

On Timer1 Detik

Dim Waktu As Long

Dim Flag As Bit


Flag = 0


Waitms 30
Cursor Off
Cls


'Lcd " Visited me on: " 'display this at the top line

'Wait 2


'Cls


'Lowerline 'select the lower line

'Lcd "WWW.TunasNgapak.Blogspot.com" 'display this at the lower line

'Wait 1

'For A = 1 To 12

' Shiftlcd Left 'shift the text to the right

' Wait 1 'wait a moment

'Next


'Wait 1

'Cls


'Lcd " Motor Rotation " 'display this at the top line

'Wait 1

'Lowerline 'select the lower line

'Lcd " Pidar Febriaji " 'display this at the lower line

'Wait 1

'Cls


Locate 2 , 1

Lcd "count="



Enable Timer1

Enable Interrupts



Do


Channel = 0

B = Getadc(channel)

B = B * 4500

Nilai = B / 1024

Locate 1 , 5

Lcd Nilai

Locate 1 , 10

Lcd "mV/G"




If Flag = 1 Then

Disable Interrupts

Locate 2 , 1

Lcd "stop= "

End If


If Flag = 0 Then

If Nilai >= 2300 Or Nilai <= 2000 Then

Count = Count + 1

Locate 2 , 7

Lcd " "

Locate 2 , 7

Lcd Count

End If

End If


Loop

End



Detik:


Waktu = Waktu + 1

If Waktu >= 60000 Then

Flag = 1

End If

Timer1 = 64536


Return



pengitungan timer menggunakan rumus:
nilainya=(1/xtal)(65536-x)*prescaler
ket :
nilainya= us (milisekon)
xtal = clock external
prescaler = skala pembagi clock external
x = nilai yang di masukin ke dalam TCNT1

pada awal program di lakukan configurasi timer1:
Config Timer1 = Timer , Prescale = 8 Timer1 = 64536
jika ingin di jadikan counter., maka
Config Timer1 = count , Prescale = 8


mari kita itung bersama2 permintaan teman saya itu.,yaitu membuat counter selama 1 menit.,dengan xtal 8 Mhz.,skala clock 8
nilainya=(1/8Mhz)(65536-64536)*8 nilainya=(0,125)(1000)*8 nilainya=1000us

lho kok cm 1000us=1ms.,tenang ada program yang mengulang untuk mendapat nilai 1 minute..
padahal menghitung selama 1 menit artinya 1menit=60detik=60000ms
maka diguanakan variable waktu untuk mengulang selama 60000 kali

Waktu = Waktu + 1
If Waktu >= 60000 Then
Flag = 1
End If
Timer1 = 64536

ketemu dah 1000us=1ms x 60000------> 60000ms
(teman) : owh gitu ya..
(saya) : lho kok.,komemtar lagi
(teman) : owh ya lupa..heheeee..silahkan dilanjut nulisnya..
(saya) : oke...

knp kok dibuat 1ms.,ya karena kepengin aja.,hahaaaaaa......

Waktu = Waktu + 1
If Waktu >= 60000 Then
Flag = 1
End If
Timer1 = 64536

lalu gimana caranya untuk membuat interrupt timer tiap 2ms.,bisa saja dunk.,mari kita itung
2ms=2000us
rumusnya: nilainya=(1/xtal)(65536-x)*prescaler
jawaban:
nilainnya=(1/8Mhz)(65536-63536)*8
nilainya=2000us -----------------> 2000us=2ms

ketemu dah.,simple tow...

nah sekarang gmn caranya ngitung tegangan dari hall efeknya?.,caranya adalah di program ini
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim Nilai As Long

Dim Channel As Byte

Start Adc


dan ini

If Nilai >= 2300 Or Nilai <= 2000 Then
Count = Count + 1

Locate 2 , 7

Lcd " "

Locate 2 , 7

Lcd Count

End If


kira2 seperti itulah hasil dari praktek saya kemaren.,kalo ada yang salah mohon maap dan tolong dibenerin.,biar yang lain yang baca ga ikutan salah.,otre....
skemata dan gambar pcb silakan ambil dimari

2 komentar:

  1. kayane kenal ma 'temen' yang dimaksud... (",)

    BalasHapus
  2. haaaahaaaa....ternyata 'temen' berkomentar lagi.,ya kyk kuelah cuy...

    BalasHapus