Anda di halaman 1dari 9

ADC (Analog to Digital Converter)

Mikrokontroler

Gambar 1 Analog Sinyal

Sebagaian besar data yang ada di dunia ini merupakan data analog, misalnya: temperatur,
tekanan, tegangan listrik dll. Sebagai contoh temperatur di dalam boiler sebesar 800 C: saat
boiler dinyalakan, temperatur tersebut tidak akan langsung menunjukkan angka 800, tetapi
akan naik secara bertahap dari temperatur normal, 400 C, 500 C hingga mencapai 800 C.
Gambar di atas merupakan contoh dari sinyal analog.

Data analog yang ada akan diproses menggunakan sebuah sinyal prosessing, sebagai input
sinyal analog, akan tetapi pemrosesan sinyal analog, kurang efiisien dikarenakan akurasi nya
relatif kecil, error yang cukup besar dan kecepatan pemrosesan sendiri yang relatif lambat.
Sehingga data analog yang hendak diproses perlu diubah ke data bentuk digital menggunakan
Analog to Digital Converter (ADC).

Sebelum penjelasan lebih jauh mengenai ADC kita bahas dua jenis sinyal yaitu sinyal analog
dan sinyal digital. Sinyal analog adalah sinyal yang memiliki nilai variabel fisik yang berubah
secara kontinu pada variabel indepenen-nya. Umum-nya variabel terbentuk variabel fisik,
ucapan kita, dan suara musik gitar dan berbagai jenis alat musik yang kita dengar merupakan
sinyal analog. Jadi semua sinyal analog kita temui dalam kehidupan kita sehari-hari.

Pada sisi lain, sinyal digital mempunyai variabel-variabel fisik-nya hanya ditentukan oleh
nilai diskrit sesaat terhadap variabel-variabel independen-nya. Walaupun oleh mata manusia
tampak-nya kontinu tetapi sebenar-nya sinyal ini berupa sinyal diskrit yang mempunyai
pixel-pixel yang tersusun tidak kontinu.

Sinyal digital merupakan sinyal yang sangat penting karena semua sinyal yang
direpresesntasikan dalam sistem-sistem digital, komputer dan mikrokontroler adalah dalam
bentuk digital. Jadi ADC (Analog to Digital Converter) merupakan sebuah fasilitas yang ada
pada mikrokontroller yang digunakan atau berfungsi untuk mengubah sinyal analog kedalam
bentuk sinyal digital agar dapat dibaca oleh sistem digital mikrokontroller.
Gambar 2 Proses pengakuisisian sinyal (www.maxembedded.com)

Proses akuisisi sinyal terdiri dari tiga tahap, pada tahap pertama adalah tahap
pengindraan/sensing, oleh sensor terhadap besaran fisis yang akan di ukur atau diproses
secara lanjut, dimana sensor sendiri adalah sebuah komponen yang mengubah besaran fisis
menjadi besaran elektrik yang dapat berupa tegangan, arus atau hambatan. Sehingga besaran
fisis yang di-sensing akan diubah menjadi besaran elektrik yang masih merupakan sinyal
analog. Tahap kedua adalah tahap konversi sinyal analog menjadi sinyal digital dengan
menggunakan Analog to Digital Converter(ADC), sehingga dihasilkan sinyal digital, pada
tahap ketiga sinyal digital tersebut kemudian menjadi input pada komponen pemrosesan
sinyal, dimana komponen yang sering digunakan sebagai pemrosesan sinyal adalah
mikrokontroler (MCU).

