Tuesday 18 September 2012

Belajar Menampilkan Data ADC di LCD 2x16

Apabila kita tahu bahwa mikrokontroler keluarga AVR memiliki banyak sekali fitur tambahan, salah satu yang kita ketahui adalah ADC internalnya. Penggunaan ADC internal sangatlah bermanfaat selain menghemat tempat karena tidak memerlukan lagi IC ADC tambahan juga resolusi yang dimiliki cukup baik yaitu 10 bit. Melalui resolusi tersebut kita bisa mendapatkan data cukup akurat untuk akuisisi data misalnya saja suhu, intensitas cahaya dan lain sebagainya. Pada ADC mikrokontroler tersebut juga memiliki kelebihan lain yaitu multichannel. Sehingga kita dapat melakukan pengambilan data maksimal dapat menggunakan 8 buah sensor karena pada mikrokontroler tersebut terdapat 8 channel ADC 10 bit.


Pada latihan kali ini kita akan mencoba menampilkan data ADC pada layar LCD 2X16 menggunakan PORTC pada mikrokontroler. Sebelumnya kita harus tahu bahwa untuk menggunakan ADC interna pada mikrokontroler AVR ini harus memberikan catu daya pada pin AVCC dan AREF. Disini saya menggunakan VCC sebagai sumber tegangan referensi untuk ADC yaitu 5 volt. Sehingga untuk resolusinya kita akan mendapatkan sebesar 5 mV/ 1023 diperoleh 0,004887586 mV tiap bit-nya pada ADC. Perlu diketahui bahwa untuk memberikan tegangan referensi VREF pada ADC menggunakan VCC harus dijaga kesetabilannya atau diukur terlebih dahulu nilai tepatnya VCC (biasanya antara 4,96 sampai 5,06 volt) karena nilai berubah sedikit akan sangat mempengarui data hasil dari pengukuran menggunakan VREF eksternal. Namun adapula yang menggunakan tegangan VREF internal ADC yaitu 2,56 volt tetapi harus melakukan pengaturan terlebih dahulu pada register ADC. Pada latihan ini saya akan menggunakan tegangan VREF eksternal yaitu anggap saja 5 volt dan ADC yang saya gunakan adalah ADC 0 yaitu ADC pada pin A.0 pada mikrokontroler AVR.

Untuk lebih jelasnya dapat dilihat gambar pada rangkaian simulasi berikut:


Dari gambar rangkaian simulasi diatas saya menggunakan sebuah potensiometer 10k untuk memberikan masukan tegangan pada ADC. Karena nilai tegangannya dapat diubah-ubah dengan cara menaikan atau menurunkan potensiometer dengan memanfaatkan prinsip pembagi tegangan melalui hambatan potensiometer yang dapat diubah-ubah.

Source codenya dalam bahasa C sebagai berikut:

#include 
#include 
#include 
#include 
#asm
.equ __lcd_port=0x15     // Setting LCD di PORTC 
#endasm
#define ADC_VREF_TYPE 0x00
char buffer[33];
int baca;

unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

void main(void)
{
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x82;
SFIOR&=0xEF;
lcd_clear();
lcd_init(16);
while (1)
      { 
        baca=read_adc(0);
        // menampilkan pada baris 0 dari kolom 0
        lcd_gotoxy(0,0); 
        lcd_putsf("Latihan ADC");
        lcd_gotoxy(0,1);
        // menampilkan data nilai yang berubah-ubah ke LCD 
        sprintf(buffer,"Dataku:  %d", baca); 
        lcd_puts(buffer); 
        // menampilkan persen setelah data dari ADC
        lcd_gotoxy(13,1); 
        lcd_putsf("%");
        delay_ms(10);
      }
}



Untuk mencobanya dapat didownload contoh file listing program dan simulasi pada link berikut:

5 comments:

  1. gan, postingan source kode delphi 7 data logger ADC ATMega-nya gan,,,
    butuh data dari berbagai sensor..

    ReplyDelete
  2. This comment has been removed by the author.

    ReplyDelete
  3. Mas, lampiran untuk source code dan simulasi proteusnya tidak bisa dibuka. Mohon untuk dikirimkan ke email saya titaoktavia4@gmail.com
    Makasih mas

    ReplyDelete