Interfacing
Materi 6: ADC, DAC & Sensor Interfacing
Disusun Oleh:
Outline
• General ADC concepts • ADC programming
• Sensor interfacing & signal conditioning • DAC interfacing
General ADC Concepts
ADC Devices
• Analog-to-digital converters (ADC) mrpkn salah satu alat yg paling banyak digunakan utk akuisisi data (data acquisition)
• Komputer digital menggunakan biner (diskrit), sdgkan
• Physical world segala sesuatu adlh analog
(kontinu)
• Physical quantities: temperatur, tekanan,
kelembaban dan kecepatan semua bersifat analog
• Sistem Analog sinyal2
bervariasi waktu yg
memiliki nilai-nilai kontinu • Sistem Digital sinyal2
bervariasi waktu yg memiliki nilai2 diskrit
Analog Digital
Dimengerti secara intuisi Memerlukan latihan untuk memahami Dapat dibagi menjadi tak terhingga Diskrit
Mudah mengalami kesalahan akibat presisi
Presisi bersifat mutlak
• Jgn salah memahami ttg tingkat presisi !! belum tentu representasi dlm bentuk digital selalu lebih akurat drpd analog
• Representasi digital disusun oleh individual, tersimbolkan scr diskrit dalam steps yg jelas
• Representasi analog tidak disusun oleh oleh step2 individual, melainkan oleh suatu rentang pergerakan yg
General ADC Concepts
General ADC Concepts
• ADC menerjemahkan input analog ke
output digital yg mewakili ukuran dari input tersebut relatif terhadap suatu referensi
• Ambil 3 jenis konsep ADC: 1. ADC Ideal
2. ADC Sempurna
General ADC Concepts
Ideal ADC
• ADC Ideal hanya konsep secara teori, & tidak bisa diterapkan dlm kehidupan nyata
• ADC Ideal memiliki resolusi yg tidak terbatas
• Setiap kemungkinan nilai input memberikan output unik dlm suatu rentang konversi
• Secara matematis, ADC Ideal digambarkan sbg garis lurus
General ADC Concepts
• Fungsi Transfer dr ADC IdealGeneral ADC Concepts
ADC Sempurna (Perfect ADC)
• Karena sifat dr sistem digital output berupa
garis lurus tidaklah dimungkinkan
• Utk mendefinisikan ADC sempurna konsep
kuantisasi (quantization) perlu dipelajari • Rentang output harus dibagi menjadi
sejumlah langkah (step), 1 langkah dr setiap kemungkinan output digital
General ADC Concepts
• Ini berarti 1 nilai output tidakberkorespondensi dgn suatu nilai input unik, namun suatu rentang kecil nilai input
• Hasilnya adlh fungsi transfer dlm bentuk
tangga
• Contoh, jika ADC yg memiliki 8 output step
berarti memiliki resolusi 8 level (atau 3-bit)
• Jika digabung dgn ADC ideal ADC sempurna scr tepat berada di sekitar garis lurus
General ADC Concepts
• Fungsi transfer dr ADC sempurna:General ADC Concepts
• ADC sempurna memiliki maksimum error sebesar ± ½ step
• Dgn kata lain memiliki maksimum quantization error ± ½ LSB
General ADC Concepts
• Salah satu contoh aktual ADC:General ADC Concepts
ADC Aktual
• Sama seperti ADC sempurna, namun memiliki berbagai tambahan error
• Juga memiliki jenis2 error yg lain, sprt: 1. Offset error
2. Gain error
3. Non-linearity
4. Temperature, frequency and power supply dependencies
General ADC Concepts
Conversion Range
• ADC AVR dpt dikonfigurasi utk:
a. Single-ended conversion
menggunakan 1 input channel
b. Differential conversion
menggunakan perbedaan antara 2 input channel
General ADC Concepts
General ADC Concepts
ADC Characteristics
• Koneksi sensor ke mikrokontroler melalui ADC diperlihatkan pd gambar berikut:
ADC Characteristics
• Blok diagram 8-bit ADCVref D0 D7 Vin Output data biner Analog Input Start conversion
Resolusi vs Ukuran Step untuk ADC (Vref =5V)
• Misal, untuk 8-bit jmlh step = 28 = 256
• Ukuran step = Vref/jumlah step = 5/256 = 19,54 mV
ADC Characteristics
n-bit Jumlah step Ukuran step (mV)
8 256 5/256 = 19,53
10 1.024 5/1.024 = 4,88
12 4.096 5/4.096 = 1,2
16 65.536 5/65.536 = 0.076
ADC Characteristics
• Karakteristik utama ADC, adlh:• Resolusi
• Waktu konversi
• Vref (referensi tegangan) • Output data digital
• Kanal analog input • dll
ADC Characteristics
Resolution
• ADC memiliki resolusi sebesar n-bit
• n = 8, 10, 12, 16, atau bahkan 24 bit
• Makin tinggi resolusi ukuran step makin kecil
• Ukuran step adlh perubahan terkecil yg bisa dilakukan oleh ADC
• Wlpn ukuran step tergantung dr arsitektur ADC itu sendiri, namun dpt kita manipulasi dgn Vref
ADC Characteristics
Conversion Time
• Conversion time waktu yg diperlukan oleh ADC untuk mengkonversi input sinyal analog menjadi output data biner
• Faktor yg mempengaruhi waktu konversi: • Sumber clock ADC
ADC Programming
• Seiring dgn meningkatnya penggunaan uC,
saat ini trdapat on-chip ADC seperti halnya
timer dan USART
• Hal ini sangat membantu, terutama utk
mengurangi penggunaan devais eksternal
• Sesi ini akan khusus membahas pemrograman ADC utk ATmega16
ADC Programming
Karakteristik ADC pd ATmega16, sbb:
• 10-bit ADC
• 8 input channel (single-ended), 7 input diferensial • Hasil output digital disimpan pd ADCL dan ADCH
• ADCH:ADCL total 16-bit, hanya 10 yg digunakan,
6 tdk terpakai (bisa memilih 6-bit atas atau 6-bit bawah)
• 3 pilihan Vref: Vref dr AVCC (analog VCC), referensi
internal 2,56V atau eksternal AREF pin
• Waktu konversi tergantung kristal dan register
ADC Programming
AVR ADC Hardware Considerations
• Utk sinyal logika pd sistem digital variasi
kecil pd level tegangan tidak memiliki efek pd output
• Misal: 0,2 V akan diterjemahkan sbg LOW
karena, utk logika TTL, semua tegangan lebih kecil dr 0,5V akan dibaca sbg LOW
ADC Programming
Contoh:
• ADC 10-bit memiliki Vref = 2,56V. Hitunglah output D0-D9 jika input analog sebesar:
a) 0,2V b) 0V
ADC Programming
Jawab:
• ADC = 10-bit, maka variasi tegangan: 210=1024
• Ukuran step=2,56V/1024 = 2,5 mV
a) Dout = 0,2V/2,5mV = 80 (dec) = 1010000 (bin) b) Dout = 0V/2,5mV = 0 (dec) = 0000000 (bin)
ADC Programming
Contoh:
• Untuk 8-bit ADC, digunakan Vref=2,56V.
Hitunglah output pada D0-D7 jika input analog adalah:
a. 1,7 V b. 2,1 V
ADC Programming
Jawab: • Ukuran step = 2,56V / (28) = 2,56/256 = 10mV a. Dout = 1,7V/10mV = 170 (dec) = 10101010 Maka D7:D0 = 10101010 b. Dout = 2,1V/10mV = 210 (dec) = 11010010 Maka D7:D0 = 11010010ADC Programming
• Pin AVCC menyediakan supply utk rangkaian analog ADC
• Utk memperoleh akurasi yg lebih baik kita harus menyediakan sumber tegangan yg stabil
ke pin AVCC
• Teknik ini dikenal sbg Decoupling AVCC from VCC
ADC Programming
• Utk mencapai tujuan tsb, digunakan induktor dan kapasitor, sbb:
ADC Programming
• Dgn menghubungkan kapasitor antara AVREF dan GND, maka kita dpt membuat tegangan Vref lebih stabil
ADC Programming
• Ada 5 register utama yg mengontrol ADC pd AVR, sbb:
1. ADCH (ADC Data Register HIGH) 2. ADCL (ADC Data Register LOW)
3. ADCSRA (ADC Control and Status Register A) 4. ADMUX (ADC Multiplexer Selection Reg.)
ADC Programming
1.ADMUX Register
ADC Programming
• Pemilihan referensi tegangan ADC:Pemilihan chanel input (single-ended)
MUX4:0 Single-ended Input
00000 ADC0 00001 ADC1 00010 ADC2 00011 ADC3 00100 ADC4 00101 ADC5
ADLAR bit operation
• AVR memiliki 10-bit ADC disimpan pd 2 register
ADC Programming
ADCH:ADCL Register
• Setelah konversi selesai, maka hasil akan disimpan pd register ADCL (Low Byte) dan ADCH (High Byte)
ADC Programming
ADCSRA Register
• Sebagai status dan kontrol register • Berikut adalah isi reg. ADCSRA:
ADC Programming
ADC Start Conversion Bit
• Single conversion menulis 1 pd bit ini akan mengaktifkan setiap kali konversi dilakukan
• Free running mode utk menjalankan
konversi pertama kali
ADC Programming
A/D Conversion Time
• Berguna sbg supply clock ke ADC
• Utk AVR ADC memerlukan clock dgn maksimum 200kHz
Prescaler: istilah untuk membagi clock sumber agar bisa digunakan oleh ADC.
ADC Programming
Contoh:
• Sebuah uC AVR memiliki clock sebesar 8MHz. Hitunglah frekuensi ADC jika diset sbb:
a) ADPS2:0 = 001
b) ADPS2:0 = 100
c) ADPS2:0 = 111
Tentukan apakah clock tsb valid apa tidak?
ADC Programming
• ADPS2:0 = 001 (1 desimal) 21 = 2
Clock ADC = CK/2 = 8MHz/2 = 4MHz
Lebih besar dr 200kHz tidak valid
• ADPS2:0 = 100 (4 desimal) 24 = 16
Clock ADC = 8MHz/16 = 500kHz
Lebih besar dr 200kHz tidak valid
• ADPS2:0 = 111 (7 desimal) 27 = 128
Clock ADC = 8MHz/128 = 62kHz Jawab:
ADC Programming
Sample-and-Hold Time
• Setelah channel ADC dipilih ADC
membutuhkan waktu sample-and-hold
capacitor (C hold) diisi penuh sesuai dgn input level tegangan pd ADC
• Pd AVR konversi pertama membutuhkan 25
ADC clock utk menginisialisasi sirkuit dan memenuhi waktu sample-and-hold
• Setiap konversi memerlukan 13 detak ADC
ADC Programming
• Berikut beberapa kondisi dan waktu utk ADC
• Jika tidak diperlukan sekali, gunakan ADPS2:0 = 111 (dengan CK/128) utk akurasi ADC yg lebih baik
Programming ADC in ADC:
#include <mega16.h>
#include <stdio.h>
void main (void) {
DDRB = 0xFF; //PortB sbg output
DDRD = 0xFF; //PortD sbg output
DDRC = 0x00; //PortC sbg input ADC
ADCSRA = 0x87; //enable ADC, pilih CK/128
ADMUX = 0x40; //VCC Vref, ADC0 single
//ended, data = right-justified
while (1){
ADCSRA |=(1<<ADSC); //start konversi
while((ADCSRA&(1<<ADIF))==0);//tunggu konversi slesai
PORTD = ADCL; PORTB = ADCH; }
Programming ADC in Arduino:
// the setup routine runs once when you press reset:
void setup()
{ }
// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// Convert from 0 - 1023 to a voltage (0 - 5V):
float voltage = sensorValue * (5.0 / 1023.0);
// print out the value you read:
analogWrite(9,voltage);
Programming ADC in Arduino:
int ADCval; void setup() {
Serial.begin(9600);
ADCSRA |= (1 << ADPS2); ADCSRA &= ~(1 << ADPS1); ADCSRA |= (1 << ADPS0);
ADMUX = 0;
ADMUX &= ~ (1 << REFS1); // Set ADC reference ke AVCC ADMUX |= (1 << REFS0); // Set ADC reference ke AVCC ADCSRA |= (1 << ADEN); // Enable ADC
ADCSRA |= (1 << ADIE); // Enable ADC Interrupt ADCSRA |= (1 << ADSC); // Start konversi A2D }
void loop() {
while((ADCSRA&(1<<ADIF))==0);//tunggu konversi slesai
PORTD = ADCL; PORTB = ADCH;
Daftar Pustaka
• Daniel J.Pack and Steven F.Barrettt, 2008,
Atmel AVR Microcontroller Primer:
Programming and Interfacing, Morgan & Claypool Publisher
• Mazidi, Naimi and Naimi, 2011, The AVR
Microcontroller and Embedded System: Using Assembly and C, Prentice Hall
• AVR ATmega16 Manual, Atmel Corporation