Pada mikrokontroler keluarga AVR seri ATMEGA 8/16/32/8535, fitur ADC sudah build in di
dalam chip. Fitur internal ADC inilah yang menjadi salah satu kelebihan mikrokontroler ini
jika dibandingan dengan beberapa jenis mikrokontroler lainnya, sehingga tidak perlu
menggunakan rangkaian ADC eksternal tambahan. Atmega memiliki resolusi ADC 10 bit
yang berarti nilai ADC memiliki rentang nilai 2 pangkat 10 (2^10) = 1024. Hal tersebut
artinya ADC akan memiliki rentang nilai antara 0 hingga 1024. Selain itu, resolusi ADC juga
dapat menggunakan ADC 8 bit dan Jika ADC 8 bit, maka nilai ADC nya adalah 2^8.

Dengan 8 channel (PA0 PA7), rangkaian internal ADC memiliki catu daya tersendiri yaitu
pin AVCC. Dimana fitur lebih lengkapnya dapat dilihat pada gambar berikut :

10 bit Resolution

5 LSB Integral Non-Liniearity


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 with Optional Gain of 10x and 200x

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

Rumus konversi nilai sinyal analog menjadi besarnya tegangan dengan nilai ADC adalah
sebagai berikut :

Rumus ADC

Pada rumus di atas, System voltage merupakan besarnya tegangan input ADC atau AVCC.
Sebagai contoh, jika sistem kita menggunakan tagangan 5V , menggunakan resolusi ADC
10 bit dan tegangan analog sebesar 2.12V, maka berapakah nilai ADC?
Berikut ini adalah salah satu contoh aplikasi dari fitur ADC yang paling sederhana, yaitu
mengubah pembacaan nilai tegangan analog input menjadi nilai data digital atau nilai ADC
dimana tegangan analognya berasal dari potensiometer yang dirangkai sebagai pembagi
tegangan. Jika potensiometer diputar maka nilai tegangan akan berubah, dalam artian
semakin kecil atau semakin besar itu tergantung dari rangkaian pembagi tegangan yang
dibuat, sehingga nilai ADC yang terbaca dan ditampilkan ke LCD juga akan berubah.
Mikrokontroler yang digunakan adalah ATMEGA16 dengan rangkaian sebagai berikut:

Gambar 3 Rangkaian ADC pada Proteus

Pada aplikasi ADC ini digunakan compiler Codevision AVR, dimana untuk mengaktifkan fitur
ADC menggunakan codevison AVR ini adalah dengan memberi tanda centang pada ADC
enabled seperti pada gambar di bawah ini:
Gambar 4 Opsi ADC pada CVAVR

Adapun coding-an program yang digunakan adalah sebagai berikut:

Chip type : ATmega16


Program type : Applicatio
AVR Core Clock frequency: 12.
Memory model : Small

1 Chip type : ATmega16


