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