Multiplexer 4051 Di Code Vision AVR

Minggu, Desember 09, 2012 Tags

Salam Buat Teman-Teman Robotika, Kali Ini mau share Tentang Baca Nilai ADC di IC Multiplexer 8 Chanel 4051, Mikrokontroller yang kami pakai yaitu ATMEGA 16, nah untuk skematichnya bisa dilihat seperti gambar berikut:

Nah sekarang saatnya penjelasan:
- Bahasa Program yang Kami Pakai yaitu C, untuk membuatnya compiler pakai Software CV AVR.
-IC ATMEGA 16, Crystal 12 MHZ, LCD 16x2 di PORTC ,jadi listingnya kayak gini:


/*****************************************************
Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 12,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

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

// Alphanumeric LCD functions
#include <alcd.h>
#asm
.equ __lcd_port = 0x15 ;PORTC
#endasm

-sekarang, didefenisikan Port IC ATMEGA 16 yang terhubung ke IC MUX 4051

#define sel1 PORTA.1
#define sel2 PORTA.2
#define sel3 PORTA.3

-Buat Variable dengan Isi 8 bit, yang nantinya akan di tempati 8 kemungkinan data yang akan di terima dari 8 chanel multiplexer, yaitu mulai dari 0 - 7.

unsigned int mux[8];
char temp[8];

-Listing baca nilai ADC 10 Bit

#define ADC_VREF_TYPE 0x40
// 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;
}

-sekarang buat variable untuk melempar data ke Mux dan di codekan dengan 3 digit, (kenapa mesti 3 digit?, karena selector IC MUX 8 chanel ini selector-nya ada 3, yaitu A, B, dan C, dimana masing-masing kondisi dari selector tersebut bernilai 0/1, sehingga kondisinya nanti data yang dilempar yaitu mulai dari 0,0,0 sampai dengan 1,1,1).


void selector(int a,int b,int c)
{
sel1=c;
sel2=b;
sel3=a;
}


void bacamux()
{
selector(0,0,0);
mux[0]=read_adc(0);

selector(0,0,1);
mux[1]=read_adc(0);

selector(0,1,0);
mux[2]=read_adc(0);

selector(0,1,1);
mux[3]=read_adc(0);

selector(1,0,0);
mux[4]=read_adc(0);

selector(1,0,1);
mux[5]=read_adc(0);

selector(1,1,0);
mux[6]=read_adc(0);

selector(1,1,1);
mux[7]=read_adc(0);

}

oh, iya input ADC-nya ada di PORTA.0, makanya listingya    read_adc(0), kalau pakai Port ADC yang lain silakan di ganti saja angka 0, didalm kurungnya sesuai urutan PORT input yang dipakai.

-Berikutnya buat variable untuk tampilkan nilai ADC yang terbaca ke LCD

void tampilmux()
{
bacamux();

itoa(mux[0],temp);
lcd_gotoxy(0,0) ;
lcd_puts(temp);
delay_ms(100);

itoa(mux[1],temp);
lcd_gotoxy(4,0) ;
lcd_puts(temp);
delay_ms(100);

itoa(mux[2],temp);
lcd_gotoxy(8,0) ;
lcd_puts(temp);
delay_ms(100);

itoa(mux[3],temp);
lcd_gotoxy(12,0) ;
lcd_puts(temp);
delay_ms(100);

itoa(mux[4],temp);
lcd_gotoxy(0,1) ;
lcd_puts(temp);
delay_ms(100);

itoa(mux[5],temp);
lcd_gotoxy(4,1) ;
lcd_puts(temp);
delay_ms(100);

itoa(mux[6],temp);
lcd_gotoxy(8,1) ;
lcd_puts(temp);
delay_ms(100);

itoa(mux[7],temp);
lcd_gotoxy(12,1);
lcd_puts(temp); 
delay_ms(100);
}
-nah sekarang main programnya kayak gini:

void main(void)
 {

 PORTA=0x00;
 DDRA=0x00;
  
 PORTB=0x20;
 DDRB=0x20;

 PORTC=0x0B;
 DDRC=0x24;

 PORTD=0x0F;
 DDRD=0xF0;

 TCCR0=0x00;
 TCNT0=0x00;

 OCR0=0x00;

 TCCR1A=0xF1;
 TCCR1B=0x03; 

 TCNT1H=0x00;
 TCNT1L=0x00;
 ICR1H=0x00;
 ICR1L=0x00;
 OCR1AH=0x00;
 OCR1AL=0x00;
 OCR1BH=0x00;
 OCR1BL=0x00;

 ACSR=0x00;
 SFIOR=0x00;

 ADMUX=ADC_VREF_TYPE & 0xff;
 ADCSRA=0x84;

 lcd_init(16);
     while (1)
        { 
          tampilmux();
        }   
   }

sekian dulu tutorial dari kami, maaf kalau masih kurang bagus listingnya, maaf baru newbie.

thank for : forum.elins.org

 
Robotron-UNM © 2016 | Editor by Asis Robotron | Blogger Template by Blog Zone