Skip to content
This repository has been archived by the owner on Mar 4, 2022. It is now read-only.

Latest commit

 

History

History

gpio

GPIO


Home

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

DigitalOut


Nach oben

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.

Anwendungen

  • 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

Beispiel(e)

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

DigitalIn


Nach oben

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).

Anwendungen

  • 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

Beispiel(e)

Das Beispiel frägt den Taster vom Encoder ab.

Compilieren

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

AnalogIn


Nach oben

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).

Anwendungen

  • 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

Beispiel(e)

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.

Compilieren

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

PwmOut - Pulsweitenmodulation


Nach oben

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.

Anwendungen

  • Licht dimmen
  • Motoren Geschwindigkeit regeln
  • Töne erzeugen

Siehe auch: mbed Handbook und YouTube Tutorial

Beispiel(e)

  • Das Beispiel PWMOut dimmt die LED 4 langsam auf.
  • Das Beispiel PwmOutPeriod emuliert eine Polizeisierene mit dem Buzzer (Summer).

Compilieren

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) -

Encoder Switch


Nach oben

Ein Encoder Switch - zählt die Impulse am Encoder und schaltet einen Zähler vor und zurück

Anwendungen

  • Wert hoch- und runterzählen, z.B. um einen Motor zu Steuern, eine Lautstärke einzustellen etc.

Beispiel(e)

  • Das Beispiel EncoderSwitch gibt die Anzahl Pulse auf dem Display aus.

Compilieren

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

Übungen


Nach oben

Ü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

Compilieren

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.