Tampilkan postingan dengan label Mikrokontroller. Tampilkan semua postingan
Tampilkan postingan dengan label Mikrokontroller. Tampilkan semua postingan

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

Minggu, 24 Januari 2010

Dasar Dasar Mikrokontroller Dasar

Postingan pertama setelah beberapa kali bikin blog dan g di apa2in
in ngapak = postingan sing kesiji sewise nggawe blog ping bola-bali tapi ora tau diapak-apakna"..
in english = first posting after i make some blog but never get in touch..
(kalo salah maap ya..namanya jg masih blajar..)

Belajar mikrokontroller dasar.,blajarnya sesuai jenis yang lg ngetren di pasaran yaitu AVR.,lebih spesifik lagi AVR ATMEGA*%#% (*%#%==8535)hehee..pakenya bahsa c menggunakan codevision.,kebetulan saya blajarnya kyk spek di atas tadi..
kok cuma ATMEGA y??mungkin kedepanny ada ATSBY..heheee..sapa tau...

Mikrokontroller menurut pengertian saya pribadi adalah merupakan yaitu sejenis IC yang dapat diperogeram di hapus diperogram lagi di hapus lagi di program lagi dan seterusnya sesuai keinginan sang programer. Selain harganya yang sangat-sangat jauh-jauh lebih murah dari prosesor komputer, aplikasinya juga terdapat dalam kehidupan sehari-hari misalnya pengontrol tulisan pada toko-toko, jam digital, papan score, atau untuk otak pada sistem robotika.

AVR (bukan nama makanan tapi nama jenis mikrokontroller). A Ve eR merupakan mikrokontroller jenis RICS yang hanya memerlukan 1 siklus untuk mengeksekusi sebuah instruksi, sedangken pendahulunya MCS merupakan jenis CICS yang memerlukan 12 siklus clock untuk eksekusi 1 buah intstruksi. Jadi dalam eksekusi perogeram maka AVR akan lebih cepat dari MCS.

spesifiksi ATMEGA8535:
8Kbyte Flash memory
512 byte EEPROM
512 byte Internal SRAM
8 channel ADC dengan resolusi 10 bit
32 pin jalur input/output.
dll..
seingat saya sie kyk gtu..

jenis AVR yang dikeluarkan untuk menggantikan tipe MCS yang membutuhkan 12 siklus clock untuk tiap kali eksekusi 1 perintah.,sedangkan AVR 1clock=1perintah.,12 kali lebih cepat..

Klan dari AVR sendiri menurut buku2 yang membahas sejarah mikrokontroller yang saya baca di toko buku mengatakan bahwa AVR dibagi menjadi 4 keluarga besar yaitu: klan AT90Sxx, klan ATMEGA, klan ATtiny, klan AT89RFxx.

AVR sendiri memiliki arsitektur Havard di mana antara kode program dan data, disimpan dalam memori secara terpisah, sehingga dengan arsitektur seperti ini memori dalam program akan lebih aman karena terlindungi dari *kuman penyakit, magsudnya spike atau tegangan yang dapat merusak kode program (*bacanya nyantai cuy heheeee)


AVR8535 memiliki 4 buah port yaitu PORTA,PORTB,PORTC dan PORTD. Masing-masing PORT memiliki 8 buah pin. Nih gambarnya




Oke basa-basi selesai, langsung pada cara pemrograman yaitu menggunakan CV AVR versi trial heheheee..
Latihan yang pertama adalah kontrol led jadi yang diatur pertama kali adalah register yang berhubungan dengan port sebagi output yaitu pengaturannya diatur pada DDR dari tiap2 port
Jika port akan digunakan sebagai output maka bit pada register DDR diisi dengan nilai 1, sedangkan jika ingin di jadikan input maka register pada DDR ini di isi dengan nilai 0.
Misalnya DDRA=0xff; maka artinya porta digunakan sebagi output, jika ditulis dengan biner maka DDRA= 0b11111111; artinya sama dengan sebelumnya. Sedangkan logika yang akan dikeluarkan diatur menggunakan register PORT, misal

DDRA=0xff; // porta sebagai output
PORTA=0xff; // output porta adalah 5 volt

Jika ingin dijadikan input maka di isi dengan 0, misal DDRA=0x00; atau DDRA=0b00000000;
Sedangkan pembacaan logika di masing-masing pin dapat dibaca dengan perintah PINA

DDRA=0x00; // porta sebagai input
Led = PINA; // nilai led sama dengan input pina


Sedangkan untuk fungsi tunda dapat menggunakan perintah delay_us(1000) atau delay_ms(1000).
Kalau delay_s() seingat saya belum pernah saya coba, delay_us artinya mikrosekon, ms artinya milisekon, delay_us(1000) berarti kita menggunakan tunda selama 1 milisekon atau 1000 mikrosekon;
Nah susu nan program atau struk tur dari progaram menggunakan bahasa c adalah sebagai berikut:

#include .h artinya prosesor n header pustaka (library) mikronya
Main() = fungsi utama
{ = awal badan program
; = tubuh program, diakhiri dengan titik koma (;)
} = akhir program

Sedangkan struktur blok program kyk gini wujudnya
{
Deklarasi variable;
Deklarasi konstanta;
Pernyataan;
}

Sedangkan penulisan komentar diawali dengan tanda // untuk satu baris
dan /*.....*/ untuk banyak garis.

sebenarnya ini tentang dasar-dasar tapi g seru klo g di kasih contoh aplikasinya.,karena ini dasar kita mulai dengan aplikasi yang sederhana.,yaitu kontrol LED


klo pake bahasa c di codevision kyk gini programnya, download dulu yah dimari

http://www.ziddu.com/download/9271125/ledsimple.txt.html

jika program diatas dibuat untuk menyalakan dan mematikan led dengan beberapa variasi..klo rangkaiannya beginian
mc---->/\/\/\<---->led<---->vcc
berarti lampu led akan menyala pada kondisi logika 0.,

sedangnya jika rangkaiankan begituan
mc---->/\/\/\<---->led<---->gnd
artinya lampu led akan menyala jika kondosi port berlogika 1..


Mohon maaf jika terdapat kesalah dalam tulisan saya ini, mohon dibenarkan agar yang lainnya yang baca jadi g ikutan salah.

okelah kalo beg beg beg begitu sampai jumpa pada perpostingan yang selanjutnya yaitu kontrol led dengan input.