Steffen Ha schrieb:
> Vielen Dank. Man lernt immer wieder was dazu. Eins würde mich noch
> interessieren. Wie funktioniert das Kanal wählen ohne andere Bits zu
> beeinflussen?
ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
0x1F ist binär 0b00011111
also lauter 1 Bits dort, wo die neuen Kanalbits reinkommen
~0x1F ist die Umkehrung davon, also 0b11100000
Das verundet mit ADMUX ergibt ein Byte, welches an den Stellen an denen
in diesem Maskenbyte ein 0-Bit steckt, ebenfalls auf jeden Fall ein
0-Bit steht
Hatte ADMUX also den Bitinhalt (ich benenne die Bits mal mit Buchstaben)
abcdefgh, dann kommt mit der Verundung raus abc00000. Das ist: die Bits
abc stammen noch aus dem Original von ADMUX. Die restlichen Bits (dortr
wo die Kanalbits sitzen) sind auf jeden Fall 0. Damit ist die alte
Kanalinfo aus dem aus ADMUX ausgelesenen Byte eliminiert.
2. Teil:
channel & 0x1F
Die Verundung mit 0x1F ist nur zur Vorsicht, damit im Ergebnis diesmal
die 3 höherwertigsten Bits auf jeden Fall 0 sind. die 5 unteren Bits,
die die Kanalinformation tragen, bleiben durch diese Operation
unangetastet. Die 8 Originalbits des Kanalbytes wären zb gewesen
ABCDEFGH. Nach der Verundung hat man 000DEFGH
Jetzt hat man also 2 Einzelteile.
aus ADMUX entstanden aus dem Kanalbyte entstanden
abc00000 000DEFGH
und die beiden werden zusammengeodert. Die in dem einen Byte jeweils ein
0-Bit sitzt, wo im anderen ein Nutzbit sitzt (und vice versa), kommt es
da auch bei den Bits zu keinen INteraktionen. Sie werden sauber durch
das Oder zusammengeführt zu einem Byte
abcDEFGH
bei dem die obersten 3 Bits unverändert aus dem alten ADMUX stammen und
die unteren 5 Bits aus der channel-Angabe.
Et voila: ADMUX kann damit neu gesetzt werden. An der Einstellung der
Modus Bits (die 3 oberen) hat sich nichts geändert. Aber die 5 unteren
Bits für die Kanaleinstellung sind die 5 unteren Bits aus channel.