ch-open-wstage2015


/ch/open Workshop WS4 "Internet der Dinge", Referent: Marcel Bernet

GPIO

Einführung

K64F

Allzweckeingabe/-ausgabe (engl. GPIO - General Purpose Input/Output) ist ein allgemeiner Kontaktstift (Pin) an einem Mikrokontroller, 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.

Das K64F Board hat einen Vielzahl von GPIO Pins. Aus Kompatibiliätsgründen zu den anderen Boards (und dem Shield) verwenden wird aber nur die mit D0 - D15 und A0 - A5 bezeichneten Pins.











GPIO Klassen

GPIO

Mittels folgender Grundklassen kann den GPIO Pins ein Zweck vorgegeben werden:

  • DigitalOut - Ausgabe einer Positiven Spannung
  • DigitalIn - Lesen des Status eines Pins
  • AnalogIn - Auslesen der Spannung an einem Pin
  • PwmOut - Erzeugen einer Spannung, mittels Pulsweitenmodulation (PWM)











Programme

DigitalOut

DigitalOut - Ausgabe einer Positiven Spannung

#include "mbed.h"
 
DigitalOut led( D10 );
 
int main()
{
    while(1) 
    {
        led.write( 0 );
        wait(0.8);
        
        led.write( 1 );
        wait(1.0);
    }
} 

Import programDigitalOut

Mittels DigitalOut kann eine Positive Spannung an einem Pin erzeugt werden.

DigitalIn

DigitalIn - Lesen des Status eines Pins

#include "mbed.h"
 
DigitalIn button1( A0, PullUp );
DigitalOut led1( D10 );
 
int main()
{
    while   ( 1 ) 
    {
        led1 = 0;
        if  ( button1 == 0 ) 
        {
            led1 = 1;
            wait( 1.0 );
        }
 
    }
}

Import programDigitalIn

DigitalIn liest den Status eines Pins aus.

AnalogIn

AnalogIn - Auslesen der Spannung an einem Pin

#include "mbed.h"
 
AnalogIn poti( A0 );
DigitalOut led1 ( D10 );
 
int main()
{
    while   ( 1 )
    {
        if  ( poti.read() < 0.5f )          // in Prozent
            led1 = 1;
        else
            led1 = 0;
            
        wait ( 1.0 );   
        //if  ( licht.read_u16() > 32767 )    // als short Ganzzahl
        //    ....;   
    }     
}

Import programAnalogIn

Liest die Spannung an einem Pin.

PwmOut

PwmOut - Erzeugen einer Spannung, mittels Pulsweitenmodulation (PWM)

#include "mbed.h"
 
PwmOut led( D13 );
 
int main()
{
    for ( float i  = 0.0; i < 1.0f; i += 0.01f )
    {
        led = i;
        wait    ( 0.1 );
    }
}

Import programPwmOut

Pulsweitenmodulation











Übungen

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.

Import program0-04-01-Uebung

4.1 LED x Sekunden aufleuchten bei Tastendruck (if, wait)

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.

Import program0-04-04-Uebung

4.4 Melodie visualisieren (for Verschachtelt, wait, Array's)

if/else, AnalogIn, PwmOut

Schaltet eine LED mittels Tastendruck ein- und aus. Zusätzlich soll der Wert des Poti zur Helligkeitssteuerung verwendet werden.

Anwendung: Lichtschalter mit Dimmer.

Import program0-04-07-Uebung

4.7 LED mittels Tastendruck ein- und ausschalten. (if/else, AnalogIn) mit Berücksichtigung Poti (PWM)











Zusammenfassung

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 - Ausgabe einer Positiven Spannung
  • DigitalIn - Lesen des Status eines Pins
  • AnalogIn - Auslesen der Spannung an einem Pin
  • PwmOut - Erzeugen einer Spannung, mittels Pulsweitenmodulation (PWM)

Weitere Informationen: Using mbed libraries


All wikipages