Franz Pucher / TINF

You are viewing an older revision! See the latest version

Digital IO Erweitert

Inhalt

Neben DigitalOut und DigitalIn, die pro Pin arbeiten, gibt es beim mbed zur vereinfachten Bearbeitung von z.B. einem Datenbus die parallel data and communication (siehe Slides 1 bis 8) und hier speziell das BusOut Interface.

BusOut

Das BusOut-Interface kann an jedem Pin mit blauer Beschriftung sowie an den integrierten LEDs (LED1-LED4) verwendet werden. Über die BusOut-Schnittstelle kann der Status des Ausgangs-Pins eingestellt und der aktuelle Ausgangsstatus zurückgelesen werden. Setzen Sie den BusOut auf Null, um ihn auszuschalten, oder auf 1, um ihn einzuschalten.

Aufgabe: Schreiben Sie ein Lauflicht für die 4 On-board Leds.

Schreiben Sie ein Programm mit Funktionen, 4-Bit Werte auf die 4 Leds des M3Boards geschrieben werden können:

  1. Untersuchen der BusOut-Klasse der mbed-Bibliothek
  2. Globale BusOut-Variable erzeugen.
  3. Funktion LedBusOn(...) schreiben, die einen Integer/Hex-Wert auf den Led-Bus schreibt.
  4. Test der Funktion LedBusOn(i++);

Zusatzaufgabe 1:

  • Funktion LedBusAscii(...), die das untere Nibble eines ASCII-Wertes am Led-Bus anzeigt.

Zusatzaufgabe 2:

  • Globale Variable mit Array von Pins erzeugen.
  • Anmerkung: Bei der Definition des PinName-Arrays muss als Arraygröße 16 angegeben werden obwohl nur 1 Byte (Nibble bei M3) benötigt wird, sonst stürtzt das Programm ab (siehe Konstruktor BusOut):

PinName pinBus[16] = {pin1, pin2, ..., pin8};
PinName pinBusM3[16] = {pin1, pin2, ..., pin3};

Vertiefung

Lower Level GPIO-Programming

Aufgaben:

1. [Bus4Leds] Definiere eine 4-Bit Konstante und gebe den Wert auf die vier blauen Leds aus - die nur diejenigen Leds einschaltet, die im Wert gesetzt sind. Schreibe die Funktion selectivLedsOn(wert) und teste diese in der main() Funktion.

2. [JoyLedMap] Gebe für die jeweiligen Joystick Schalter die entsprechende blaue Led aus: right = LED1, left=LED2, up=LED3, down =LED4

Aufgaben

Veröffentlichen Sie die Dateien/Bibliothek und schreiben Sie einen WIKI-Eintag mit kurzer Programmbeschreibung.

3. [TwoLedFunc] Erzeuge die in main() aufgerufenen Funktionen für zwei Leds:

main() {
   ledOn();       // beide Leds einschalten
   ledOff();      // beide Leds ausschalten
   ledX();        // beide Leds gegengleich schalten
   printStatus(); // Anzeigen ob Leds ein oder aus
}

4. [FourLeds] Erzeugefür vier Leds und folgenden Funktionen:

main() {
   lauflicht();       
/*********************************
    D1  D2  D3  D4
    -   -   -   -       Ein Durchgang dauert 2 sec
    X   -   -   -
    -   X   -   - 
    -   -   X   -
    -   -   -   X
    -   -   -   -		X=ON  - = off
*********************************/
   lauflichtbalken();
/*********************************
    D1  D2  D3  D4
    -   -   -   -       Ein Durchgang dauert 2 sec
    X   -   -   -
    X   X   -   - 
    X   X   X   -
    X   X   X   X
    -   -   -   -
    X   X   X   X         X=ON  - = off
**********************************/
}

5. [HexLeds] Erzeuge das folgende HexLeds Programm für vier Leds und folgenden Funktionen:

main() {
   hexleds.eingabe()     // einlesen eines Integer-Wertes von der Tastatur mit scanf("%d", &ein);
   hexleds.ausgabe()     // ausgeben des Integer-Wertes der von der Tastatur eingegeben wurde
   hexleds.hexOut()      // Ausgabe des Wertes in Hex-Darstellung an den 4 Leds
   hexleds.printStatus() // Anzeigen ob Leds ein oder aus
}

Anm.: Überprüfen Sie ob der eingebene Wert zwischen 0 und 15 liegt.

6. [Bankomat] Erzeuge eine Bankomat Nachahmung mit folgenden Funktionen:

random()         // erzeugen eines zufälligen 4-stelligen Pins 
showPin()        // zeigt den Pin-Code an den Leds an
int checkPin()   // Überprüft eine Eingabe mit dem Pin und gibt 1 zurück wenn gleich, sonst 0

All wikipages