Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) J. Hampel Dipl.-Ing. (FH) A. Reber

Übungen zum Tutorium Arbeiten mit dem M_Dongle Labor Mikrocontroller mit NUC130 Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) J. Hampel Dipl.-Ing. (FH) A. ...
7 downloads 0 Views 260KB Size
Übungen zum Tutorium Arbeiten mit dem M_Dongle Labor Mikrocontroller mit NUC130

Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) J. Hampel Dipl.-Ing. (FH) A. Reber 02.11.2016 Version 7.01

Inhalt

1

Portpins verwenden .......................................................................................................... 2

2

Joystick.............................................................................................................................3

3

4

5

2.1

Übung Joystick ......................................................................................................... 3

2.2

Übung Joystick mit Byteabfrage ................................................................................ 3

2.3

Übung Ermitteln der Länge eines Tastendruckes ...................................................... 4

Würfel ...............................................................................................................................5 3.1

Übung Würfel ............................................................................................................ 5

3.2

Übung Würfel mittels LU ........................................................................................... 5

GLCD verwenden ............................................................................................................. 6 4.1

Übung Würfel mit Textausgabe ................................................................................. 6

4.2

Übung Würfel mit Statistikfunktion ............................................................................ 7

Literatur ............................................................................................................................7

__________________________________________________________________________________________ Mikrocontroller Labor: Tutorium -1-

Die Aufgaben des Tutoriums können alle mit dem M_Dongle_Simulator getestet werden.

1

Portpins verwenden

Bevor die Aufgaben bearbeitet werden sollte das folgende Dokument durchgearbeitet werden: C-Programmierung mit dem M_Dongle[3] Es stehen Treiberfunktionen, mit denen einzelne Bits initialisiert gelesen und geschrieben werden können, zur Verfügung. Die Initialisierung der LEDs und des Joysticks werden in der Init() Funktion vorgenommen. void DrvGPIO_PortOpen(PORT_LEDS, LED0, E_IO_OUTPUT); Zum Lesen und Schreiben können die folgenden Funktionen verwendet werden: void DrvGPIO_SetBit(E_DRVGPIO_PORT port, int32_t i32Bit); void DrvGPIO_ClearBit(E_DRVGPIO_PORT port, int32_t i32Bit); uint32_t DrvGPIO_GetBit(E_DRVGPIO_PORT port, int32_t i32Bit); Die Funktion des folgendes Codesegments ist zu klären: DrvGPIO_SetBit(PORT_LEDS, LED0); if(DrvGPIO_GetBit(PORT_JOY, JOY_DOWN)== 0) { DrvGPIO_ClearBit(PORT_LEDS, LED0); } Alternativ können einzelne GPIO Pins mittels Makros gesetzt oder gelöscht werden. M_GPIO_BIT_SET(BIT_LED1); M_GPIO_BIT_CLEAR(BIT_LED1); Zum Einlesen steht ebenfalls ein Makro zur Verfügung: M_GPIO_BIT_GET(BIT_TASTER_2) Mit Makros sieht das obige Beispiel wie folgt aus: M_GPIO_BIT_SET(BIT_LED1); if(M_GPIO_BIT_GET(BIT_JOY_UP)== 0) { M_GPIO_BIT_CLEAR(BIT_LED1); } Der Unterschied zwischen Funktionen und Makros ist zu diskutieren. Die Funktionen und die Makros sind im Treiber Driver_M_Dongle zu finden.

__________________________________________________________________________________________ Mikrocontroller Labor: Tutorium -2-

2

Joystick

Beim Anlegen der Projekte für die Übungen ist darauf zu achten, dass keine deutschen Umlaute (ö,ä,ü), Leerzeichen in den Namen und Dateinamen enthalten sind. Legen Sie für jede Übung ein neues Projekt an, damit Sie sich mit der Projekterstellung vertraut machen.

2.1

Übung Joystick

Bei allen Übungen sind die Datentypen aus stdint.h zu verwenden Als erstes soll das Einführungsbeispiel so erweitert werden, dass jede Bewegungsrichtung des Joysticks mit einer entsprechenden LED signalisiert wird. Es gilt folgende Zuordnung: Joystick Up Joystick Down Joystick L Joystick R Joystick Taster

2.2

-> LED 7 -> LED 6 -> LED 4 -> LED 3 -> LED 0

Übung Joystick mit Byteabfrage

Häufig entstehen durch die sequentielle bitweise Abfrage Probleme. Beim Joystick ist es denkbar dass der Joystick von Up nach Down gedrückt wird und beide Zustände erkannt werden. Um diese Probleme zu vermeiden sollten die Pins des Joysticks gleichzeitig als eingelesen werden. Mit Hilfe der in „C-Programmierung mit dem M_Dongle Kapitel 3.2.6“ beschriebenen Vorgehensweise ist dies möglich. Durch den Lesevorgang werden alle aktuellen Pinzustände in eine Variable übertragen. Eine aktive Joystick-Richtung hat eine „0“ an ihrer Portposition. Außerdem sollen nur dann Zugriffe auf die LEDs stattfinden, wenn sich etwas geändert hat. Das bedeutet für den Fall, dass sich zwischen zwei Abfragen des Joysticks nichts verändert hat, dass es auch keine Ausgabe auf die LEDs gibt. Fürs Einlesen gilt: ui8Value = ~GPIOE->PIN_BYTE0;

// Joystick Pins auslesen // und bitweise invertieren

Für die Ausgabe gilt: #define LEDSOFF 0xFF GPIOE->DOUT_BYTE1 = (LEDSOFF);

// all LEDs off

Es sind literale Konstanten für die Ausgabe und eine (switch/case) Konstrukt zu verwenden.

