Hallo,
habe einen ATtiny 15.
Habe ihm RS232 (nur TX, RX kommt auch noch)beigebracht. (Ein MAX232 an
PB0)
Habe dann versucht den ADC in Betrieb zu nehmen. Leider bekomme ich
stets den gleichen Wert, egal ob ich PB3 offen lasse oder an Masse oder
VCC lege.
Der Wert ist z.B. 216 oder 390, manchmal 1023. (ADLAR = 0 =>
rechtsbündig)
Habe freilaufende und single Conversion probiert.
Wo habe ich einen Gedankenfehler?
Hat jetzt funktioniert, besten Dank für den prima Tip. Muss ich doch
irgendwie im Datenbaltt überlesen haben :-(
Habe jetzt nur diese beiden Zeilen vertauscht:
1
in Zahl_l,ADCL
2
in Zahl_h,ADCH
und schon geht's!
Aber warum?
Der ADC ist doch im Freilaufenden Mode, und ich frage doch in einer
Endlosschleife ab.
Sven Pauli wrote:
> ADCH ist ein temporäres Register.
Nö, ist es nicht.
Die Reihenfolge ergibt sich schlicht aus der Tatsache, dass beim Lesen
von ADCL das High-Byte ADCH gegen Schreibzugriffe seitens der Hardware
gesichert wird, bis es ebenfalls gelesen wurde. Das verhindert, dass
zwischen den Lesezugriffen auf Low- und High-Byte ein neues
Wandlungsergebnis im Register abgelegt werden kann. So kann
gewährleistet werden, dass Low- und High-Byte aus der selben Wandlung
stammen. Steht aber alles im Datenblatt...
Und bevor jetzt die Frage kommt "Warum nicht andersrum?": Es gibt die
Möglichkeit, mit Hilfe des Steuerbits ADLAR das Ergebnis in den beiden
Registern linksbündig auszurichten, damit man bei geringerer geforderter
(oder durch "Übertaktung" gegebener) Auflösung nur die 8 höchstwertigen
Bits auslesen kann. Damit man dann aber auch wirklich nur 8 Bit einlesen
muss, reicht es dann, nur das ADCH zu lesen und man erspart sich so
unnötige Lesevorgänge.
Man kann sich einfach merken: Wenn ADCL gelesen wurde, dann muss
(sinnvollerweise möglichst bald danach) ADCH gelesen werden, damit die
Register wieder freigegeben werden und der ADC ein neues Ergebnis
hineinschreiben kann.