Technische Informatik; Hardwarenahe Programmierung

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};

Wie erfolgt die Parameterübergabe beim BusOut? Beispiel.

Vertiefung FastIO

Um schneller und effizientere Ausgabe auf die Pins zu erreichen gibt es zwei Möglichkeiten:

Nucleo_L432KC

Warning: #warning directive: Target is not supported by FastIO in "FastIO/FastIO.h", Line: 19, Col: 3

Es wird also die DigitalIO von Mbed verwendet.

Fragen

  1. Wie wird ein BusOut definiert? (Beispiel mit 4 Leds)?
  2. Definieren Sie den Joystick als BusIn und wie erfolgt die Abfrage welche Tasten gedrückt wurden?

Aufgaben

Information

Veröffentlichen Sie das jeweils fertige Programm aus dem mbed-Compiler mit dem Programm-Namen aus den [eckigen Klammern] nach der fortlaufenden Nummer

ODER

wenn Sie die Programme im mbed-Simulator schreiben, erzeugen Sie eine entsprechende WIKI-Seite mit kurzer Programmbeschreibung und dem Code (siehe WIKI-Syntax) mit Titel aus den [eckigen Klammern].

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

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