Allzweckeingabe/-ausgabe (engl. GPIO - General Purpose Input/Output) ist ein allgemeiner Kontaktstift (Pin) an einem Mikrocontroller, dessen Verhalten, unabhängig, ob als Eingabe- oder Ausgabekontakt, durch logische Programmierung frei bestimmbar ist. GPIO-Kontakten ist kein Zweck vorgegeben, sie sind daher standardmäßig unbelegt.
Mittels folgender Grundklassen kann den GPIO Pins ein Zweck vorgegeben werden:
- DigitalOut - Pin zwischen 0 (0 Volt) und 1 (3.3 Volt) hin und her schalten.
- DigitalIn - liefert je nach Spannung: 0 Volt eine 0 oder 3.3 - 5 Volt eine 1.
- AnalogIn - Umsetzung eines Analogssignals in einen Wert.
- PwmOut - Pulsweitenmodulation für die Erzeugung einer elektrische Spannung zwischen Ground (0 Volt) und 3.3 Volt.
Standard Pins sind mit D0 - D15, A0 - A5 (analog Arduino) oder PTxx gekennzeichnet. RX/TX, SDA,SCL und SS, MOSI, MISO, SLCK sind Pins für Bussysteme. Daneben sind Pin mit Ground (GND) und +5 Volt (+5V) vorhanden um die Verkabelung von externen Sensoren und Aktoren zu vereinfachen.
Weitere Beispiele
- Encoder Switch - zählt die Impulse am Encoder und schaltet einen Zähler vor und zurück.
- Übungen
Sinnbildliche Darstellung für den Anschluss eines LEDs. Der Name des Pins ist entsprechend Anzupassen.
Mittels DigitalOut kann ein Pin zwischen 0 (0 Volt) und 1 (3.3 Volt) hin und her geschaltet werden.
Definition
DigitalOut led1( <GPIO-Pin Name> );
Ansteuerung
On
led1 = 1;
led1.write( 1 );
Off
led1 = 0;
led1.write( 0 );
Beide Varianten bei On/Off geben das gleiche Ergebnis. Die LED wird ein- und ausgeschaltet. Die erste Variante verwendet [Operator Overloading von C++] und die zweite die Methode write
.
- Ansteuerung von LEDs, z.B. für Taschenlampe, Kultpfunzel , Fernsehsimulator, Kleidung, Statusanzeigen etc.
- 2 DigitalOut für die Richtungsbestimmung bei Motoren
- 4 DigitalOut für die Ansteuerung von Schrittmotoren
Siehe auch: mbed Handbook und YouTube Tutorial
Das Beispiel DigitalOut steuert die LEDs D10 - D13 nacheinnander an.
Compilieren
Umgebung/Board | Link/Befehl |
---|---|
Online Compiler | DigitalOut |
CLI (IoTKit K64F) | mbed compile -m K64F --source . --source ../IoTKitV3/gpio/DigitalOut; cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK |
CLI (DISCO_L475VG_IOT01A) | mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/gpio/DigitalOut |
Online Compiler (nucleo_f303re) | mbed-os-example-blinky |
Schematische Darstellung: Anschluss eines Buttons
DigitalIn liest den Status eines Pins (als Input Bezeichnet) aus.
DigitalIn liefert je nach Spannung: 0 Volt eine 0 oder 3.3 - 5 Volt eine 1.
Damit Eindeutig zwischen 0 und 1 unterschieden werden kann, wird in der Regel mit PullUp Widerständen gearbeitet. Dies kann durch den internen PullUp Widerstand (zweiter Parameter bei DigitalIn, Default = ON).
- Externer Feedback, z.B. Taster.
- Sensoren welche bei Eintreten eines Ereignisses zwischen 0 und 1 umschalten, z.B. Bewegungsmelder
Siehe auch: mbed Handbook und YouTube Tutorial
Das Beispiel frägt den Taster vom Encoder ab.
Umgebung/Board | Link/Befehl |
---|---|
Online Compiler | DigitalIn |
CLI (IoTKit K64F) | mbed compile -m K64F --source . --source ../IoTKitV3/gpio/DigitalIn; cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK |
CLI (DISCO_L475VG_IOT01A) | mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/gpio/DigitalIn |
CLI (nucleo_f303re) | mbed compile -m nucleo_f303re -f --source . --source ../IoTKitV3/gpio/DigitalIn |
Sinnbildliche Darstellung eines Analogen Signals
Ein Analogsignal ist ein Signals mit stufenlosem und unterbrechungsfreiem Verlauf
In der Elektronik erfolgt die Umsetzung eines elektrischen Analogsignals in ein nutzbares Digitalsignal mittels Analog-Digital-Umsetzern (ADU), die umgekehrte Richtung erfolgt mittels Digital-Analog-Umsetzern (DAU).
Die Pins A0 - A5 haben integrierte Analog-Digital-Umsetzer. AnalogIn macht sich das zunutze und liefert die aktuelle analoge Spannung in Prozent (0.0 - 1.0) oder als short (0 - 65535).
- Auslesen eines Sensorwertes, z.B. Lichtintensität
- Zusammen mit einen Potentiometer um einen Schwellenwert für ein Ereignis, z.B. für das Anschalten des Lichtes, oder um die Geschwindigkeit für einen Motor einzustellen.
Siehe auch: mbed Handbook und YouTube Tutorial
Das Beispiel frägt den Hallsensor (zur Ermittelung des Nord- oder Südpols eines Magneten) ab und bringt bei entsprechendem Pol die LED 1 zum leuchten.
Umgebung/Board | Link/Befehl |
---|---|
Online Compiler | AnalogIn |
CLI (IoTKit K64F) | mbed compile -m K64F --source . --source ../IoTKitV3/gpio/AnalogIn; cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK |
CLI (DISCO_L475VG_IOT01A) | mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/gpio/AnalogIn |
CLI (nucleo_f303re) | mbed compile -m nucleo_f303re -f --source . --source ../IoTKitV3/gpio/AnalogIn |
Sinnbildliche Darstellung eines PWM Signals
Pulsweitenmodulation (kurz PWM), ist eine Modulationsart, bei der die elektrische Spannung zwischen Ground (0 Volt) und 3.3 Volt wechselt.
Die relative Länge des Pulses wird Tastgrad (englisch duty cycle) genannt.
Der Abstand zwischen dem Startpunkt zwei aufeinanderfolgender Pulse wird "Periode" genannt.
PwmOut kann nur mit Pins verwendet werden, welche mit PWM bezeichnet sind.
- Licht dimmen
- Motoren Geschwindigkeit regeln
- Töne erzeugen
Siehe auch: mbed Handbook und YouTube Tutorial
- Das Beispiel PWMOut dimmt die LED 4 langsam auf.
- Das Beispiel PwmOutPeriod emuliert eine Polizeisierene mit dem Buzzer (Summer).
Umgebung/Board | Link/Befehl |
---|---|
Online Compiler | PwmOut |
CLI (IoTKit K64F) | mbed compile -m K64F --source . --source ../IoTKitV3/gpio/PwmOut; cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK |
CLI (DISCO_L475VG_IOT01A) | mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/gpio/PwmOut |
CLI (nucleo_f303re) | LED1 (D13) unterstützt kein PWM |
Umgebung/Board | Link/Befehl |
---|---|
Online Compiler | PwmOutPeriod |
CLI (IoTKit K64F) | mbed compile -m K64F --source . --source ../IoTKitV3/gpio/PwmOutPeriod; cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK |
CLI (DISCO_L475VG_IOT01A) | mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/gpio/PwmOutPeriod |
CLI (nucleo_f303re) | - |
Ein Encoder Switch - zählt die Impulse am Encoder und schaltet einen Zähler vor und zurück
- Wert hoch- und runterzählen, z.B. um einen Motor zu Steuern, eine Lautstärke einzustellen etc.
- Das Beispiel EncoderSwitch gibt die Anzahl Pulse auf dem Display aus.
Umgebung/Board | Link/Befehl |
---|---|
Online Compiler | EncoderSwitch |
CLI (IoTKit K64F) | mbed compile -m K64F --source . --source ../IoTKitV3/gpio/EncoderSwitch; cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK |
CLI (DISCO_L475VG_IOT01A) | Das Board/Shield hat kein Encoder Switch verbaut |
CLI (nucleo_f303re) | Das Board/Shield hat kein Encoder Switch verbaut |
Übung | Lösung |
---|---|
DigitalIn, DigitalOut, if, wait Schreibt ein Programm welches eine der vier LED's bei Druck einer Taste 3 lang Sekunden aufleuchten lässt. Anwendung: Licht Treppenhaus. |
Lösung |
DigitalOut, for Verschachtelt, wait, Array's Erstellt eine Array welche die 4 LED anhand einer Pseudo Melodie aufleuchten lässt. Anwendung: Fernseher Simulation um Einbrecher abzuschrecken. |
Lösung |
Adaptieren bestehender Beispiele - Melodie abspielen Baut das Using a Speaker for Audio Output Beispiel auf den Summer um. Anwendung: Türglocke, Alarmanlage, Polizeihorn. |
Lösung |
Umgebung/Board | Link/Befehl |
---|---|
Online Compiler | template Importieren und Inhalt von main.cpp mit Übungscode überschreiben |
CLI (IoTKit K64F) | mbed compile -m K64F --source . --source ../IoTKitV3/gpio/01-Uebung; cp BUILD/K64F/GCC_ARM/template.bin $DAPLINK |
CLI (DISCO_L475VG_IOT01A) | mbed compile -m DISCO_L475VG_IOT01A -f --source . --source ../IoTKitV3/gpio/01-Uebung |
CLI (nucleo_f303re) | - |
- 01-Uebung durch entsprechendes Übung Verzeichnis 02-Uebung etc. ersetzen.