Logo

Anschlüsse der AVR® Mikrocontroller-Familie

Die Anschlüsse der AVR-Microcontroller werden auch als GPIO-Pins (General-Purpose-Input-Output-Pin). Sie sind auf vielfältige Weise programmierbar und besitzen meist auch Sonderfunktionen.

Pins und Ports

Ein einzelner Anschluss wird als Pin bezeichnet. Bis zu 8 Pins werden zu einem Port zusammengefasst. Dies liegt daran dass die Busbreite eines AVR-Mikrocontrollers 8 Bit beträgt. Die Pins eines Ports können gleichzeitig angesprochen bzw. programmiert werden. Bei zeitkritischen Aufgaben, wie z.B. der Ansteuerung von H-Brücken sollte das berücksichtigt werden. Die Programmierung der Ports erfolgt über I/O-Register, die ebenfalls eine Breite von 8 Bit verfügen.

Vorgehensweise bei der Konfiguration von I/O-Pins

Die zentrale Aufgabe eines Mikrocontrollers ist normalerweise die Ansteuerung externer Hardware, die an den I/O-Pins angeschlossen ist. Dazu müssen die I/O-Pins entsprechend konfiguriert werden.

Die Konfiguration der I/O-Anschlüsse läuft prinzipiell immer nach dem gleichen Schema ab:

1. 

Vorüberlegung: Welche Funktion muss der Anschluss haben?

2. 

Initialisieren durch Schreiben in die entsprechenden Sonderregister (siehe Handbuch für den Mikrocontroller)

3. 

Ansprechen der I/O-Register im Hauptprogramm (durch Schreib- bzw. Lesezugriff auf die entsprechenden Register)

I/O-Register

Die Funktionalität, die Programmierung und der Zugriff auf I/O-Ports erfolgt über die I/O-Register, die den entsprechenden Ports zugeordnet sind. Die Register liegen an einer festgelegten Speicheradresse. Durch Schreiben und Lesen in diesen Registern können die Funktionen einzelnen Pins des Ports programmiert werden oder die Logikpegel, die an den Pins anliegen, eingelesen werden. Folgende Register spielen dabei eine zentrale Rolle:

Bit-Schema

Ein Register besteht beim AVR Mikrocontroller aus 8 Bits. Die Bits werden von Null beginnend von rechts nach links gezählt.

Das Bit 7 wird auch als höchstwertigstes Bit oder Most Significant Bit (MSB) bezeichnet.

Das Bit 0 wird auch als niederwertigstes Bit oder Least Significant Bit (LSB) bezeichnet.

Zählweise der Bits eines Registers

Der Inhalt des oben abgebildeten Registers kann in

binärer Schreibweise: 0b10110011
dezimaler Schreibweise:     179
hexadezimaler Schreibweise: 0xB3

angegeben werden.

Das Data Direction Register (DDRx)

Das Data Direction Register des Ports x DDRx definiert, ob der jeweilige Pin als Ein- oder als Ausgang genutzt wird.

Die Bits des Registers werden von 0 bis 7 durchnummeriert und den einzelnen Pins zugeordnet.

Auf das DDRx-Register kann lesend oder schreibend zugegriffen werden.

Aus der Bezeichnung DDRA5 lässt sich herauslesen, dass es sich um den Wert des Data Direction Registers des Ports A für den Pin 5 handelt.

Funktionalität des DDRx

DDRxn=1    Der Pin n des Ports x wird als Output (Digitaler Ausgang) verwendet.
DDRxn=0 Der Pin n des Ports x wird als Input (Eingang) verwendet.

Das Daten-Register (PORTx)

Die Funktion des PORTx-Registers hängt von den Einstellungen im DDRx-Register ab. Es definiert entweder des Ausgangspegel des entsprechenden Pins oder den internen Pullup-Widerstand.

Funktionalität des PORTx

DDRxn=1   
PORTxn=1    Am Pin n des Ports x liegt HIGH an.
PORTxn=0 Am Pin n des Ports x liegt LOW an.
DDRxn=0   
PORTxn=1    Am Pin n des Ports x wird der Pullup-Widerstand aktiviert.
PORTxn=0 Am Pin n des Ports x wird der Pullup-Widerstand deaktiviert.

Das Pin-Register (PINx)

Das PINx-Register dient eigentlich zum Auslesen des entsprechenden Pins eines Ports, wenn dieser als Input definiert wurde.

Allerdings hat auch dieses Register eine Doppelfunktion. Beim Schreiben einer 1 auf PINxn ändert sich der Wert des entsprechenden PORTxn Registers. Damit lässt sich eine Toggle-Funktion realisieren, wenn der Pin als Ausgang definiert wurde.

Beispiel für eine I/O-Register Programmierung