Ja das mit dem A/D-Wandler, dem One-Shot-Modus und dem Noise-Reduction
wird aus dem Datenblatt nicht klar.
Ich habe beim ATtiny13 die Dauer des Noise-Reduction-Mode gemessen und
dabei Zeiten von unglaublichen 10 ADC-Takten ermittelt, obwohl ich
ADCSRA.ADATE schön auf 0 gelassen habe und die Wandlung nur mit sleep
einleite.
Das Testprogramm hatte ein festes Zeitschema, deshalb schwankte diese
Zeit nicht; Erklärung folgt.
Des Rätsels Lösung: Der A/D-Wandler wird durch das Setzen von
ADCSRA.ADSC immer in den kontinuierlichen Modus versetzt! Die erste
Wandlung dauert 25 Takte, jede weitere 13* Takte. Dann kommen immer
weiter Interrupts vom A/D-Wandler — und damit auch Messergebnisse. Bei
gesperrten Interrupts, fest eingestelltem ADMUX und konstanter Spannung
am Portpin fällt das gar nicht weiter auf.
Der Satz "The software may then set ADSC again, and a new
conversion will be initiated on the first rising ADC clock edge." stimmt
also nicht. Allenfalls wird das Bit bei Interrupt wieder gelöscht.
ADCSRA.ADATE bewirkt demnach nur, dass man mit ADCSRB diesen
Auto-Trigger auf einige Hardware-Ereignisse legen kann. Leider nicht auf
Software. Habe ich nicht untersucht.
Richtig ist: sleep im Noise-Reduction-Mode legt alle synchrone Hardware
lahm, insbesondere Timer, und damit bleiben PWM-Ausgänge stehen.
Und es setzt tatsächlich ADCSRA.ADSC. Was aber, wie oben angegeben,
wirkungslos im kontinuierlichen Modus ist; genauer: Der
Sampling-Zeitpunkt ist dann irgendwann davor, und das Umschalten von
ADMUX oder einem externen Multiplexer ist wirkungslos weil zu spät.
Die beste Lösung, so scheint es mir, ist es, den A/D-Wandler nach einer
Einzel-Wandlung explizit auszuschalten (ADCSRA.ADEN = 0).
Das bedeutet leider auch, dass der Zeitpunkt der Abtastung stets recht
spät nach dem Start ist.
* Gemessen habe ich ziemlich exakte 13,5 Takte. Auch im Widerspruch zum
Datenblatt. Aber wenigstens konstant. Beim ATmega328 waren es jedoch
genau 13 Takte.