ADC Analog-to-Digital Converter
Kuliah #9TCK210 Teknik Interface dan Peripheral
Aplikasi ADC
cabonauts.com
maximintegrated.com
enterprise-europe.iwt.be
Sistem terkomputerisasi
Pokok Bahasan● Konversi analog ke digital● Arsitektur ADC di AVR Atmega8/16/32● Register● Pemrograman● Aplikasi
Setelah mempelajari bab ini, mahasiswa akan mampu
● [C2] memahami prinsip ADC dan DAC
● [C5] mendesain mikrokomputer dengan antarmuka ADC untuk peripheral sensor suhu dan kelembaban udara
● [C5] mendesain mikrokomputer dengan antarmuka DAC untuk peripheral speaker
Pengolahan Sinyal
ADC dan DAC
ADC SAMPLED ANDQUANTIZED WAVEFORM
DAC RECONSTRUCTEDWAVEFORM
ADC: Konverter A/D
● Menghasilkan keluaran digital sesuai dengan nilai sinyal analog masukan relatif terhadap tegangan referensi
● Proses: sinyal analog --> digital
– Analog: amplitudo kontinyu, waktu kontinyu
– Digital: amplitudo diskrit, waktu diskrit
– Jumlah nilai diskrit terbatas: 2N , N=jumlah bit
ANALOGINPUT
DIGITALOUTPUT
RESOLUTIONN BITS
REFERENCEINPUT
Analog Input DIGITAL OUTPUT CODE = x (2N - 1) Reference Input
Proses Konversi● Proses konversi
– Pencuplikan (sampling)● Mengubah sinyal waktu kontinyu menjadi sinyal
waktu diskrit● Parameter: frekuensi sampling
– Kuantisasi● Mengubah sinyal amplitudo kontinyu menjadi
sinyal amplitudo diskrit● Parameter: jumlah representasi bit
– Pengkodean● Mengkodekan sinyal diskrit dalam representasi
binernya (digital)
1. Pencuplikan● Merepresentasikan sinyal waktu kontinyu ke
dalam waktu diskritnya● Menentukan bandwidth sinyal tercuplik
(kriteria Nyquist)– Frekuensi sinyal Fs harus dari 1/2*Fsampling
agar tidak terjadi aliasing
DISCRETETIME SAMPLING
AMPLITUDEQUANTIZATION
y(t)
y(n)
y(n+1)
n-1 n n+1 n+3 ts
t
Bandwidth Nyquist & Aliasing
1 MHz 4 MHz
fsampling fsampling + fsignalfsampling - fsignal
signalpassband
3 MHz 5 MHz
fsignal
(FSIGNAL < ½ FSAMPLING)
1 MHz 4 MHz
fsampling fsampling + fsignalfsampling - fsignal
signalpassband
3 MHz 5 MHz
fsignal
(FSIGNAL < ½ FSAMPLING)
2. Kuantisasi
● Merepresentasikan sebuah sinyal analog yang mempunyai resolusi tak terbatas (kontinyu) ke digital yang mempunyai resolusi terbatas
100
11
10
01
00
Analog0 1/4 1/2 3/4 1 = FS
1LSB
Any Analog Input in this Range Gives the Same Digital Output
Code
Relasi Ideal Konverter A/DD
IGIT
AL
OU
TP
UT
1 LSB
ANALOG INPUT
1/8 2/8 3/8 4/8 5/8 6/8 7/8
001
010
011
100
101
110
111
Spesifikasi DC● Transisi kode ADC
ideal tepat 1 LSB● Untuk N-bit ADC,
terdapat 2N kode● 1 LSB = FS/2N
● Untuk ADC 3-bit, FS=1Volt, 1 LSB=1V/8
● Tiap langkah berpusat di tiap 1/8 FS 0 0 1
1 1 1
1 1 0
1 0 1
1 0 0
0 1 1
0 1 0
0 0 0
1 / 8 7 / 83 / 45 / 81 / 23 / 81 / 40
A n a l o g I n p u t
Dig
ital O
utp
ut
1 L S B
A D C T r a n s f e r F u n c t i o n( I d e a l )
3. Pengkodean Digital
● Mentranslasikan nilai analog terkuantisasi menjadi kode digital
● a/FS = d/M
a=nilai analog, FS=Vmax
M=jumlah langkah=2N
d=nilai digital
proportionality
Vmax = 7.5V
0V
1111
1110
0000
0010
0100
0110
1000
1010
1100
0001
0011
0101
0111
1001
1011
1101
0.5V
1.0V
1.5V
2.0V
2.5V
3.0V
3.5V
4.0V
4.5V
5.0V
5.5V
6.0V
6.5V
7.0V
Metode Konversi
Successive-approximation
Parallel converter
Resolusi ADC
● Merupakan perubahan tegangan analog terkecil yang menghasilkan perubahan 1 bit (=1 LSB)
– Jarak antara 2 level kuantisasi yang berdekatan
● Resolusi ADC: r = FS / 2N
● Sering dinyatakan langsung dalam bit
ADC dan Sistem Sensor
● K dan B: rangkaian pengkondisi tranduser– K = pengali tegangan skalar
– B = tegangan bias untuk menempatkan tegangan di Vmin dan Vmax ADC
● V2,max = (V1,max * K) + B
V2,min = (V1,min * K) + B
Contoh Rangkaian Pengkondisi
● Sensor photodiode menyediakan tegangan 0V untuk intensitas cahaya terbesar dan -2.50V untuk intensitas cahaya terkecil. Hitung nilai K dan B untuk tranduser ini sehingga dapat mempunyai skala penuh di ADC dengan FS=5V dengan referensi ke GND.
ADC di AVR ATMega16/32● 8 Channel ADC
Multiplexed– 8 Single-ended– 2 Differential with
Programmable Gain at 1x, 10x, or 200x
● 8/10 bit resolution● Variable Clock Speed● Various Reference
Voltage● Polling/Interrupt EOC
Fitur ADC di AVR
● 10-bit Resolution● 0.5 LSB Integral Non-linearity● ±2 LSB Absolute Accuracy● 13 - 260 µs Conversion Time● Up to 15 kSPS at Maximum Resolution● 8 Multiplexed Single Ended Input Channels● 7 Differential Input Channels● 2 Differential Input Channels with Optional Gain of 10x and 200x(1)● Optional Left adjustment for ADC Result Readout● 0 - VCC ADC Input Voltage Range● Selectable 2.56V ADC Reference Voltage● Free Running or Single Conversion Mode● ADC Start Conversion by Auto Triggering on Interrupt Sources● Interrupt on ADC Conversion Complete● Sleep Mode Noise Canceler
Arsitektur ADC di AVR
Distribusi Clock di AVR
● ADC has a dedicated clock domain (clk
ADC)
– reduce noise generated by digital circuitry
– gives more accurate ADC conversion results
Arsitektur ADC
ADC Auto Trigger Logic
ADC Prescaler
Diagram Pewaktuan ADC(Konversi Pertama, Mode Tunggal)
Waktu konversi: 25 cycle
Konversi Mode Tunggal
Waktu Konversi: 13 cycle (single-ended)
Konversi Auto-Triggered
Waktu konversi: 13.5 cycle
Free-Running Conversion
Masukan Analog dan Power
Hasil Konversi
● Setelah konversi selesai (ADIF=1), hasil konversi disimpan dalam register hasil (ADCL, dan ADCH)
Single-ended conversion
Differential conversion
ADMUX: Register Pemilihan MUX
● REFS[1:0]: memilih tegangan referensi
● ADLAR: ADC Left Adjust Result (1: left; 0:right)
MUX[4:0]: Pemilihan Kanal Input dan Gain
Lihat tabel 22-4 di datasheet AVR8/16/32 untuk daftar lengkap
ADCSRA: Register Kontrol dan Status
Register Kontrol dan Status
ADPS[2:0]: ADC Prescaler Select Bit
SFIOR – Special FunctionIO Register
● ADTS[2:0]: ADC Auto Trigger Source
Pemrograman ADC
● Hanya 1 kanal ADC yang bisa dikonversikan dalam 1 waktu
– Memilih Prescaler ADC (pembagi frekuensi): set ADPS[2:0] di register ADCSRA
– Memilih masukan analog MUX[4:0] di register ADMUX
– Memilih sumber tegangan referensi REFS[1:0]
– Mengeset ADLAR
– Membaca hasil konversi dari ADCH dan ADCL
Inisialisasi ADC
//*************************************************************//InitADC: initialize analog-to-digital converter//*************************************************************void InitADC( void){ ADMUX = 0; //Select channel 0 ADCSRA = 0xC3; //Enable ADC & start 1st dummy conversion //Set ADC module prescalar to 8 critical for //accurate ADC results while (!(ADCSRA & 0x10)); //Check if conversation is ready ADCSRA |= 0x10; //Clear conv rdy flag - set the bit}
Pembacaan Data ADC//*************************************************************//ReadADC: read analog voltage//*************************************************************unsigned int ReadADC(unsigned char chan){ unsigned int result, hvoltage, lvoltage; //weighted binary voltage ADMUX = channel; //Select channel ADCSRA |= 0x43; // Start conversion, Set ADC module // prescalar to 8 critical for accurate results
while (!(ADCSRA & 0x10)); //Check if converstion is ready
ADCSRA |= 0x10; //Clear Conv rdy flag – set the bit hvoltage = ADCL; lvoltage = (ADCH << 8);
result = hvoltage | lvoltage; return result;}
Digital Termometer
● Sensor Temperatur LM35
http://extremeelectronics.co.in/avr-tutorials/interfacing-temperature-sensor-lm35/
Antarmuka Accelerometer 3 Sumbu● ATMega32 + Accelerometer mma7260 + LCD
http://extremeelectronics.co.in/avr-tutorials/interfacing-mma7260-triple-axis-accelerometer-with-atmega32-avr-tutorial/
Antarmuka Accelerometer 3 Sumbu
● http://extremeelectronics.co.in/tools/visualize-adc-data-on-pc-screen-using-usart-avr-project/
ADC Graph