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
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:
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.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 benutzte einen ATMEGA 16.
getAD wird in einer endlos schleife angesprochen.
hat einer ne Idee?
mfg Cornelius
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
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
danke für den tipp,
daran lag es
mfg Cornelius
Lesezeichen