ADIF Bit

Gast #92769
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
Gast #92770
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.
Gast #92771
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
Gast #92772
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.
Gast #92773
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.
Gast #92775
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!

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