Anda di halaman 1dari 25

Analog to Digital Converter

(ADC)
Oleh : Agus Pracoyo
Pin
Pin--pin ADC

8 kanal ADC

LAB. MICROPROCESSOR Polinema


Diagram Blok ADC

LAB. MICROPROCESSOR Polinema


Register--register pengontrol ADC
Register
ADC Multiplexer Selection Register (ADMUX)

• Bit 7 dan 6, REFS1 dan REFS0: Refresh selection bits


Bit-bit ini dipergunakan untuk menentukan tegangan referensi dari
ADC seperti ditunjukkan dalam Tabel 4.1

Tabel 4.1 Pengaturan Tegangan Referensi ADC


REFS1 REFS0 Tegangan Referensi
0 0 Pin AREF, internal Vref off
0 1 PIN AVCC, dengan pin AREF diberi kapasitor
1 0 Tidak digunakan
1 1 Internal 2.56 V dengan pin AREF diberi kapasitor
• Bit 5, ADLAR: ADC Left adjust result
Bit ini dipergunakan untuk mengatur format penyimpanan data hasil
pembacaan ADC pada register ADCL dan ADCH
MUX3 MUX2 MUX1 MUX0 Kanal
0 0 0 0 ADC0
0 0 0 1 ADC1
0 0 1 0 ADC2
0 0 1 1 ADC3
0 1 0 0 ADC4
0 1 0 1 ADC5
0 1 1 0 ADC6
0 1 1 1 ADC7
ADC Control And Status Register A
(ADCSRA)

• Bit 7, ADEN: ADC Enable


Bit ini dipergunakan untuk mengaktifkan dan menonaktifkan ADC.
Jika ADEN berlogika 1 maka ADC enable dan sebaliknya.
• Bit 6, ADSC: ADC Start Convertion
Pada mode konversi tunggal, memberikan logika 1 pada bit ini
berarti memulai konversi.
Di dalam mode free running memberikan logika 1 pada bit ini berarti
start konversi yang pertama. Konversi pertama membutuhkan 25
siklus pulsa clock ADC dan untuk berikutnya 13 siklus, karena
konversi pertama membentuk inisialisasi.
Konversi berikutnya
• Bit 5, ADATE: ADC Auto Trigger Enable
Bit ini dipergunakan untuk mengaktifkan pemicu proses konversi
ADC sesuai dengan bit-bit ADTS pada register SFIOR. Jiks ADTE
berlogika 1 berarti pemicu ADC diaktifkan.
• Bit 4, ADIF: ADC Interrupt Flag
Bit ini merupakan tanda (flag) terjadinya interupsi ADC. Jika bit ini
berlogika 1 berarti konversi telah selesai.
• Bit 3, ADIE: ADC Interrupt Enable
Bit ini dipergunakan untuk mengaktifkan dan menon-aktifkan interupsi
ADC. Jika bit ini berlogika 1 dan bit I pada SREG juga berlogika 1, maka
pada akhir konversi bit ADIF =1 yang akan menyebabkan permintaan
interupsi ADC, dan proses pelaksanaan program melompat ke alamat
0x00E
• Bit 2..0, ADPS2…ADPS0: ADC Prescaler Selector Bit
Bit-bit ini dipergunakan untuk menentukan factor pembagi frequensi xtal
yang kemudian hasilnya dipergunakan sebagai clock ADC.
Tabel 4.3 Skala Clock ADC

ADPS2 ADPS1 ADPS0 Faktor pembagi


0 0 0 2
0 0 1 2
0 1 0 4
0 1 1 8
1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 128
Pengukuran Rang Diferensial
Pembacaan Port INPUT
Hasil konversi ADC
Inisialisasi ADC
ISR(ADC_vct)
{
int nilai_ADC = ADCW;
}

Int main(void)
{
ADMUX =(0<<REFS1)|(0<<REFS0) //teg ref vcc
|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)
|(0<<MUX0) //pilih ADC0
Inisialisasi ADC
Int main(void)
{
ADMUX =(1<<REFS1)|(1<<REFS0) //internal vref
|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)
|(0<<MUX0); //pilih ADC0
ADCSRA = (0<<ADEN)|(1<<ADFR)|(1<<ADIE)
|(0<<ADPS2)|(0<<ADPS1)|(0<<ADPS0)
|(1<<ADSC); //Start ADC
while(1)
{
//Tunggu interupsi akhir konversi
}
}
Contoh
Program baca ADC free running
//*****************************************************************
// Program membaca tegangan analog
//*****************************************************************
#include <built_in.h>
unsigned int adc_rd;
//Hanya untuk mode single ended
void main() {
DDRB = 0xFF; // Set PORTB as output
DDRC = 0xFF; // Set PORTC as output
while (1)
{
adc_rd = ADC_Read(2); // get ADC value from 2nd channel
PORTB = adc_rd; // display adc_rd[7..0]
PORTC = Hi(adc_rd); // display adc_rd[9..8]
}
}
Terima kasish

Anda mungkin juga menyukai