ADC ATMega16 penampil LED

Tutorial Analog to Digital Converter(ADC) dengan tampilan LED

  1. ADC penampil LED <halaman ini>
  2. ADC penampil LCD
  3. ADC penampil LCD 10bit rev AVCC pin

Analog to Digital Converter(ADC) sebagaimana artinya adalah untuk mengubah data analog menjadi data digital. Kata sederhananya, sebuah voltmeter digital yang membaca tegangan dari battery kemudian ditampilkan berupa angka. Jadi dengan mikrokontroler dengan ADC bisa diprogram menjadi semacam voltmeter digital. Tidak sebatas voltmeter digital, karena banyak komponen elektronika juga menghasilkan atau mengeluarkan data tegangan analog yang kemudian dibaca mikrokontroler melalui ADC.

Program:

/*
 * adc.c
 * Created: 08/05/2017 19:47:36
 * Author: avr.easyelektro.com
 */
 
#include <io.h>
#include <delay.h>
 
// Voltage Reference: AREF pin
#define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (1<<ADLAR))
 
char a;
 
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCH;
}
 
 
void main(void)
{
PORTC=0xFF;
DDRC=0xFF;
 
DDRD=0xff;
 
ADMUX=ADC_VREF_TYPE;
ADCSRA=0b10000110;
SFIOR=0b000;
 
a=2;
 
while (1)
    {                                 
    a=read_adc(0);
    
    if (a<=75) {PORTC=0;}
    if (a>=76) {PORTC=0b10000000;}
    if (a>=102){PORTC=0b01000000;}
    if (a>=127){PORTC=0b00100000;}
    if (a>=153){PORTC=0b00010000;}
    if (a>=178){PORTC=0b00001000;}
    if (a>=204){PORTC=0b00000100;}
    if (a>=230){PORTC=0b00000010;}
    if (a>=255){PORTC=0b00000001;}
    
    PORTD=a;
    
    delay_ms(300);
 
    }
}

di atas contoh program sederhana dari ADC mikrokontroler yang digunakan untuk mengukur tegangan battery. LED diberi label dengan tegangan 1.5 Volt sampai 5 Volt  membaca tegangan yang diterima PORTA.0 kemudian menyalakan LED yang sesuai dengan indikator.

Pembahasan:

  • PORTA=ADC

Selain PORTA dapat digunakan sebagai port input/output, PORTA ini dapat difungsikan sebagai ADC. Semua PORTA dapat digunakan sebagai ADC(ADC0-ADC7). ADC dapat digunakan satu buah saja ataupun secara bersamaan. contoh di atas adc yang digunakan pada PORTA.0(ADC0) maka untuk membaca ADC programnya adalah:

 a=read_adc(0); 

jika menggunakan PORT lain penulisannya bisa
a=read_adc(1);
a=read_adc(2);
a=read_adc(3);
… dan seterusnya

Hasil pembacaan ADC adalah 0-255. Bernilai 0 jika ADC membaca tegangan 0Volt(nol/gnd), bernilai 255 jika ADC membaca tegangan 5Volt(tegangan yang sama dengan AREV).

  • AREV

AREF = Analog REFerence (tegangan analok referensi). digunakan sebagai referensi tegangan maksimal pada ADC. jika AREF diberi tegangan 3V kemudian PORTA.0 diberi tegangan 3V juga, maka hasil ADC akan menghasilkan angka 255(max)

  • program lain
if (a<=75) {PORTC=0;}
if (a>=76) {PORTC=0b10000000;}
if (a>=102){PORTC=0b01000000;}
if (a>=127){PORTC=0b00100000;}
if (a>=153){PORTC=0b00010000;}
if (a>=178){PORTC=0b00001000;}
if (a>=204){PORTC=0b00000100;}
if (a>=230){PORTC=0b00000010;}
if (a>=255){PORTC=0b00000001;} 

75; 76; 102; 127; 153; 178; 204; 230; 255 (ADC)
1.47; 1.5; 2; 2.5; 3; 3.5; 4; 4.5; 5 (analog Voltage)

Deretan angka di atas adalah perkiraan hasil ADC, bila tegangan 1.47 Volt hasil ADC adalah 75, bila 1.5 Volt hasil ADC adalah 76 dan seterusnya hingga 5 Volt adalah 255. Tentu saja deretan angka perkiraan angka ini bila AREF=5V.

Selain menggunakan Battery sebagai percobaan ADC, untuk lebih praktis juga bisa menggunakan potensio untuk menghasilkan tegangan yang dapat diubah ubah. Gambar skema bisa dilihat seperti di bawah ini.