Selasa, 16 Oktober 2012

PRAKTIK MIKROKONTROLLER DENGAN KEYPAD

Salah satu fungsi keypad pada aplikasi mikrokontroler adalah untuk memasukkan nilai. Set point misalnya. Pada system control suhu, kita akan memasukkan nilai set point suhu yang diinginkan, 42 celcius, maka pada keypad kita masukkan nilai 4 dan 2.
Memang menjadi mudah, tinggal pencet angka saja, tapi menjadi boros port. Perhatikan jika memakai keypad ukuran 3×4, kita butuh 7 port. Nah ini ada solusi menarik, yaitu menggunakan potensiometer. Tentu saja dengan memanfaatkan ADC internal. Ditambah dengan 1 tombol sebagai ‘release’.
Rangkaian mikrokontroler AVR ATmega8535 sangat sederhana, tampak pada gambar berikut :

Kali ini saya memakai bahasa C, masih mengandalkan CodevVsionAVR.
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
#asm
   .equ __lcd_port=0×15 ;PORTC
#endasm
#include <lcd.h>
#define ADC_VREF_TYPE 0×60
unsigned char adc,nilai,pos;
unsigned int setpoint;
char buf[33];
unsigned char read_adc(unsigned char adc_input)  
{
ADMUX=adc_input|ADC_VREF_TYPE;

while ((ADCSRA & 0×10)==0);
ADCSRA|=0×10;
return ADCH;
}
void main(void)
{
PORTD=0xff;
DDRD=0×00;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0×87;
lcd_init(16);
lcd_clear();
lcd_putsf(“Seting Nilai”);
lcd_gotoxy(0,1);
lcd_putsf(“Dg Potensiometer”);  
delay_ms(2000);
lcd_gotoxy(0,1);
lcd_putsf(“Nilai=          “);
lcd_gotoxy(6,1);
pos=0;
while (1)
      {
       adc=read_adc(0);
       if(adc<25) nilai=0;
       else if(adc<50) nilai=1;
       else if(adc<75) nilai=2;
       else if(adc<100) nilai=3;
       else if(adc<125) nilai=4;
       else if(adc<150) nilai=5;
       else if(adc<175) nilai=6;
       else if(adc<200) nilai=7;
       else if(adc<225) nilai=8;
       else if(adc<250) nilai=9;        
       sprintf (buf,”%d”,nilai);
       lcd_gotoxy (6+pos,1);                
       lcd_puts (buf);          
       if(PIND.0==0){          
          setpoint=setpoint*10+nilai;
          sprintf (buf,”%d”,setpoint);       
          lcd_gotoxy (6,1);
          lcd_puts (buf);
          pos++;
          delay_ms(200);          
          }
       delay_ms(100);      
      };
}





Tidak ada komentar:

Posting Komentar