ADIF Bit

Gast #92769
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
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
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
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
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.
#92774
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
Gast #92775
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.