Allgemeines
Die interne Beschaltung jedes IO Port Pins beinhaltet folgende Komponenten:
- Schutzdioden gegenüber Masse und Versorgungsspannung (Überspannung bzw. ESD)
- Aktivierbarer Pull-Up Widerstand
- Aktivierbare Ausgangsstufe
- Eingänge besitzen Schmitt-Trigger und Synchronisierung
Um von der Firmware aus auf einen IO Port Pin zuzugreifen, werden drei Register benötigt. Diese drei Register fassen jeweils 8 IO Pins zusammen. Die Gruppierung von 8 IO Pins wird auch Port genannt. Der ATMega16 hat 4 solcher Ports: Port A, B, C und D. Im folgenden wird statt des Portnamens ein x
verwendet.
PINx
- das Eingangsregister
Das Eingangsregister zeigt den aktuellen Zustand der Pins an. Der aktuelle Zustand wird auch eingelesen, wenn der Pin als Ausgang beschalten ist. Die notwendigen Pegel zur Detektion einer 0
oder 1
ist abhängig von Versorgungsspannung und Temperatur.
DDRx
- das Richtungsregister
Das Data Direction Register legt fest, ob die jeweiligen Ausgangstreiber aktiv sind oder nicht. Bei aktivem Ausgangstreiber (DDR
-Bit auf 1
) wird der Pegel des entsprechenden PORTx
Registerbits auf den Ausgang gelegt.
PORTx
- das Ausgangsregister
Bei aktivem Ausgangstreiber wird der Ausgang entsprechend diesem Bit gesteuert. Ist der Ausgangstreiber nicht aktiv, so wird mit diesem Register der Pull-Up aktiviert.
Pin Konfiguration
Mittels der Register DDRx
und PORTx
können folgende Konfigurationen eingestellt werden:
DDRxn | PORTxn | I/O | Pull-Up | Kommentar |
---|---|---|---|---|
0 | 0 | Eingang | Nein | Hochohmiger Eingang (Tri-State) |
0 | 1 | Eingang | Ja | Eingang mit Pull Up |
1 | 0 | Ausgang | Nein | Ausgang Low |
1 | 1 | Ausgang | Nein | Ausgang High |