IO mittels AVR Portpins

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
AVR IO Pin (Quelle: Datenblatt ATMega16 © Atmel Corporation)

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