Sebenarnya cara ini bisa dipakai untuk mikrokontroler Atmega seri lainnya juga. Saya kali ini akan menggunakan ADC Atmega32 dengan menggunakan CodeVision AVR. Langsung saja buka aplikasi CodeVision AVR kemudian buat project baru setelah itu akan muncul jendela CodeWizard AVR
Kemudian kita seting ADC dengan mengklik bagian ADC pada jendela CodeWizard AVR tersebut, kemudian seting lah seperti pada gambar berikut
Perlu diperhatikan bahwa, untuk mengisi kolom Volt.Ref sebaiknya mikrokontroler anda pada pin AREF atau AVCC nya terhubung pada catu daya 5VDC (dihubungkan ke VCC). Seting ADC sudah selesai, tapi tidak lengkap jika hasil pembacaan ADC tidak ditampilkan, nah … sekarang kita seting LCD nya sekalian, coba klik bagian LCD dan seting lah seperti berikut
Disini saya pakai LCD pada PORTC dengan konfigurasi pin sudah tertera pada gambar diatas.
Kemudian klik File dan pilih "Generate, Save and Exit" kemudian akan muncul jendela
Isilah nama file sesuai dengan keinginan anda, misalnya ADC, jendela ini akan muncul tiga kali, beri nama dengan nama yang sama (supaya mudah).
Setelah itu akan muncul list program pada CodeVision yang siap anda buat programnya, jadi disitu anda dapat berkreasi sendiri sesuai keinginan anda, tapi supaya mudah saya menjelaskannya coba hapus saja semua list tersebut kemudian ganti dengan list dibawah ini
#include <mega32.h>
#include <stdio.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#define ADC_VREF_TYPE 0x20
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here
unsigned char data=0;
char kata[16];
void main(void)
{
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x83;
// LCD module initialization
lcd_init(16);
while (1)
{
data=read_adc(0);//baca data yang masuk pada ADC0 yaitu PINA0
sprintf(kata,"sensor : %d",data);//tampilkan data pada layar LCD
lcd_gotoxy(0,0);//posisi pada layar lcd
lcd_puts(kata);
delay_ms(100);//waktu tunda biar nggak kecepetan
lcd_clear();//clear layar LCD
// Place your code here
};
}
Berikut ini adalah hasil yang saya simulasikan di proteus
Silahkan bertanya jika tidak mengerti, selamat mencoba ...
Bro buat LDR Gmn
BalasHapusBisa ga ?
bisa, di seri dengan resistor, ada dua konfigurasi, vcc-resistor-LDR-GND dan vcc-LDR-resistor-GND, untuk yang vcc-resistor-LDR-GND node antara resistor-LDR di hubungkan ke pin ADC mikro, dan untuk VCC-LDR-resistor-GND node antara LDR-resistor di hubungkan ke pin ADC mikro,
Hapusmau tnya ne mas, , mohon d bantu ya. hehe
BalasHapussya bru buat konveyor pke sensor warna mengunakan 1 led dan 1 ldr untuk sensornya. nah saya binggungnya d programnya, bagaimana agar supaya motor bisa bergerak kekanan dengan waktu sekian detik. dan juga sebaliknya motor bisa berputar kiri sekian detik. mohon d balas ya. . terimakasih
bisa sekali...
Hapusjika pake motor DC (bukan stepper) maka untuk mengontrol motor agar dapat di kendalikan arah putarnya gunakan H-Brige Motor Driver, coba cari di google. kemudian masalah pewaktuannya bisa menggunkan delay atau menggunakan counter interupt timer.
Semoga Bermanfaat
deskripsi programnya kurang lebih seperti ini mas. jd ktika bendaputih lewat output teg ldr 0-1,5v motordc berputar kekanan 4detik, dan ketika benda hitam lewat teg output 2-3v motordc berputar kekiri 4dtik. sedangkan keadaan normal tanpa ada benda yang lewat teg output ldr 3,5v keatas maka motor tidak berputar,
Hapusini prog yg sya buat mas, tp sya simulasikan d isis kog msh trobel msalah pewaktuanya tidak bekerja.
while (1)
{
// Place your code here
read_adc(0);
if(read_adc(0)<=80) {PORTC=0b11111110;
delay_ms(500);PORTC=0b11111111;}
else if(read_adc(0)<=153) {PORTC=0b11111101;
delay_ms(500);PORTC=0b11111111;}
else PORTC=0b11111111;
}
}
mohon d bantu ya mas,, :)
coba ini ya...
Hapusif(state==0)
{
buffer=read_adc(0);
if(buffer<=80){state=1;PORTC=0b11111110;delay_ms(500);PORTC=0b11111111;}
else if(buffer<=153){state=2;PORTC=0b11111101;delay_ms(500);PORTC=0b11111111;}
else{state=0;PORTC=0b11111111;};
}
else if(state==1)
{
buffer=read_adc(0);
if(buffer<=80){state=1;}
else if(buffer<=153){state=2;PORTC=0b11111101;delay_ms(500);PORTC=0b11111111;}
else{state=0;PORTC=0b11111111;};
}
else if(state==2)
{
buffer=read_adc(0);
if(buffer<=80){state=1;PORTC=0b11111110;delay_ms(500);PORTC=0b11111111;}
else if(buffer<=153){state=2;}
else{state=0;PORTC=0b11111111;};
}
mas dapt nilai <80,, >80,, 153 dr mana??
Hapusnilai tegangan 1.5 V. adc yg di gunakan adalah 8 bit, 0-255. jadi nilai 1.5 V jika dibaca oleh adc tersebut akan memiliki nilai 80 diperoleh dari (80/256)*5=~1.5. begitu juga yang 153
Hapusmas kalo mau baca nilai intensitas cahaya pake LDR codingannya gman ya? apa ada pencerahan?
BalasHapuskoding sama seperti diatas, hanya saja potensio yang saya pakai diatas diganti dengan LDR yang diseri dengan resistor. susunannya begini : 1. vcc-LDR-resistor-GND atau 2. vcc-resistor-LDR-GND node antara LDR-resistor di hubungkan ke ADC0 nya atmega32... selamat mencoba
HapusKomentar ini telah dihapus oleh pengarang.
BalasHapusmas saya pengen lebh paham lagi tentang adc
BalasHapusmisal pake ldr ,,saat out ldr pembaagi tegangan 1,6-1,9 vmaka led pertama saja yg menyala
saat out ldr pembaagi tegangan 2,2-2,4 v maka led kedua saja yg menyala
saat out ldr pembaagi tegangan 2,6-2,8 v maka led ke3 saja yg menyala
terima kash atas bantuanya
nilai tegangannya di konversi dulu pake rumus (VDC/5)*255. setelah itu buat statement pake if atau lainnya. misal if (read_adc(0)<((1.9/5)*255) && read_adc(0)>((1.6/5)*255)){LED1_ON;};
Hapusmas aya mau tanya bagai mana menggerakar 2 motor stepper?? misal pin a 0 =0 motor stepper 1 bergerak 45 drajat cw lalu motor stepper 2 bergerak 90 drajat cw motor stepper 1 bergerak 45 drajat ccw lalu motor stepper 2 bergerak 90 drajat ccw lalu menunggu instruksi berikutnya
BalasHapusmaaf saya belum pernah menggunaka stepper motor... mungkin bisa cari di google
Hapusmas saya mau nanya lagi
Hapusbagaimana qt mau merekam dan memanggil hasil pengukuran adc
misal di adc 0 qt beri 3 kali input yang ber beda
lalu hasil pembacaane qt bandingkan di luar
misal adc0 pertama baca 100
adc0 ke2 baca 300
adc0 ke3 baca 500
lalu dari hasil pembacaan itu qt gunakan untuk menghidupkan led
jika hasil p1 lebh besar dari k2 dan k3 led 1 nyala
jika hasil pembacaanberbeda juga menghasilkan nyala led yang beda pula
mas mau nanya, kalau saya buat sensor warna terus gmna ya cara memprogramnya di avr?
BalasHapusmas mau nanya ni
BalasHapuskami mau buat solar cell mengikuti cahaya matahari menggunakan 3 ldr mas
KIRA" PROGRAM NYA GIMANA YAH MAS?
Permisi mas, mau tanya. saya mau buat pada atmega 16 dengan output 2 pin(PORTC.0&PORTC.1) yang dapat di kendalikan dengan potensio pada input PORTA.0, jika input 0-2volt maka PORTC.0 output positif dan PORTC.1 output negatif, jika inpit 2-3volt maka output PORTC.0 negatif dan output PORTC.1 positif. untuk penulisan syntaxnya gmana ya mas?
BalasHapuskak nilai adcnya kok gak berubah padahal nilai tegangannya berubah waktu aku ubah resistannya , minta tolong kenapa ya
BalasHapus