Minggu, 24 April 2016

cara menampilkan ADC pada line follower

Tutorial menampilkan ADC pada line follower menggunakan 14 sensor

berikut source codenya:
*****************************************************************************
#include <mega16.h>
#include <delay.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int a1,a2,a3,a4,a5,a6,a7,b1,b2,b3,b4,b5,b6,b7;                                                    
int sa1,sa2,sa3,sa4,sa5,sa6,sa7,sb1,sb2,sb3,sb4,sb5,sb6,sb7;

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



#define ADC_VREF_TYPE 0x20  

#define ADC_VREF_TYPE 0x20  

// Read the 8 most significant bits
// of the AD conversion result
unsigned char 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 ADCH;
}

karena di sini menggunakan 14 sensor dan micro controller yang kita gunakan hanya ada 8 pin ADC, maka kita buat swicth menggunakan PIN 6 dan 7 pada PORTC bergantian.


void baca_adc(){

//sensor a
   PORTC.6=0;
   PORTC.7=1;
 
   a1=read_adc(1);
   a2=read_adc(2);
   a3=read_adc(3);
   a4=read_adc(4);
   a5=read_adc(5);
   a6=read_adc(6);
   a7=read_adc(7);
   delay_ms(100);
 
// sensor b
   PORTC.7=0;
   PORTC.6=1;
   
   b1=read_adc(1);
   b2=read_adc(2);
   b3=read_adc(3);
   b4=read_adc(4);
   b5=read_adc(5);
   b6=read_adc(6);
   b7=read_adc(7);
   delay_ms(100);
}

void tampil_adc(){
    baca_adc();
 
    lcd_clear();    
    lcd_gotoxy(0,0);
    sprintf(dt,"%3d %3d %3d %3d",a1,a2,a3,a4);
    lcd_puts(dt);            
    lcd_gotoxy(0,1);
    sprintf(dt,"%3d %3d %3d",a5,a6,a7);
    lcd_puts(dt);            
 
    lcd_clear();
    lcd_gotoxy(0,0);
    sprintf(dt,"%3d %3d %3d %3d",b1,b2,b3,b4);
    lcd_puts(dt);
    lcd_gotoxy(0,1);
    sprintf(dt,"%3d %3d %3d",b5,b6,b7);
    lcd_puts(dt);
}        

void main(void)
{

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;


// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// LCD module initialization
lcd_init(16);

while (1)
      {
      // Place your code here
      tampil_adc();
      };
}


semoga bermanfaat !!

Tidak ada komentar:

Posting Komentar