Pada postingan kali ini, kita akan membahas menggunakan multiplexer untuk mendapatkan input yang banyak saat menggunakan fitur ADC. Karena mengapa? karena pada dasarnya mikrokontroler hanya menyediakan 8 buah pin saja untuk input ADC. Oleh karena agar kita dapat memaksimalkannya kita gunakan multiplexer sebagai solusinya.
Apa sih multiplexer? Secara umum, multiplexer adalah sebuah cara untuk memilih data input kemudian di teruskan kebagian outputnya. Untuk pemilihan input ditentukan pada bagian kendalinya. Untuk tipenya bermacam - macam ada 4 to 1, 8 to 1 16 to 1 dll.
Berikut contoh skematiknya dari simulasi proteus menggunakan atmega16 & LCD 20x4.
Note :
- Jenis IC yang digunakan adalah 4051.
- Output IC langsung masuk ke PIN ADC.
- PIN kendali pada IC adalah PIN A B C.
Berikut listring programnya.
- #include <mega16.h>
- #include <delay.h>
- #include <stdio.h>
- #include <stdlib.h>
- char data[17];
- int data_adc[10];
- int data_adc2[10];
- void adc();
- int i;
- // Alphanumeric LCD Module functions
- #asm
- .equ __lcd_port=0x15 ;PORTC
- #endasm
- #include <lcd.h>
- #include <delay.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);
- // 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;
- }
- // Declare your global variables here
- void main(void)
- {
- PORTB=0x00;
- DDRB=0x0F;
- // Analog Comparator initialization
- // Analog Comparator: Off
- // Analog Comparator Input Capture by Timer/Counter 1: Off
- ACSR=0x80;
- SFIOR=0x00;
- // ADC initialization
- // ADC Clock frequency: 691,200 kHz
- // ADC Voltage Reference: AREF pin
- // ADC Auto Trigger Source: None
- ADMUX=ADC_VREF_TYPE & 0xff;
- ADCSRA=0x84;
- // LCD module initialization
- lcd_init(20);
- while (1)
- {
- // Place your code here
- adc();
- sprintf(data,"%d %d %d %d",data_adc[0],data_adc[1],data_adc[2],data_adc[3]);
- lcd_gotoxy(0,0);
- lcd_puts(data);
- sprintf(data,"%d %d %d %d",data_adc[4],data_adc[5],data_adc[6],data_adc[7]);
- lcd_gotoxy(0,1);
- lcd_puts(data);
- sprintf(data,"%d %d %d %d",data_adc2[0],data_adc2[1],data_adc2[2],data_adc2[3]);
- lcd_gotoxy(0,2);
- lcd_puts(data);
- sprintf(data,"%d %d %d %d",data_adc2[4],data_adc2[5],data_adc2[6],data_adc2[7]);
- lcd_gotoxy(0,3);
- lcd_puts(data);
- delay_ms(50);
- lcd_clear();
- };
- }
- void adc()
- {
- for(i=0;i<=7;i++)
- {
- PORTB=i;
- data_adc[i]=read_adc(0);
- data_adc2[i]=read_adc(1);
- }
- }
Dan berikut video simulasinya.
Semoga bermanfaat.
Salam Kapasitorrr!!!
No comments:
Post a Comment