Hallo,
bisher kennen wir das bei den AVRs ja so:
Es sei denn, man deaktiviert die Pullups global.
Hintergrund ist, daß der Pullup über ein 3fach-AND-Gatter aktiviert wird, in welches das PORT-Bit, das invertierte PIN-Bit und das invertierte globale PullUp-disable-Bit einfliessen.
So kennen und verwenden wir das bisher.
Im Datenblatt des Tiny441/841 bin ich jetzt aber auf einen abweichenden Aufbau der generellen Pin-I/O gestossen:
hier existiert dieses AND-Gatter nicht, stattdessen gibt es für jeden Pin ein Bit in einem Pullup-Enable-Register.
Was bedeutet das? Daß mit DDR.x=0 und Port.x=1 nicht mehr automatisch der Pullup aktiviert wird. Ok Dazu wird jetzt eben PUEx.n verwendet, ABER:
Außerdem kann man so auch den (ausdrücklich nicht empfohlenen) Zustand: Portx.n=0, DDRx.n=1 (also Ausgang, low Pegel/Gnd - Pin über den Treiber intern mit Gnd verbunden) und PUEx.n=1 (Pin über den Pullup intern mit Vcc verbunden) einstellen. Dann fließt intern Strom von Vcc über den Pullup und den Treiber nach Gnd. 'ne Chip-Heizung sozusagen...
Dieser Tiny besitzt also zum Einstellen des Pins 3 Register (Bits):
bisher kennen wir das bei den AVRs ja so:
- fürs lesen eines Beinchens kann man ein Bit in einem PIN-Register auslesen
- den Pegeltreiber kann man mit einem Bit im Datenrichtungsregister (DDR) an-/abschalten
- den Pegel selbst mit dem Bit im Port-Register festlegen
Es sei denn, man deaktiviert die Pullups global.
Hintergrund ist, daß der Pullup über ein 3fach-AND-Gatter aktiviert wird, in welches das PORT-Bit, das invertierte PIN-Bit und das invertierte globale PullUp-disable-Bit einfliessen.
So kennen und verwenden wir das bisher.
Im Datenblatt des Tiny441/841 bin ich jetzt aber auf einen abweichenden Aufbau der generellen Pin-I/O gestossen:
hier existiert dieses AND-Gatter nicht, stattdessen gibt es für jeden Pin ein Bit in einem Pullup-Enable-Register.
Was bedeutet das? Daß mit DDR.x=0 und Port.x=1 nicht mehr automatisch der Pullup aktiviert wird. Ok Dazu wird jetzt eben PUEx.n verwendet, ABER:
- Dann kann man den Pullup nicht mehr durch beschreiben des PIN-Register-Bits mit einer 1 toggeln (da sich das ja auf das PORT-Register auswirkt.
- PUEx befindet sich im extendet-I/O, ist also nicht mit IN/OUT erreichbar, und erst recht nicht mehr direct-bit-accessible.
Außerdem kann man so auch den (ausdrücklich nicht empfohlenen) Zustand: Portx.n=0, DDRx.n=1 (also Ausgang, low Pegel/Gnd - Pin über den Treiber intern mit Gnd verbunden) und PUEx.n=1 (Pin über den Pullup intern mit Vcc verbunden) einstellen. Dann fließt intern Strom von Vcc über den Pullup und den Treiber nach Gnd. 'ne Chip-Heizung sozusagen...
Dieser Tiny besitzt also zum Einstellen des Pins 3 Register (Bits):
- DDRx.n zum einstellen der Datenrichtung (Treiber an-/abschalten)
- PORTx.n zum festlegen des (aktiven) Pegels (nur wenn der Treiber aktiv ist)
- PUEx.n zum aktivieren des Pullups