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
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.
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
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.