2 Program type : Application
3 AVR Core Clock frequency: 12.000000 MHz
4 Memory model : Small
5 External RAM size :0
6 Data Stack size : 256
7 *****************************************************/
8 int ADC;
9 char temp[16];
10
11 #include <mega16.h>
12 #include <stdlib.h>
13 #include <delay.h>
14
15 // Alphanumeric LCD functions
16 #include <alcd.h>
17
18 #define ADC_VREF_TYPE 0x00
19
20 // Read the AD conversion result
21 unsigned int read_adc(unsigned char adc_input)
22 {
23 ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
24 // Delay needed for the stabilization of the ADC input voltage
25 delay_us(10);
26 // Start the AD conversion
27 ADCSRA|=0x40;
28 // Wait for the AD conversion to complete
29 while ((ADCSRA & 0x10)==0);
30 ADCSRA|=0x10;
31 return ADCW;
32 }
33
34 // Declare your global variables here
35
36 void main(void)
37 {
38 // Declare your local variables here
39
40 // Input/Output Ports initialization
41 // Port A initialization
42 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
43 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
44 PORTA=0x00;
45 DDRA=0x00;
46
47 // Port B initialization
48 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
49 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
50 PORTB=0x00;
51 DDRB=0x00;
52
53 // Port C initialization
54 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
55 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
56 PORTC=0x00;
57 DDRC=0x00;
58
59 // Port D initialization
60 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
61 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
62 PORTD=0x00;
63 DDRD=0x00;
64
65 // Timer/Counter 0 initialization
66 // Clock source: System Clock
67 // Clock value: Timer 0 Stopped
68 // Mode: Normal top=0xFF
69 // OC0 output: Disconnected
70 TCCR0=0x00;
71 TCNT0=0x00;
72 OCR0=0x00;
73
74 // Timer/Counter 1 initialization
75 // Clock source: System Clock
76 // Clock value: Timer1 Stopped
77 // Mode: Normal top=0xFFFF
78 // OC1A output: Discon.
79 // OC1B output: Discon.
80 // Noise Canceler: Off
81 // Input Capture on Falling Edge
82 // Timer1 Overflow Interrupt: Off
83 // Input Capture Interrupt: Off
84 // Compare A Match Interrupt: Off
85 // Compare B Match Interrupt: Off
86 TCCR1A=0x00;
87 TCCR1B=0x00;
88 TCNT1H=0x00;
89 TCNT1L=0x00;
90 ICR1H=0x00;
91 ICR1L=0x00;
92 OCR1AH=0x00;
93 OCR1AL=0x00;
94 OCR1BH=0x00;
95 OCR1BL=0x00;
96
97 // Timer/Counter 2 initialization
98 // Clock source: System Clock
99 // Clock value: Timer2 Stopped
100 // Mode: Normal top=0xFF
101 // OC2 output: Disconnected
102 ASSR=0x00;
103 TCCR2=0x00;
104 TCNT2=0x00;
105 OCR2=0x00;
106
107 // External Interrupt(s) initialization
108 // INT0: Off
109 // INT1: Off
110 // INT2: Off
111 MCUCR=0x00;
112 MCUCSR=0x00;
113
114 // Timer(s)/Counter(s) Interrupt(s) initialization
115 TIMSK=0x00;
116
117 // USART initialization
118 // USART disabled
119 UCSRB=0x00;
120
121 // Analog Comparator initialization
122 // Analog Comparator: Off
123 // Analog Comparator Input Capture by Timer/Counter 1: Off
124 ACSR=0x80;
125 SFIOR=0x00;
126
127 // ADC initialization
128 // ADC Clock frequency: 750.000 kHz
129 // ADC Voltage Reference: AREF pin
130 // ADC Auto Trigger Source: ADC Stopped
131 ADMUX=ADC_VREF_TYPE & 0xff;
132 ADCSRA=0x84;
133
134 // SPI initialization
135 // SPI disabled
136 SPCR=0x00;
137
138 // TWI initialization
139 // TWI disabled
140 TWCR=0x00;
141
142 // Alphanumeric LCD initialization
143 // Connections are specified in the
144 // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
145 // RS - PORTC Bit 0
146 // RD - PORTC Bit 1
147 // EN - PORTC Bit 2
148 // D4 - PORTC Bit 4
149 // D5 - PORTC Bit 5
150 // D6 - PORTC Bit 6
151 // D7 - PORTC Bit 7
152 // Characters/line: 16
153 lcd_init(16);
154
155 while (1)
156 {
157 ADC=read_adc(0);
158 lcd_clear( );
159 lcd_gotoxy(0,0);
160 lcd_putsf("Nilai ADC");
161 itoa(ADC,temp);
162 lcd_gotoxy(0,1) ;
163 lcd_puts(temp);
164 delay_ms(500);
165
166 }
167 }
(https://wayandadangunsri.wordpress.com/2016/10/14/membaca-nilai-adc-
analog-to-digital-converter-ditampilkan-dengan-lcd-16x2) materi bagian dua adc

(http://ilham-kn.blogspot.co.id/2013/10/praktikum-4-interupsi-eksternal.html )
materi bagian 3 adc

(https://electrocontrol.wordpress.com/tag/timer/) TIMER

Anda mungkin juga menyukai