Minggu, 10 Juni 2012

ADC dengan Kombinasi Switch



Pada percobaan rangkaian pembagi tegangan dengan menggunakan nilai ADC untuk membuat kombinasi beberapa tombol yang disediakan (4 tombol). 






 

Rangkaian  Skematik Push Button (Hold)

. Menggunakan Software Eagle

2. Menggunakan Software Proteus

                

   Tabel Perhitungan Tegangan Keluaran (Vout)
Pengukuran dengan AVO Meter
Perhitungan
Teori
Vout
ADC(LCD)
S1 ditekan       =  4.02 V
4.00 V
4.018 V
S2 ditekan       =  3.02 V
3.00 V
3.055 V
S3 ditekan       =  2.06 V
2.00 V
2.082 V
S4 ditekan       =  1.07 V
1.00 V
1.085 V
S1+S2 ditekan = 3.77 V
3.75 V
3.778 V
S1+S3 ditekan = 3.35 V
3.33 V
3.363 V
S1+S4 ditekan = 2.53 V
2.50 V
2.537 V
S2+S3 ditekan = 2.54 V
2.50 V
2.566 V
S2+S4 ditekan = 1.72 V
1.67 V
1.740 V
S3+S4 ditekan = 1.31 V
1.25 V
1.329 V


 Analisa Perhitungan :
            Hambatan Total dari Rangakian di atas diperoleh = 1650  Ω, dimana hambatan masing-masing resistor adalah sebesar 330 ± 2 % Ω. Untuk mencari tegangan keluaran (kaki.2) maka dapat dicari nilainya menggunakan rumus pembagi tegangan.

            Penekanan tombol secara kombinasi (2 tombol) perhitungannya sama seperti penekanan tombol tunggal. Untuk nilai pembilang dan penyebut disesuaikan dengan penekanan tombol.

            Agar nilai tegangan keluaran (Vout) yang berupa analog dapat diproses pada mikrokontroler, maka digunakan range tegangan ±0.005 volt. Vreff merupakan tegangan referrensi yaitu = 5 V. Perhitungannya yaitu sebagai berikut :
Nilai Range Tegangan saat S1 ditekan =    4.013<=vin<=4.023
Nilai Range Tegangan saat S2 ditekan =    3.050<=vin<=3.060
Nilai Range Tegangan saat S3 ditekan =    2.077<=vin<=2.087
Nilai Range Tegangan saat S4 ditekan =    1.080<=vin<=1.090
Nilai Range Tegangan saat S1+S2 ditekan =    3.773<=vin<=3.783
Nilai Range Tegangan saat S1+S3 ditekan =    3.358<=vin<=3.368
Nilai Range Tegangan saat S1+S4 ditekan =    2.532<=vin<=2.542
Nilai Range Tegangan saat S2+S3 ditekan =    2.561<=vin<=2.571
Nilai Range Tegangan saat S2+S4 ditekan =    1.735<=vin<=1.745
Nilai Range Tegangan saat S3+S4 ditekan =    1.324<=vin<=1.334
            Dari hasil percobaan diperoleh range tegangan dari pengukuran hasilnya tidak jauh berbeda dengan hasil perhitungan.Jika pada hasil perhitungan ketika kondisi S1 ditekan menunjukkan nilai tegangan keluaran (Vout) 4 volt maka pada hasil perhitungan dan pembacaan data mikrokontroler menunjukkan nilai tegangan keluaran (Vout) sekitar 4.018. Dari data tersebut diambil range sebesar 0.005 sehingga data range yang digunakan pada program 4.013<=vout<=4.023. Demikian pula untuk kondisi Switch yang lain digunakan range + 0.005 volt dan – 0.005volt.

