Untuk membuat voltmeter digital kita bisa memanfaatkan fasilitas ADC pada mikrokontroller, dimana input analognya yaitu potensiometer dimasukkan ke pin ADC mikro dalam hal ini terdapat pada PORTA dan hasilnya ditampilkan pada LCD. Untuk rangkaiannya adalah sebagai berikut :
sedangkan programmnya menggunakan codevision avr adalah sebagai berikut :
#include < mega16.h >
#include < stdio.h >
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;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)
{
char lcd_buffer[33];
float vin;
unsigned int temp;
// Declare your local variables here
// 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;
// Port B 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
PORTB=0x00;
DDRB=0x00;
// Port C 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
PORTC=0x00;
DDRC=0x00;
// Port D 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
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x86;
// LCD module initialization
lcd_init(16);
while (1)
{
temp=read_adc(0);
vin=((float)temp*0.00488);
lcd_gotoxy(0,0);
lcd_putsf(“==voltmeter==”);
lcd_gotoxy(2,1);
sprintf(lcd_buffer,”volt: %0.0001f V “,vin);
lcd_puts(lcd_buffer);
delay_ms(1000);
// Place your code here
};
}
klw atmega 8535 apanya yg harus dirubah mas?
terus klw potensiometernya ada # apa yg harus ditambah codenya?
tinggal ganti header yang “#include” diganti “#include “
mas bsa kirim artikel lngkap ne kEmail sya ngk?
soalnya sya l;gi da project TA neh tntang mikrocontroller,,tentang bahan”nya dan cara pemasangannya jga..soalnya sya msih awam tntang mikrocontroller..
email sya bi_mayself@yahoo.com
nanti kalo sempat..akan saya kirim…skrang lgi sibuk kerja..thanks for visiting y..
Great post! I love it very much!