adc internal atmega 8

unsigned int getadc(unsigned char channeladc)
{
unsigned int adcVal;
ADMUX=channeladc|0x40;   //avcc
ADCSRA|=(1<<ADEN);
ADCSRA|=(1<<ADSC);
loop_until_bit_is_clear(ADCSRA,ADSC);
adcVal = ADCW;
ADCSRA&=~(1<<ADEN);
return adcVal;
}

mantap adc atmega keren, itu yang paling di suka di atmega. dulu kalo mau rubah data dari analog ke digital harus pakai adc 0804, atau 0809.

adc 0804 dengan mode free runing kerenlah, mantap, tapi hanya 1 chanel. kalo pengen banyak chanel harus ditambahkan ic 4051, jadi nambah lagi ic. ya zaman dulu belum ada atmega.

kalo pegalaman adc 0809, memang dulu saya pernah nyoba dan sudah bisa jalan, tapi saya kapok kalo harus bikin clock 500Khz. permaasalahannya cuma di clocknya aja.

kalo sekarang mah udah ada adc internal, jadi ngga perlu ribet lagi.  pokoknya hidup adc 0804.

KEYPAD 3X4 dihubungkan ke ADC ATMEGA8

Keypad 3×4 dihubungkan ke ADC, pada dasarnya adalah push button yang disusun secara matriks kemudian ditambahkan rangkaian pembagi tegangan. Dengan memakai prinsip pembagi tegangan ini, maka jika ada tombol yang ditekan maka akan didapat tegangan keluaran yang berbeda dengan tombol lain. Jika tegangan keluaran antar tombol berbeda maka nilai yang diambil ADC pun akan berbeda sehingga kita dapat memetakan tombol mana yang ditekan.

TAH IEU RANGKAIANNA

keypadadcberikut program bascomnya

$regfile = “m8def.dat”
$crystal = 8000000
$baud = 9600

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Satu Alias 819
Dua Alias 630
Tiga Alias 493
Empat Alias 786
Lima Alias 584
Enam Alias 446
Tujuh Alias 731
Delapan Alias 511
Sembilan Alias 376
Batal Alias 614
Nol Alias 384
Ok Alias 264

Dim Temphigh As Word
Dim Templow As Word
Dim Dataadc As Word

Declare Sub Ambildatakeypad
Do
Dataadc = Getadc(0)
Call Ambildatakeypad
Loop

Sub Ambildatakeypad
Temphigh = Satu + 5
Templow = Satu – 5
If Dataadc > Templow And Dataadc < Temphigh Then
Print “angka 1”
Goto Ambildatakeypadx
End If

Temphigh = Dua + 5
Templow = Dua – 5
If Dataadc > Templow And Dataadc < Temphigh Then
Print “angka 2”
Goto Ambildatakeypadx
End If

Temphigh = Tiga + 5
Templow = Tiga – 5
If Dataadc > Templow And Dataadc < Temphigh Then
Print “angka 3”
Goto Ambildatakeypadx
End If

Temphigh = Empat + 5
Templow = Empat – 5
If Dataadc > Templow And Dataadc < Temphigh Then
Print “angka 4”
Goto Ambildatakeypadx
End If

Temphigh = Lima + 5
Templow = Lima – 5
If Dataadc > Templow And Dataadc < Temphigh Then
Print “angka 5”
Goto Ambildatakeypadx
End If

Temphigh = Enam + 5
Templow = Enam – 5
If Dataadc > Templow And Dataadc < Temphigh Then
Print “angka 6”
Goto Ambildatakeypadx
End If

Temphigh = Tujuh + 5
Templow = Tujuh – 5
If Dataadc > Templow And Dataadc < Temphigh Then
Print “angka 7”
Goto Ambildatakeypadx
End If

Temphigh = Delapan + 5
Templow = Delapan – 5
If Dataadc > Templow And Dataadc < Temphigh Then
Print “angka 8”
Goto Ambildatakeypadx
End If

Temphigh = Sembilan + 5
Templow = Sembilan – 5
If Dataadc > Templow And Dataadc < Temphigh Then
Print “angka 9”
Goto Ambildatakeypadx
End If

Temphigh = Batal + 5
Templow = Batal – 5
If Dataadc > Templow And Dataadc < Temphigh Then
Print “batal”
Goto Ambildatakeypadx
End If
Temphigh = Nol + 5
Templow = Nol – 5
If Dataadc > Templow And Dataadc < Temphigh Then
Print “angka 0”
Goto Ambildatakeypadx
End If

Temphigh = Ok + 5
Templow = Ok – 5
If Dataadc > Templow And Dataadc < Temphigh Then
Print “oke”
Goto Ambildatakeypadx
End If

Print “tidak ditekan”
Ambildatakeypadx:
End Sub

Hasil simulasi proteus contoh untuk penekanan tombol angka1 dan tombol tidak ditekan

keypadadc1nilai resistor dapat diubah ubah sesuai dengan keinginan anda, nu aya dipake, pake wen rek sabaraha nilaina gen, elektronika for heheh ieu. hahahahahah