Interfacing
Materi 6: ADC, DAC & Sensor Interfacing Disusun Oleh:
I Nyoman Kusuma Wardana
Outline • • • •
General ADC concepts ADC programming Sensor interfacing & signal conditioning DAC interfacing
Kusuma Wardana - Interfacing 2013
2
General ADC Concepts
Kusuma Wardana - Interfacing 2013
3
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 Kusuma Wardana - Interfacing 2013
4
Sistem Analog vs Sistem Digital
• Sistem Analog sinyal2 bervariasi waktu yg memiliki nilai-nilai kontinu
• Sistem Digital sinyal2 bervariasi waktu yg memiliki nilai2 diskrit Kusuma Wardana - Sistem Digital 2013
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 kontinu Kusuma Wardana - Sistem Digital 2013
General ADC Concepts
Relasi ADC dan DAC
Kusuma Wardana - Interfacing 2013
7
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 3. ADC Aktual
Kusuma Wardana - Interfacing 2013
8
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 Kusuma Wardana - Interfacing 2013
9
General ADC Concepts • Fungsi Transfer dr ADC Ideal
Kusuma Wardana - Interfacing 2013
10
General 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 Kusuma Wardana - Interfacing 2013
11
General ADC Concepts • Ini berarti 1 nilai output tidak berkorespondensi 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 Kusuma Wardana - Interfacing 2013
12
General ADC Concepts • Fungsi transfer dr ADC sempurna:
Kusuma Wardana - Interfacing 2013
13
General ADC Concepts • ADC sempurna memiliki maksimum error sebesar ± ½ step • Dgn kata lain memiliki maksimum quantization error ± ½ LSB
Kusuma Wardana - Interfacing 2013
14
General ADC Concepts • Salah satu contoh aktual ADC:
Kusuma Wardana - Interfacing 2013
15
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 Kusuma Wardana - Interfacing 2013
16
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 Kusuma Wardana - Interfacing 2013
17
General ADC Concepts • Single-end & Differential Conversion
Kusuma Wardana - Interfacing 2013
18
General ADC Concepts ADC Accuracy
Kusuma Wardana - Interfacing 2013
19
Kusuma Wardana - Interfacing 2013
20
General ADC Concepts
Kusuma Wardana - Interfacing 2013
21
General ADC Concepts
Kusuma Wardana - Interfacing 2013
22
General ADC Concepts
Kusuma Wardana - Interfacing 2013
23
General ADC Concepts
Kusuma Wardana - Interfacing 2013
24
General ADC Concepts
Kusuma Wardana - Interfacing 2013
25
ADC Characteristics
Kusuma Wardana - Interfacing 2013
26
ADC Characteristics • Koneksi sensor ke mikrokontroler melalui ADC diperlihatkan pd gambar berikut:
Sensor
ADC
CPU
Kusuma Wardana - Interfacing 2013
DISPLAY
27
ADC Characteristics • Blok diagram 8-bit ADC Vref
Vin
D0
Analog Input
Start conversion
Output data biner D7
Kusuma Wardana - Interfacing 2013
28
ADC Characteristics Resolusi vs Ukuran Step untuk ADC (Vref =5V) 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
• Misal, untuk 8-bit jmlh step = 28 = 256 • Ukuran step = Vref/jumlah step = 5/256 = 19,54 mV Ukuran step = resolusi ADC Kusuma Wardana - Interfacing 2013
29
ADC Characteristics • Karakteristik utama ADC, adlh: • Resolusi • Waktu konversi • Vref (referensi tegangan) • Output data digital • Kanal analog input • dll Kusuma Wardana - Interfacing 2013
30
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 Kusuma Wardana - Interfacing 2013
31
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 • Metode konversi dr ADC tsb
Kusuma Wardana - Interfacing 2013
32
ADC Programming in the AVR
Kusuma Wardana - Interfacing 2013
33
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
Kusuma Wardana - Interfacing 2013
34
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 ADPS0:2 Kusuma Wardana - Interfacing 2013
35
Kusuma Wardana - Interfacing 2013
36
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
Kusuma Wardana - Interfacing 2013
37
ADC Programming Contoh: • ADC 10-bit memiliki Vref = 2,56V. Hitunglah output D0-D9 jika input analog sebesar: a) 0,2V b) 0V • Berapa variasi antara (a) dan (b)?
Kusuma Wardana - Interfacing 2013
38
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) • Perbedaannya = 7-bit
Kusuma Wardana - Interfacing 2013
39
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
Kusuma Wardana - Interfacing 2013
40
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 = 11010010 Kusuma Wardana - Interfacing 2013
41
ADC 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
Kusuma Wardana - Interfacing 2013
42
ADC Programming • Utk mencapai tujuan tsb, digunakan induktor dan kapasitor, sbb:
Kusuma Wardana - Interfacing 2013
43
ADC Programming • Dgn menghubungkan kapasitor antara AVREF dan GND, maka kita dpt membuat tegangan Vref lebih stabil • Teknik ini jg dpt meningkatkan presisi ADC
Kusuma Wardana - Interfacing 2013
44
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.) 5. SPIOR (SPecial FunctionIO Reg.) Kusuma Wardana - Interfacing 2013
45
ADC Programming 1.ADMUX Register
Pemilihan Vref
Kusuma Wardana - Interfacing 2013
46
ADC Programming • Pemilihan referensi tegangan ADC:
Kusuma Wardana - Interfacing 2013
47
Pemilihan chanel input (single-ended)
MUX4:0
Single-ended Input
00000
ADC0
00001
ADC1
00010
ADC2
00011
ADC3
00100
ADC4
00101
ADC5
00110
ADC6
00111
ADC7
48
ADLAR bit operation
• AVR memiliki 10-bit ADC disimpan pd 2 register • ADLAR Untuk mengatur posisi hasil konversi, sbb:
49
ADC Programming ADCH:ADCL Register • Setelah konversi selesai, maka hasil akan disimpan pd register ADCL (Low Byte) dan ADCH (High Byte)
Kusuma Wardana - Interfacing 2013
50
ADC Programming ADCSRA Register • Sebagai status dan kontrol register • Berikut adalah isi reg. ADCSRA:
Kusuma Wardana - Interfacing 2013
51
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 Kusuma Wardana - Interfacing 2013
52
ADC Programming A/D Conversion Time
• Berguna sbg supply clock ke ADC • Utk AVR ADC memerlukan clock dgn maksimum 200kHz Kusuma Wardana - Interfacing 2013
53
ADPSx: ADC Prescaler Select
Prescaler: istilah untuk membagi clock sumber agar bisa digunakan oleh ADC. Clock sumber terlalu cepat untuk dapat digunakan oleh ADC 54
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? Kusuma Wardana - Interfacing 2013
55
ADC Programming Jawab: • 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 Kurang dr 200kHz valid
56
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 Kusuma Wardana - Interfacing 2013
57
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 Kusuma Wardana - Interfacing 2013
58
Programming ADC in ADC: #include <mega16.h> #include <stdio.h> void main (void) { DDRB = 0xFF; DDRD = 0xFF; DDRC = 0x00; ADCSRA = 0x87; ADMUX = 0x40;
//PortB sbg output //PortD sbg output //PortC sbg input ADC //enable ADC, pilih CK/128 //VCC Vref, ADC0 single //ended, data = right-justified
while (1){ ADCSRA |=(1<
59
Programming ADC in Arduino: Arduino - Style
// 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); } 60
Kusuma Wardana - Interfacing 2013
61
Programming ADC in Arduino:
C- Style
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<
Serial.println(ADCval, DEC); delay(1000);
} 62
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 Kusuma Wardana - Interfacing 2013
63