Forum: Compiler & IDEs ADC hängt beim ADIF-Check


von Manfred (Gast)


Lesenswert?

hallo

irgendwie stehe ich gerade wie der 'Ochse vor dem Berg'...
Ich versuche mit einem ATmega8 analoge Werte einzulesen, dazu habe ich
mal den Code aus dem Tutorial genommen, aber das Programm kommt wohl
nicht aus der ADIF-Check Schleife
   while(!(ADCSRA & (1<<ADIF)));
raus.

Nur scheint die Zeile zum löschen des ADIF-Flags
   ADCSRA = (1<<ADIF);
das komplette Register zu überschreiben -> kein ADEN mehr -> keine
weitere AD-Wandlung -> ADIF wird nie mehr gesetzt -> nothing moves

hab ich da einen groben (Denk-)Fehler oder kann jemand diese Verhalten
nachvollziehen?
Ach ja, ich benutze die aktuelle WINAVR Version.

Danke schon mal und Grüße
Manfred

von Jörg Wunsch (Gast)


Lesenswert?

Sowas wie

   ADCSRA = (1<<ADIF);

ist nur sinnvoll, wenn es sich beim entsprechenden Register um eins
mit ausschließlich Interrupt-Flags handelt.  Das ist hier nicht
der Fall, daher sollte man entweder

   ADCSRA |= (1 << ADIF);

schreiben oder aber gleich das gesamte Register neu beschreiben
(einschließlich des ADIF).

von Manfred (Gast)


Lesenswert?

hallo Jörg

Danke erstmal für die schnelle Antwort..mit

   ADCSRA |= (1 << ADIF);

hatte ich's auch getestet und da hat es funktioniert, war nur unsicher
bzgl. der Beschreibung im Tutorial (sollte ich vielleicht nacher mal
ergänzen...)

BTW wann kann man dich jetzt mal zu dem Beer einladen? :-)

Manfred

von Jörg Wunsch (Gast)


Lesenswert?

> BTW wann kann man dich jetzt mal zu dem Beer einladen? :-)

Eigentlich immer, ist nur die Frage: wo?

In Dresden können wir sicher schnell mal einen Termin finden, woanders
nur dann, wenn ich zufällig mal in der Ecke aufschlage.

von Manfred (Gast)


Lesenswert?

dann werd ich mal Augen und Ohren offen halten :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.