ADC-Wandlung AVR Interrupt Flag Bit

Gast #2920061
Lesenswert?

Moin,

ich arbeite mich gerade in die A/D Wandlung ein und durch die vielen 
Code-Schnipsel läuft das ganze auch. (Single Conversation, keine 
Interrupts)

Aber an einer Stelle habe ich wohl den Hintergrund noch nicht ganz 
verstanden.
1
while (!(ADCSRA & (1 << ADIF)));  
2
ADCSRA |= (1 << ADIF);

Laut Datenblatt wird das IF-Flag gesetzt wenn die Wandlung fertig ist. 
Warum wird dann so lange gewartet bis ADIF auf 0 ist?

Das ausschalten des IF-Flags erfolgt durch setzten den Bits.. muss ich 
das so verstehen, dass 0 = gesetzt und 1 = nicht gesetzt bedeutet?


Grüße..
#2920081
Lesenswert?

Peter schrieb:
> Danke!
>
> Ok, den Denkfehler mit der While Schleife habe ich verstanden, aber
> warum wird das Bit dann nocheinmal auf 1 gesetzt?
> "ADIF is cleared by writing a logical one to the flag."

Genau aus dem Grund.
Weil eben derartige Interrupt Flags gelöscht werden, indem man sie mit 
einer 1 beschreibt.

Und wenn du statt dem ADIF Flag das ADSC Flag benutzen würdest, könntest 
du dir den ganzen Häck-Mäck sparen

AVR-GCC-Tutorial/Analoge Ein- und Ausgabe: Nutzung des ADC

Du setzt das ADSC Bit um den ADC zu starten und wenn der ADC fertig ist, 
zieht er es wieder auf 0 zurück. Fertig.
Gast #2920167
Lesenswert?

Danke für die schnelle und ausführliche Lösung!

Die alternative, das nur über den ADSC durchzuführen werde ich dann das 
nächste mal Probieren, wenn ich ein Board zur Hand habe..


Schönen Samstag noch!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren