Saturday 5 January 2013

ADC pada Mikrokontroler

Pada Postingan kali ini saya akan share cara mengaktifkan sarana ADC dimikrokontroler. Pertama tama kita harus mengetahui pengertian dari ADC itu sendiri. ADC adalah sebuah sarana pada mikrokontroler yang berfungsi mengubah tegangan analog menjadi tegangan digital. Itu sudah terlihat jika kita mengetahui kepanjangan ADC itu sendiri yaitu Analog to Digital Converter :D. Sebenarnya mikrokontroler hanya mengubah nilai tegangan analog yang masuk menjadi suatu nilai ADC yang mempunyai range tertentu. Untuk mengubahnya menjadi data yang masuk itu menjadi High atau Low kita harus mengubahnya sendiri menggunakan beberapa sintaks saja :D.


Berikut cara mengaktifkan ADC pada atmega8535.
1. Buka CVAVR nya
2. Pilih File, New
3. Pilih Chip Atmega8535, pilih Xtall yang digunakan





4. Pilih menu ADC

5. Pilih Menu LCD 
6. Pilih File,lalu generate save dan exit. Save dengan nama yang sama ya :D

Berikut potongan listing program untuk menampilakan nilai ADC pada LCD 16x2.



  1. #include <mega8535.h>  
  2. #include <stdio.h>
  3. #include <stdlib.h>

  4. char buff[16];              // untuk menampilkan nilai adc di LCD
  5. int adc,logic;                        // untuk menampung nilai adc dari fungsi read_adc(0);
  6. int limit_adc=500;
  7. #asm
  8.    .equ __lcd_port=0x15 ;PORTC
  9. #endasm
  10. #include <lcd.h>

  11. #include <delay.h>

  12. #define ADC_VREF_TYPE 0x00

  13. // Read the AD conversion result
  14. unsigned int read_adc(unsigned char adc_input)
  15. {
  16. ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
  17. // Delay needed for the stabilization of the ADC input voltage
  18. delay_us(10);
  19. // Start the AD conversion
  20. ADCSRA|=0x40;
  21. // Wait for the AD conversion to complete
  22. while ((ADCSRA & 0x10)==0);
  23. ADCSRA|=0x10;
  24. return ADCW;
  25. }

  26. // Declare your global variables here

  27. void main(void)
  28. {

  29. PORTA=0x00;
  30. DDRA=0x00;

  31. PORTB=0x00;
  32. DDRB=0x00;


  33. PORTC=0x00;
  34. DDRC=0x00;

  35. PORTD=0x00;
  36. DDRD=0x00;

  37. TCCR0=0x00;
  38. TCNT0=0x00;
  39. OCR0=0x00;

  40. TCCR1A=0x00;
  41. TCCR1B=0x00;
  42. TCNT1H=0x00;
  43. TCNT1L=0x00;
  44. ICR1H=0x00;
  45. ICR1L=0x00;
  46. OCR1AH=0x00;
  47. OCR1AL=0x00;
  48. OCR1BH=0x00;
  49. OCR1BL=0x00;


  50. ASSR=0x00;
  51. TCCR2=0x00;
  52. TCNT2=0x00;
  53. OCR2=0x00;

  54. MCUCR=0x00;
  55. MCUCSR=0x00;

  56. TIMSK=0x00;

  57. ACSR=0x80;
  58. SFIOR=0x00;

  59. ADCSRA=0x84;
  60. SFIOR&=0xEF;

  61. lcd_init(16);

  62. while (1)
  63.       {
  64.       
  65.           adc=read_adc(0);                          // nilai adc ditampung pada variabel adc
  66.           lcd_gotoxy(0,0);                            
  67.           sprintf(buff,"Adc=%d",adc);         //tampilin nilai adc
  68.           lcd_puts(buff);
  69.           lcd_gotoxy(0,1);                            
  70.           sprintf(buff,"Logic=%d",logic);         //tampilin nilai adc
  71.           lcd_puts(buff);
  72.           delay_ms(100);
  73.           lcd_clear(); 
  74.           
  75.           // untuk mengubah menjadi logic high atau low tinggal
  76.           // kita buat limitnya 
  77.           
  78.           if(adc>limit_adc)
  79.           {
  80.           logic=1; // high
  81.           }  
  82.           else
  83.           {
  84.           logic=0; //low
  85.           }
  86.       };
  87. }

*Note :
sprintf(buff,"Adc=%d",adc);
artinya : nilai adc disimpan pada variabel buff yang bertipe data char array (char buff [16]). Maksud dari %d adalah tipe data dari variabel adc adalah integer (int), jadi kita harus menggunakan %d.

Video simulasinya





Note : Jgn lupa saat simulasinya PIN AREF dan AVCC nya dihubungkan ke Supply 5V untuk tegangan referensinya. (adc=(vin/tegangan referensi) *range adc). Pada simulasi ini saya menggunakan range adc sebesar 1024 atau sebesar 10 bit. :D

Sekian dulu..
Terima Kasih :D




2 comments: