PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC gibt nur beim starten einen Wert



corny335
29.10.2005, 18:41
Hallo,
aus irgend einem unerfindlichen Grund gibt mein ADC nur beim starten den richtigen wert zurück, wenn ich ihn das zweite mal benutzt gibt er noch immer den selben wert zurück und nicht den aktuellen.
hier mein code:



void AD_init(void){
ADMUX = (1<<REFS1) | (1<<REFS0);

ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADATE);
}
int getAD(void){

ADCSRA|= 1<<ADSC;
ADCSRA|= (1<<ADIF);

while ( !(ADCSRA & (1<<ADIF)) ) {}
int x = ADCH * 256 + ADCL ;

return x;
}


ich vermute das es daran liegt dass das ADIF bit nicht wieder auf 1 zurück gesetzt wird, weiss aber nicht warum er das nicht macht.
ich benutzte einen ATMEGA 16.
getAD wird in einer endlos schleife angesprochen.

hat einer ne Idee?

mfg Cornelius

PicNick
29.10.2005, 18:53
Es ist unbedingt wichtig, daß er ZUERST ADCL und DANN ADCH liest.
Sicherheitshalber zerleg' das
int x = ADCH * 256 + ADCL ;
in:
int x = ADCL ;
int x += ADCH * 256;

weiss nicht, ob das hilft, aber schau mal

corny335
29.10.2005, 19:00
danke für den tipp,
daran lag es

mfg Cornelius