LISTING PROGRAM
/****************************************************
Chip type           : ATmega16
Program type        : Application
Clock frequency     : 11.059200 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega16.h>
#include <stdio.h>
#include <delay.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>

#define ADC_VREF_TYPE 0x00

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// Declare your global variables here
char lcd_buffer[16];
char lcd_buf[16];
unsigned int temp;
float vin;

//Function Display ADC and Volt value
void tampil(void)
{
    lcd_gotoxy(0,0);
    sprintf(lcd_buffer,"adc=%d ",temp);
    lcd_puts(lcd_buffer);
    lcd_gotoxy(0,1);
    sprintf(lcd_buf,"Teg=%.3f volt",vin);
    lcd_puts(lcd_buf);
}

//Main Program
void main(void)
{
// Declare your local variables here
PORTC=0xff;
DDRC=0xff;

PORTA=0x01;
DDRA=0x00;

// ADC initialization
// ADC Clock frequency: 86.400 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x87
;

// LCD module initialization
lcd_init(16);

//display lcd
lcd_gotoxy(3,0);
lcd_putsf("== ADC == ");
delay_ms(200);
lcd_clear();
delay_ms(100);

while (1)
      {
      // Place your code here
        PORTC=0xff;     
        temp=read_adc(0);
        vin=((float)temp*0.00488758);
        tampil(); 
        delay_ms(300);     
       
if (vin>=4.013 && vin<=4.023){
                PORTC.0=0;lcd_clear();delay_ms(200);lcd_gotoxy(0,0);lcd_putsf("LED 1 Nyala");delay_ms(600);lcd_clear();
       tampil();
       delay_ms(300);}

else if(vin>=3.050 && vin<=3.060){
                PORTC.1=0;lcd_clear();delay_ms(200);lcd_gotoxy(0,0);lcd_putsf("LED 2 Nyala");delay_ms(600);lcd_clear();
       tampil();
       delay_ms(300);}  

else if(vin>=2.077 && vin<=2.087){
                PORTC.2=0;lcd_clear();delay_ms(200);lcd_gotoxy(0,0);lcd_putsf("LED 3 Nyala");delay_ms(600);lcd_clear();
       tampil();
       delay_ms(300);}

else if(vin>=1.080 && vin<=1.090){
                PORTC.3=0;lcd_clear();delay_ms(200);lcd_gotoxy(0,0);lcd_putsf("LED 4 Nyala");delay_ms(600);lcd_clear();
       tampil();
       delay_ms(300);}
             
else if(vin>=3.773 && vin<=3.783){
                PORTC.0=0;PORTC.1=0;lcd_clear();delay_ms(200);lcd_gotoxy(0,0);lcd_putsf("LED 1 & 2 Nyala");delay_ms(600);lcd_clear();
       tampil();
       delay_ms(300);}
             
else if(vin>=3.358 && vin<=3.368){
                PORTC.0=0;PORTC.2=0;lcd_clear();delay_ms(200);lcd_gotoxy(0,0);lcd_putsf("LED 1 & 3 Nyala");delay_ms(600);lcd_clear();
       tampil();
       delay_ms(300);}
             
else if(vin>=2.532 && vin<=2.542){
                PORTC.0=0;PORTC.3=0;lcd_clear();delay_ms(200);lcd_gotoxy(0,0);lcd_putsf("LED 1 & 4 Nyala");delay_ms(600);lcd_clear();
       tampil();
       delay_ms(300);}
             
else if(vin>=2.561 && vin<=2.571){
                PORTC.1=0;PORTC.2=0;lcd_clear();delay_ms(200);lcd_gotoxy(0,0);lcd_putsf("LED 2 & 3 Nyala");delay_ms(600);lcd_clear();
       tampil();
       delay_ms(300);}
             
else if(vin>=1.735 && vin<=1.745){
                PORTC.1=0;PORTC.3=0;lcd_clear();delay_ms(200);lcd_gotoxy(0,0);lcd_putsf("LED 2 & 4 Nyala");delay_ms(600);lcd_clear();
        tampil();
        delay_ms(300);}
             
else if(vin>=1.324 && vin<=1.334){
                PORTC.2=0;PORTC.3=0;lcd_clear();delay_ms(200);lcd_gotoxy(0,0);lcd_putsf("LED 3 & 4 Nyala");delay_ms(600);lcd_clear();
        tampil();
        delay_ms(300);}
                              
else{
tampil();
    }
                 
  };
}

Tidak ada komentar:

Posting Komentar