__________________________________________________________________________________________ Mikrocontroller Labor: Tutorium -3-

2.3

Übung Ermitteln der Länge eines Tastendruckes

Erweitern Sie ihre Übung 2.2 um die Möglichkeit, die Länge der Betätigung des Joystick-Tasters zu bestimmen. Dazu muss in dessen case-Fall eine Variable hochgezählt werden, solange der Joy-Taster gedrückt ist. Geben Sie den Inhalt der Variablen während des Hochzählens auf der LED-Leiste mit folgender Anweisung aus: GPIOE->DOUT_BYTE1 = ~(uxCounter);

Testen Sie die Übung im M_Dongle_Simulator mit 3 Variablen-Typen (uint8_t, uint16_t und uint32_t) und der obigen LED-Ausgabe.

Testen Sie die Übung mit folgender LED-Ausgabe für die uint16_t und uint32_t: GPIOE->DOUT_BYTE1 = ~((uxCounter)>> 8);

Was sehen Sie bei der 16-Bit Zähler-Variable auf der LED-Leiste ? __________________________________________________________________________________ __________________________________________________________________________________ __________________________________________________________________________________

Was sehen Sie bei der 32-Bit Zähler-Variable auf der LED-Leiste ? __________________________________________________________________________________ __________________________________________________________________________________ __________________________________________________________________________________

PAP für den case des Joystick-Tasters zeichnen:

__________________________________________________________________________________________ Mikrocontroller Labor: Tutorium -4-

3 3.1

Würfel Übung Würfel

Es ist ein Würfel zu realisieren. Dies geschieht durch das Hochzählen einer Variablen, deren Zählbereich entsprechend der Würfel-Augen-Anzahl begrenzt wird. Die Dauer eines Tastendrucks ist im Vergleich zur Geschwindigkeit des µC zufällig. Nun muss der Würfelwert nur noch auf die Leds ausgegeben werden. • Es soll die der Würfelzahl entsprechende Anzahl LEDs leuchten (4 Augen -> 4 leuchtende LEDs) • Solange (UP) des Joysticks gedrückt wird, soll gewürfelt werden. • Durch das Runterdrücken (DOWN) des Joysticks sollen die LEDs alle gelöscht werden.

3.2

Übung Würfel mittels LU

Üblicherweise wird die erste Realisierung mittels if oder (switch/case) erfolgen. Im zweiten Schritt soll mit Hilfe eines Datenfeldes (Array), dass als LookUp Table eingesetzt wird, eine sehr viel effizientere Lösung gefunden werden. Das bedeutet, dass die notwendigen Muster für die LED-Leiste in einer LookUp-Table abgelegt werden und die Würfelzahl der Index (Zeiger) auf die Elemente der Table ist

Zur Vorbereitung muss ein PAP oder ein Struktogramm erstellt werden.

TIP: Look Up Tabelle uint8_t ui8Count = 0; uint8_t ui8LU[] = {0xFF,………}; GPIOE->DOUT_BYTE1 = ui8LU[ui8Count]; Erläutern Sie die obige Funktion:

__________________________________________________________________________________

__________________________________________________________________________________

__________________________________________________________________________________

__________________________________________________________________________________

__________________________________________________________________________________

__________________________________________________________________________________________ Mikrocontroller Labor: Tutorium -5-

4

GLCD verwenden

Bei allen Aufgaben sind die Datentypen aus stdint.h zu verwenden Die Funktionen des GLCD sind ausführlich in C-Programmierung mit dem M_Dongle Kapitel 3.3 beschrieben. Die entsprechenden Funktionen befinden sich im Modul GLCD. Das Modul GLCD muss ins Projekt eingefügt werden.

Bild 1 Modul GLCD im Projekt

Hallo Welt lässt sich einfach realisieren:

Drv_System_ClkInit(); Board_Init(); GLCD_Init(); GLCD_PrintText(1,1,"Hallo Welt"); while(1) { }

4.1

Übung Würfel mit Textausgabe

Das Würfelprogram ist um eine Textausgabe zu erweitern. Dazu muss der gewürfelte Wert allerdings zuerst in ein darstellbares Zeichen gewandelt werden. TIP: Ausgabe und Umrechnung einer Zahl zu Darstellung GLCD_SetTextCursor(4,2); GLCD_PrintChar(ui8Count + '0');

__________________________________________________________________________________________ Mikrocontroller Labor: Tutorium -6-

4.2

Übung Würfel mit Statistikfunktion

Zusätzlich ist eine Statistik über die gewürfelten Werte zu führen und auszugeben. Durch das Runterdrücken(JOY_TASTER) des Joysticks werden die Statistikwerte wieder auf 0 gesetzt. Es sind immer nur die geänderten Werte zu schreiben. Die Texte dürfen nur einmal geschrieben werden. Die größte darstellbare Zahl in der Statistik für einen Wert ist 99. Welche Datentypen müssen für die einzelnen Werte und für die Gesamtzahl der Würfe verwendet werden? Zur Vorbereitung muss ein PAP erstellt werden. Verwenden Sie für die Statistik eine Array und keine einzelnen Variablen.

TIP: Zerlegung in Einer und Zehner Einer = Zahl % 10 Zehner = (Zahl / 10) % 10

Darstellung auf dem Display nach dem Start: Aktueller Wurf: Gesamtzahl Wuerfe: 00 Statistik: 1 2 3 4 5 6 00 00 00 00 00 00

5 [1] [2] [3]

Literatur M_Dongle, Dokumentation µVision User's Guide http://www.keil.com/ C_Programmierung_mit_dem_M_Dongle.pdf

__________________________________________________________________________________________ Mikrocontroller Labor: Tutorium -7-