Aplikasi ADC



1. Dasar Teori [kembali]
Analog To Digital Converter
   AVR ATMega16 merupakan tipe AVR yang telah dilengkapi dengan 8 saluran ADC internal dengan resolusi 10 bit.  Dalam mode operasinya, ADC dapat dikonfigurasi, baik single ended input maupun differential input.  Selain itu, ADC ATMega16 memiliki konfigurasi pewaktuan, tegangan referensi, mode operasi, dan kemampuan filter derau (noise) yang amat fleksibel sehingga dapat dengan mudah disesuaikan dengan kebutuhan dari ADC itu sendiri.  ADC pada ATMega16 memiliki fitur-fitur antara lain :
    •    AREF adalah pin referensi analog untuk konverter A/D.
    •    Resolusi mencapai 10-bit
    •    Akurasi mencapai ± 2 LSB
    •    Waktu konversi 13-260μs
    •    8 saluran ADC dapat digunakan secara bergantian
    •    Jangkauan tegangan input ADC bernilai dari 0 hingga VCC
    •    Disediakan 2,56V tegangan referensi internal ADC
    •    Mode konversi kontinyu atau mode konversi tunggal
    •    Interupsi ADC complete
    •    Sleep Mode Noise canceler
Proses inisialisasi ADC meliputi proses penentuan clock, tegangan referensi, formal data keluaran, dan modus pembacaan.  Register-register yang perlu diatur adalah sebagai berikut:

•    ADC Control and Status Register A – ADCSRA.


ADEN :      1 = adc enable, 0 = adc disable
ADCS :     1 = mulai konversi, 0 = konversi belum terjadi
ADATE :    1 = auto trigger diaktifkan, trigger berasal dari sinyal yang dipilih (set pada trigger SFIOR bit ADTS).  ADC akan start konversi pada edge positif   sinyal trigger.
ADIF :     Diset ke 1, jika konversi ADC selesai dan data register ter-update.  Namun ADC Conversion Complete Interrupt dieksekusi jika bit ADIE dan bit-I dalam register SREG diset.
ADIE :     Diset 1, jika bit-I dalam register SREG di-set.
ADPS[0..2]:    Bit pengatur clock ADC, faktor pembagi 0 … 7 = 2, 4, 8, 16, 32, 64, 128.

•    ADC Multiplexer-ADMUX


REFS 0, 1 : Pemilihan tegangan referensi ADC
                    00 : Vref   = Aref
                    01 : vref    = AVCC dengan eksternal capasitor pada AREF
                   10 : vref = internal 2.56 volt dengan eksternal kapasitor pada AREF
ADLAR : Untuk setting format data hasil konversi ADC, default = 0

•    Special Function IO Register-SFIOR



SFIOR merupakan register 8 bit pengatur sumber picu konversi ADC, apakah dari picu eksternal atau dari picu internal.

ADTS[0...2] : Pemilihan trigger (pengatur picu) untuk konversi ADC, bit-bit ini akan berfungsi jika bit ADATE pada register ADCSRA bernilai 1.  Konfigurasi bit
ADTS[0...2] : dapat dilihat pada Tabel 2.1.

ADHSM    : 1.  ADC high speed mode enabled.  Untuk operasi ADC, bit ACME, PUD, PSR2 dan PSR10 tidak diaktifkan.

Pemilihan Sumber Picu ADC
2. Hardware [kembali]


3. Rangkaian Simulasi [kembali]


4. Flowchart [kembali]

5. Listing Program [kembali]
#include <mega16.h>                   // pemanggilan fungsi I/O ATMega 16
#include <delay.h>                    // pemanggilan fungsi delay
#include <alcd.h>                     // pemanggilan fungsi LCD
#include <stdio.h>                    // untuk rutin-rutin I/O standar C compiler
#define ADC_VREF_TYPE 0x00            // menggunakan aref sebagai tegangan referensi ADC
unsigned int read_adc(unsigned char adc_input)       // untuk membaca hasil dari ADC
{                                                    
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);            // tegangan defenisi yang digunakan yaitu aref
delay_us(10);                                        // delay 10 ms
ADCSRA|=0x40;                                        // mengaktifkan register ADSC
while ((ADCSRA & 0x10)==0);                          // mengaktifkan register adif
ADCSRA|=0x10;                                        // mengaktifkan register adif
return ADCW;                                         
}
                                                     // program utama
void main(void)
{                                                    // array 
char lcd_buffer[33];                                 
unsigned int masukan;                                // deklarasi masukan dengan tipe data interger
float hitung;                                        // deklarasi tipe data hitung dalam bentuk float

ADMUX=ADC_VREF_TYPE & 0xff;                          // aref
ADCSRA=0x87;                                         // megaktifkan register ADEN, ADPS0-2
lcd_init(16);                                        // karakter lcd 16
DDRA=0x00;                                           // PORT A sebagai input
while (1)                                            // program akan mengulang terus karena syarat while(1) akan selalu menghasilkan nilai benar (true)
      {                                              
      lcd_gotoxy(0,0);                               // letak kursor pada lcd yaitu pada x=0, dan y=0 

      lcd_putsf("V meter digital");                  // menampilkan karakter pada lcd
      masukan=read_adc(0);                           // memanggil variabel read_adc sebagai nilai masukan
      hitung=(float) masukan*5/1024;                 // operasi aritmatik untuk mendapatkan nilai hitung
      sprintf(lcd_buffer,"Volt: %0.2f v",hitung);    // menampilkan hasil adc (voltmeter)
      lcd_gotoxy(0,1);                               // letak kursor pada lcd yaitu pada x=0, dan y=1
      lcd_puts(lcd_buffer);                          // mengambil data dari lcd_buffer
    
      delay_ms(100);                                 // delay 100 ms
      lcd_clear();                                   // membersihkan layar lcd
      }
}

6. Vidio [kembali]

7. Link Download [kembali]
<rangkaian simulasi>
<listing program>
<html>

Tidak ada komentar:

Posting Komentar