PORTS
Ein Digitaler I/O Port dient zur Eingabe (Input) und Ausgabe (Output) von Bitzuständen (logisch 1 → 5 V oder 0 → 0V). Ein Port besitzt insgesamt 8 Anschlusspins. Über jeder PIN kann einen Bitzustand ein- oder ausgegeben werden. Ein I/O Port besitzt drei Aufgaben:
- Einlesen von digitalen Zuständen (HIGH und LOW) von der Mikrocontroller- Außenwelt:
- Abfrage von Schaltern, Tastern und Kontakten
- Erfassung von digitalen Informationsströmen bzw. Impulsreihen
- Ausgabe von digitalen Zuständen an die Mikrocontroller-Außenwelt:
- Ansteuerung von LEDs, Relais, Lampen, Motoren, etc. (Achtung: meistens nicht direkt, sondern über Schaltverstärkerstufen, da Leistung zu gering!)
- Ausgabe digitaler Informationsströme bzw. Impulsreihen
- Alternative Funktionen
- z.B. als Eingang für den A/D Wandler oder als Ausgang für einen D/A Wandler. Dazu müssen weitergehende Konfigurationen vorgenommen werden.
Ein AVR ATMEGA Mikrocontroller besitzt in der Regel mehrere (vier) Ports, die wiederum aus 8 Ein- bzw. Ausgänge bestehen. Die Ports sind mit A, B, C und D gekennzeichnet. Sie werden in der Regel auf externe Pins geführt, damit der Nutzer Zugriff auf die Leitungen besitzt.
Merke:
Beim ATMEGA gibt es 4 Ports, die mit A, B, C und D bezeichent werden. Um den richtigen Port anzusprechen, werden die Buchstaben an den Namen der Variablen gehängt, z.B.
- PORTx kann heißen: PORTA, PORTB, PORTC und PORTD
- DDRx kann heißen: DDRA, DDRB, DDRC und DDRD
- PINx kann heißen: PINA, PINB, PINC und PIND
Im folgenden Beispiel wird das Bit 3 von PORTB auf HIGH (1) gesetzt. Dazu wird per Software eine logische 1 in das PORT B Register an die Position von Bit 3 geschrieben. Da die Hardware ebenfalls an das Register angekoppelt ist, wird ein Spannungssignal auf der 4. Leitung ausgegeben.
Port als digitaler Ausgang
Je nachdem, ob ein Port als Ein- oder Ausgang dienen soll muss die Hardware des Ports dementsprechend konfiguriert werden. Die Konfiguration eines Ports erfolgt über das DDR I/O Register, die Ausgabe erfolgt über das PORT Register. Im folgenden Beispiel werden die Leitungen (Bits) 0 und 1 des PORTB als Ausgang konfiguriert und eine Spannung an Leitung 1 ausgegeben:
Merke:
Bevor ein Spannungssignal ausgegeben werden kann, muss die Datenrichtung der Portleitung auf Ausgang (1) im DDR Register eingestellt werden.
Port als digitaler Eingang
Für das Einlesen von digitalen Signalen (d.h. LOW oder HIGH) werden drei Register benötigt: DDRx, PORTx und PINx. Im folgenden Beispiel werden die Leitungen (Bits) 0 und 1 des PORTB als Ausgang konfiguriert und eine Spannung an Leitung 1 ausgegeben:
Im obigen Beispiel ist an der Portleitung 0 (unterstes Bit im obigen Bild) ein Taster angeschlossen.
- Damit Tastendrücke detektiert werden können, muss der Pull-Up Widerstand der Portleitung 0 aktiviert werden (hier werden alle Portleitungen auf 1 gesetzt). Dies geschieht, indem das Bit 0 des PORTB Registers auf 1 gesetzt wird.
- Wenn der Taster gedrückt wird, dann wird die Leitung auf 0 V Spannungspegel gezogen, da der gedrückte Taster eine Verbindung zur Masse herstellt.
- Die Portleitungen des PORTB sind mit dem PINB Register verbunden. Dort wird bei 0 V eine logische 0 in die entsprechende Position geschrieben. Über die Variable PINB kann per Software der Zustand der jeweiligen Portleitung abgefragt werden.
- Damit nur das Bit berücksichtigt wird, an dem der Taster angeschlossen ist, wird das PINB Register mit der Bitmaske 0x01 UND verknüpft, siehe dazu den Absatz "Abfragen, ob bestimmte Bit-Positionen gesetzt sind" im Kapitel Bitoperatoren.
- Ist nun der Taster gedrückt, wird die Zahl 0 in die Variable taste geschrieben. Ist der Taster nicht gedrückt (Portleitung liegt an 5 V an), wird eine 1 in die Variable taste geschrieben.
Merke:
Bevor ein externes Signal, z.B. Tastendruck eingelesen werden kann, muss die Datenrichtung der Portleitung auf Eingang (0) im DDR Register eingestellt werden und das PORT Bit der Portleitung auf HIGH (1) gesetzt werden.