Pracuji s AD převodníkem u ATmega128. A problém je, že nějak mi to špatně měří.
Na pinu ADC1 mám nastaveno 0,15V.
Ale ATmega mi stále vrací hodnotu ADC=175 (což odpovídá napětí 0,328.
Referenci mám nastavenou na Interní 2,56V s externím kondíkem na AREF.
Inicializace ADC
Kód: Vybrať všetko
void initAD()
{
/*Zapnuti Interni reference 2,56V s externim kondenzatorem na AREF pinu*/
ADMUX |= (1<<REFS0) | (1<<REFS1);
/*
ADEN = povoleni ADC
ADSC = Start konverze
ADFR = Free running select
ADIF = Priznak preruseni
ADIE = Povoleni preruseni od ADC
ADPS0,1,2 = delicka
*/
ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADFR) | (1<<ADIF) | (1<<ADIE) | (1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2); //delicka 128
}
Kód: Vybrať všetko
/*konverze dat na AD převodníku*/
unsigned int konverze_ADC (unsigned char kanal)
{
// vloz cislo kanalu, vymaskuj nepouzite bity
ADMUX &= 0xF0;
ADMUX |= kanal & 0x0F;
// start konverze (prevodu)
ADCSRA |= (1 << ADSC);
// cekej na priznak skonceni konverze
while(!(ADCSRA & (1<<ADIF)));
// navratova hodnota - vysledek ad prevodu
return ADC;
}
Kód: Vybrať všetko
hodnota = konverze_ADC(1);
sprintf(buffer, "hodnota= %d\n", hodnota);
uart_puts(buffer);
flag = 0;