In meiner init():
Code:
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0);
Und diese Funktion wird in main() zyklisch aufgerufen:
Code:
void read_inputs(void) {
ADMUX=(1<<MUX0); // Kanal 1 auswaehlen
ADCSRA|=(1<<ADSC); // Messung starten
while(!(ADCSRA & (1<<ADIF))); // Warten bis ADSC==0
ADCSRA|=(1<<ADIF); // ADIF auf Null setzen !?!
w=ADCL+ADCH*256; // Ergebnis auslesen
ADMUX=(1<<MUX2)|(1<<MUX0); // Kanal 5 auswaehlen
ADCSRA|=(1<<ADSC); // Messung starten
while(!(ADCSRA & (1<<ADIF))); // Warten bis ADSC==0
ADCSRA|=(1<<ADIF); // ADIF auf Null setzen !?!
x=ADCL+ADCH*256; // Ergebnis auslesen
}
Der ATmega16 laeuft mit 8MHz. Das mit dem ADIF auf Null setzen, indem man ne Eins reinschreibt, steht so im Datenblatt...
Nils
Lesezeichen