Forum: Mikrocontroller und Digitale Elektronik ADIF Bit


von Cpt.Kacke (Gast)


Lesenswert?

Ich habe eine kleine Anfängerfrage zum ADIF Bit im AD Wandler des AT
Mega 8 Controllers. Im Singleconversion-Modus ... In diversen
Codeschnipseln taucht immer wieder die folgende Warte-Routine:
AD_busy:
sbis  ADCSR,ADIF
rjmp  AD_busy
Aber was setzt das ADIF Bit wieder auf 0 ??? Oder hab ich das zu so
später Stunde im Datenblatt überlesen bzw. mache ich was falsch wenn
ich hinter "rjmp" noch eine "cbi ADCSR,ADIF" Anweisung einbaue?
Hoffe die Frage ist nicht zu primitiv :-)
Gute Nacht

von Fritz Ganter (Gast)


Lesenswert?

Es steht doch im Datenblatt. Das Flag wird gelöscht, wenn die IR
angesprungen wird:

Bit 4   ADIF: ADC Interrupt Flag This bit is set when an ADC conversion
completes and the Data Registers are updated. The ADC Conversion
Complete Interrupt is executed if the ADIE bit and the I-bit in SREG
are set. ADIF is cleared by hardware when executing the corresponding
interrupt handling vector.

von Cpt.Kacke (Gast)


Lesenswert?

Ja genau das ist auch die einzige Stelle die ich gefunden habe ... Nur
daß ich das ADIE Flag nicht gesetzt habe, weil ich keinen Interrupt
benutzen wollte. Oder habe ich jetzt irgendwo eine Hirnlämung? Muß das
ADIE Flag gesetzt werden / oder wird das von der Hardware übernommen
(glaub ich eher nicht) und wenn ich es setze... muß ich dann einen
interrupt handler schreiben? Fragen über Fragen   :-) Bin halt ein
Anfänger was MC angeht
Also danke schonmal

von Fritz Ganter (Gast)


Lesenswert?

Ohne Interrupt startest du mit:

      ADCSRA |= _BV (ADSC);
      loop_until_bit_is_set (ADCSRA, ADIF);

Das funktioniert auf jeden Fall, daher denke ich dass ADIF beim starten
vom Wandler gelöscht wird.

von Stefan (Gast)


Lesenswert?

Dann solltest du die vielleicht das ADSC-Bit pollen,
bis es wieder 0 wird. Siehe Datenblatt:

Bit 6 – ADSC: ADC Start Conversion
In Single Conversion mode, write this bit to one to start each
conversion. ... When the conversion is complete, it returns to zero.
Writing zero to this bit has no effect.

von Peter D. (peda)


Lesenswert?

Mit:

ADCSRA |= _BV (ADSC);

wird doch das ADIF gelöscht.

Es ist nämlich eins dieser blöden Bits, womit Atmel Leute oft zur
Verzweiflung bringt, weil die umgekehrt (auf 1 setzen) gelöscht werden
müssen.


Peter

von Cpt.Kacke (Gast)


Lesenswert?

Jep jetzt seh ichs auch ... ADIF setzen um es wieder zu löschen. Denke
ich werde das ADSC bit nehmen. Für meine Anwendung völlig ausreichend.
Mit ADIF beschäftige ich mich dann wenn ich nen Interrupt brauche.
AVR-Studio kann leider den AD nicht simulieren deshalb kann man auch
nichts ausprobieren. Aber mit ADSC sollte es ja klappen.
Danke an alle!

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.