ADC med avr
Postat: 4 juni 2005, 21:45:13
Nu har jag fått igång lite test med ad-omvandling med en atmega16.
Jag läser på ADC0, och presenterar värder binärt på portd, men det blir inget stabilt värde alls. om jag har 2 volt på adc0 så visar den allt ifrån ca 0,5 till 4,5 volt. Jag har en potentiometer på 0-9k i serie med ett 1k motsånd som jag mäter över(mellan).
Är det någon som har någon ide varför det visar så olika?
Jag har inget lågpassfilter innan avr kretsen men jag tycker inte att det skall göra så stor skillnad.
kod:
#include <avr/io.h>
#define ADC_VREF_TYPE 0x20
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
edit: glömde säga att jag har 4,95 volt som ref.
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADC;
}
// Declare global variables
unsigned char adc_input;
int main(void)
{
// Declare local variables
unsigned int read, i;
double adcres;
int result;
// Port B initialization
//PORTB=0x00;
//DDRB=0x00;
// Port F initialization
DDRD=0xFF;
//PORTD=0xFF;
// 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=0x83;
SFIOR&=0x2F;
// Select ADC input 0
adc_input=0;
for (;;)
{
mytemp=0;
for(i=0;i<250;i++) //tidigare <250
{
read=read_adc(adc_input);
adcres=adcres+read;
}
result=adcres/250;
PORTD=(unsigned char) ~(result);
//PORTD=(unsigned char) ~(result>>8);
};
}
Jag läser på ADC0, och presenterar värder binärt på portd, men det blir inget stabilt värde alls. om jag har 2 volt på adc0 så visar den allt ifrån ca 0,5 till 4,5 volt. Jag har en potentiometer på 0-9k i serie med ett 1k motsånd som jag mäter över(mellan).
Är det någon som har någon ide varför det visar så olika?
Jag har inget lågpassfilter innan avr kretsen men jag tycker inte att det skall göra så stor skillnad.
kod:
#include <avr/io.h>
#define ADC_VREF_TYPE 0x20
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
edit: glömde säga att jag har 4,95 volt som ref.
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADC;
}
// Declare global variables
unsigned char adc_input;
int main(void)
{
// Declare local variables
unsigned int read, i;
double adcres;
int result;
// Port B initialization
//PORTB=0x00;
//DDRB=0x00;
// Port F initialization
DDRD=0xFF;
//PORTD=0xFF;
// 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=0x83;
SFIOR&=0x2F;
// Select ADC input 0
adc_input=0;
for (;;)
{
mytemp=0;
for(i=0;i<250;i++) //tidigare <250
{
read=read_adc(adc_input);
adcres=adcres+read;
}
result=adcres/250;
PORTD=(unsigned char) ~(result);
//PORTD=(unsigned char) ~(result>>8);
};
}