mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADIF Bit


Autor: Cpt.Kacke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Cpt.Kacke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Cpt.Kacke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.