Gast
#105257
Hi
Das Programm im Anhang soll vom Kanal0 des ADC einen Wert einlesen und
über die serielle Schnittstelle ausgeben.(Im Moment nur zum Testen wird
nur das Lowbyte ausgegeben)
Der Kanal soll ständig abgefragt werden also im "Freerunning Modus"
betrieben werden.
Das ganze funktionert auch, aber nur wenn ich das ADSC(ADC start
conversation) Bit im ADCSR Register jedesmal neu setze.
Es wird also das ADSC Bit bei Eintritt in die ADC Interruptroutine
gelöscht und ich muss es manuell neu setzen sonst tritt kein Interrupt
mehr auf.Das ist aber doch eigentlich nicht der Sinn des "Freerunning
Modus".
Aus dem Datenblatt werde ich auch nicht ganz schlau.Muss ich das Bit
ADSC 2 mal setzen und ist die erste Umwandlung nur eine "Dummy"
Umwandlung zum initialisieren des ADC.
Unten hab ich mal einen Auszug aus dem Datenblatt kopiert.
Wäre nett wenn sich mal einer das Programm anschaut, ob es so richtig
ist das Bit jedesmal in der Interrupt Routine neu zu setzen oder muss
ich den ADC anders Initialisieren.
Grüsse
Toto
Quote:
In Single Conversion Mode, a logical ?1? must be written to this bit to
start each conversion.
In Free Running Mode, a logical ?1? must be written to this bit to
start the first
conversion. The first time ADSC has been written after the ADC has been
enabled or if
ADSC is written at the same time as the ADC is enabled, an extended
conversion will
precede the initiated conversion. This extended conversion performs
initialization of the
ADC.
ADSC will read as one as long as a conversion is in progress. When the
conversion is
complete, it returns to zero. When a extended conversion precedes a
real conversion,
ADSC will stay high until the real conversion completes. Writing a ?0?
to this bit has no
effect.