• Keine Ergebnisse gefunden

CPU -Graphical LCD

Im Dokument Das 8-Bit-Waffeleisen (Seite 43-52)

5.5.1 Dokumentation und Arbeitsentwicklung Einleitung:

Die Aufgabe der CPU-GLCD Untergruppe ist die Ansteuerung eines LCD Bildschirm [29], der f¨ur die Ausgabe von Spiele oder Men¨u verwendet wird. Zur Verf¨ugung steht ein 128x64 LCD Grafikdisplays mit LED-Hintergrundbeleuchtung mit der Artikelnummer: DEM 128064A SBH-PW-N [30] [31]. Die zwei SBN6400G [32] integrierten Controller des LCD [31] werden mittels eines Mikrocontrollers von der STM32 Mikrocontroller-Familie mit einer 32-Bit ARM Cortex-M4F CPU [33]angesteuert. Die LCD Ansteuerung erfolgt ¨uber das Programm CubeIDE [34] von STMicroelectronics und wird in der Programmiersprache C implementiert. Es wurde als erster Schritt ein library programmiert, dieses Library besteht aus: ein main library Datei GLCD.c und ein Header Datei GLCD.h. Dieses Library wird genauer im Abschnitt ’GLCD Ansteuerung mit STM32’ erkl¨art. Das Graphical LCD verf¨ugt

¨

uber die folgenden Pins:

Abbildung 19: GLCD Pins [31]

Die Pins mit den Nummern 1, 2, 3, 19 und 20 des LCD Displays wurden nach ihrer Beschreibung im Datenblatt wie folgend verbunden: VSS Pin mit 0V, VDD Pin mit 5V, V0 mit einem Potentiometer um das Kontrast von dem Bildschirm zu kontrollieren, LED+(A) mit 3V und LED-(K) mit 0V.

Das Graphical LCD wird in 8-bit parallel Modus betrieben, bzw. die 8 Data bit von DB0 bis DB7

werden alle f¨ur die parallel f¨ur die Daten¨ubertragung verwendet. Wenn RS auf LOW gesetz ist, die angelegten 8 Data bits werden als Befehl interpretiert, und wenn auf HIGH, das byte ( die 8 bit Zahl von DB0 bis DB7) wird als Datenbyte interpretiert, bzw. wird auf dem LCD angezeigt. Da es in den Programme auf den Bildschirm geschrieben wird, wird das Pin R/W auf LOW gesetzt, mit R/W = 1 kann aus dem LCD gelesen werden, was bei der Verwendung von dem LCD bei diesem Projekt nicht gebraucht wird. Das Pin E signalisiert dem LCD, dass die gew¨unschten Daten von Datenleitungen oder Kommandos ¨ubernehmen werden k¨onnen. Das GLCD ist gleichm¨aßig in zwei H¨alften geteilt. Jede H¨alfte wird jeweils von einem SBN6400G Controller gesteuert.Pin CS1 muss auf high und CS2 auf LOW gesetzt werden, um die linke H¨alfte zu w¨ahlen und umgekeht f¨ur die rechte H¨alfte. RSTB wird f¨ur das Zur¨ucksetzen von dem GLCD verwendet. [35] [36]

Mehdi Djait

Men¨u:

Das Men¨u ist die Schnittstelle des ger¨at, wo man die spiele, die Farben, der Anzahl der Spiele w¨ahlen kann. Das Men¨u besteht sich selbe aus viele Funktionen und Methoden, die in folgende erkl¨art wurden.

void Updatemen¨u():

Die Update-Men¨u Methode ist die erste Methode, die direkt nach der Er¨offnung der Konsole ab-gerufen wird. Anhand dieser Methode kann das Hauptmen¨u angezeigt werden, wo der Wahl der Spiele, der Farbe, der FAQ m¨oglich ist:

• 1-Spiele

• 2-Farbe

• 3-FAQ

• 4-EXIT void Spiele():

wenn der User im Hauptmen¨u spiele w¨ahlt wird er direkt zurSpiele()Methode weitergeleitet. Die Funktionalit¨at dieser Methode ist die Anzeiger der Namen der Spielen und zwar:

• 1-Snake

• 7-Tron

• 8-Return void Farbe():

Um jede ihre Charaktere in der Spiele, wenn es in Multiplayer Modus ist, besser zu Verzeichnen, wurde es besser verschiedene Farben zu w¨ahlen und das was die Methode Farbe() erm¨oglicht.

void FAQ():

Die FAQ Methode informiert der User ¨uber die Name der Konsole und das Datum des Projekt void EXIT():

Exit Methode erm¨oglicht der Benutzer die Konsole auszumachen.

uint8 t Number():

Nach der Wahl der Spiele muss man der Anzahl der Spieler durch die Funktion Number definieren.

Diese Funktion zeigt zahlen von 1 bis zum 4. Wenn man ein zahl davon w¨ahlt, wird es als die Ausgabe der Funktion definiert. Diese Zahl wird als ein Eingabe f¨ur die gew¨ahlte Anzahl der Spieler benutzt.

Mohamed Amine Elakel

GLCD Ansteuerung mit STM32

In diesem Abschnitt wird Schritt f¨ur Schritt erkl¨art wie die Ansteuerung einer Graphical LCD mit dem STM32 Mikrokontroller erfolgt:

GLCD Delay(uint16 t timer)

Die integrierte HAL Delay Funktion von STM32CubeIDE wurde nicht verwendet und es wurde stattdessen eine einfache Delay Funktion programmiert, die uns erm¨oglicht sehr kleine Delays aus-zuf¨uhren. Die GLCD refresh Funktion dient hier als Trigger Funktion f¨ur das Senden von Daten, damit Befehele in das MPU geschrieben werden k¨onnen, muss Enable Pin einmal auf HIGH und dann auf LOW gesetzt werden mit einem Delay inzwischen, bzw. Enable signalisiert dem LCD, dass die gew¨unschten Daten von Datenleitungen oder Kommandos ¨ubernehmen werden k¨onnen .Die Konstante ’ref’ als Parameter f¨ur die GLCD Delay Funktion wurde hier durch Ausprobieren als 100 gew¨ahlt.

void GLCD RESET()

Das GLCD wird mittels der GLCD RESET() Funktion initialisiert. Diese Funktion l¨oscht alle an-gelegten Bits an den 20 Pins des Displays. RSTB wird einmal auf LOW gesetzt danach wird ein Delay aufgerufen und dann RSTB wieder auf HIGH.

GLCD CHIP SELECT(uint8 t CS)

Wie in der Einleitung schon erw¨ahnt wurde, der Bildschirm wird in zwei H¨alften geteilt. Es wurde hier ein Chip Select Funktion erstellt f¨ur die Ansteuerung von den 2 Controller, bzw. um w¨ahlen zu k¨onnen, auf welche H¨alfte geschrieben wird. Wenn die Funktion 0 als Argument bekommt, wird auf der linken H¨alfte geschrieben, wenn CS=1, es wird auf der rechten H¨alfte geschrieben.

GLCD Set Data(uint8 t car)

Um die 8 Data Bits DB0 bis DB7 von dem GLCD zu setzen wird die GLCD Set Data Routine implementiert. Diese Funktion bekommt car als Parameter, ein 8 bit unsigned integer. Jedes Data Bit (DB) wird mittels Logik Funktionen auf Eins oder Null gesetzt werden. Mit dieser Funktion Werden Daten- und Kontrollbefehle an dem GLCD gesetzt.

void GLCD DISPLAY ON()

Um die LCD Anzeige AN zu machen, es wurde zun¨achst die folgende Funktion implementiert.

Zuerst wird die linke Seite angemacht. Da es sich hier um ein Befehl handelt und auf dem Befehl-register zugegriffen wird zugegriffen wird, werden die RS und R/W Pins auf LOW gesetzt. Hier ist zu beachten, dass DB0 auf 1 gesetzt werden muss, um das Display AN zu machen. Nach einem Aufruf von den Refresh Funktion wird die rechte Seite angemacht.

GLCD SEND DATA(char car) & GLCD DISPLAY START X/Y

Damit die Controller von dem GLCD die angelegten Bits mit der Set Data Funktion auf dem Bildschirm anzeigen, es wurde die Send Data Funktion programmiert. C/D wird zuerst auf HIGH ge-macht und R/W auf LOW, weil es hier geschrieben wird. Danach werden die Bits mit GLCD Set Data gesetzt und anschließend wird die Trigger Funktion Refesh aufgerufen damit das Befehl ¨ubernehmen werden kann. Jede H¨alfte von dem LCD besteht aus 8 Seiten, wobei jede Seite aus 8 Zeilen und 64 Spalten besteht, Display Start X Funktion bezieht sich auf die Seiten von 0 bis 7, Display Start Y Funktion bezieht sich auf den Spalten von der jeweiligen Seite, wobei DB5 bis DB0 auf eine Zahl zwischen 0 und 63 gesetzt werden kann.

void GLCD ClearScreen()

Eine Funktion f¨ur die Initialisierung von dem Bildschirm wurde implementiert. Die Funktion besteht aus 3 For Schleifen, die erste geht durch die zwei H¨alften von dem LCD, die zweite Schleife geht durch die 8 Seiten der jeweiligen H¨alfte und die dritte Schleife setzt DB0 bis DB7 auf Null f¨ur die 64 Spalten von der jeder Seite. Mit dem logischen Zustand 0 werden die Segmente, die aus 8 Pixeln bestehen kein Licht durchlassen.

GLCD PRINT MATRIX(uint8 t matrix[64][64])

Als letzte Funktion von dem GLCD.c library wurde eine Print Matrix Funktion implementiert, die

eine 64x64 Matrix auf dem GLCD anzeigt, es wurde zuerst das Parameter von der SEND Data Funktion als Variable in der Funktion definiert. Die linke H¨alfte wird zuerst geschrieben, 3 Schleifen werden f¨ur jede H¨alfte verwendet. Die erste Schleife geht durch die 8 Seiten, die zweite geht durch die Spalten von der H¨alfte der Matrix, bzw. die ersten 32 Spalten, die dritte Schleife setzt mittels Logik Operationen die Bits von der Variable Data. Zwei if Anweisungen wurden f¨ur die rechte und linke Grenzen des Displays verwendet, hier wird die Matrix genau in der Mitte vom GLCD angezeigt, bzw. die ersten Spalte 0 bis 32 auf der linken H¨alfte und Spalte 33 bis 64 auf der rechten Seite.

Nach jeder Schreibung von Data werden die Display Start X und Y Funktionen inkrementiert.

Mehdi Djait

5.5.2 Schaltplan

Abbildung 20: Schaltplan GLCD [20]

5.5.3 Layout

Abbildung 21: GLCD Layout [20]

5.5.4 Platine

Abbildung 22: GLCD Platine

• L¨ange: 160mm

• Breite: 98mm

5.5.5 Zusammenfassung

Es wurde eine Bibliothek f¨ur die Ansteuerung von dem GLCD mit dem Mikrocontroller STM32 erstellt und deren Funktionen in dem Bericht erkl¨art, es wurde zus¨atzlich ein Men¨u f¨ur die Auswahl von Spiele entwickelt. Das GLCD wird je nach Betriebsart als Bildschirm f¨ur die Spiele oder nur f¨ur Men¨u verwendet.

Mehdi Djait

6 Gruppe 4: Interface

Ein Interface ist eine Schnittstelle, also der Teil eines technischen Systems, der zur Kommunikation zwischen Systemen und Individuen dient. In diesem Sinne ist die GruppeInterface f¨ur die Schnitt-stelle zwischen Anwender und Maschine zust¨andig. Eine detaillierte Erl¨auterung der Aufgaben der Gruppe Interface erfolgt im folgenden Abschnitt.

Lukas Karal

6.1 Aufgabenstellung

Die Gruppe Interface hat die Aufgabe die Schnittstelle zwischen dem Anwender und dem 8-Bit-Waffeleisen zu realisieren. Das umfasst die Konzeptionierung und den Bau von Eingabeger¨aten, hier als Game-Controller oder kurz Controller bezeichnet und eine 7-Segment-Anzeige, die dem Anwender den Spielstand zur Laufzeit anzeigt. Hierzu gibt es jeweils eine Untergruppe. (siehe hierzu Abschnitt 6.3 und 6.5 )

Des weiteren implementiert eine Untergruppe einen hardwarebasierten Pseudo-Zufallszahlen-Generator (PRNG). Dieser erzeugt zuf¨allige Bit-Muster im englischen als pseudo-random-binary-sequence be-zeichnet (PRBS) auf Grundlage eines 16-Bit linear-r¨uckgekoppelten Schieberegisters, die Bit-Folgen werden erfasst, zu Zahlen im Bereich[0. . .63]zusammengefasst und sollen den anderen Gruppen zur Verf¨ugung gestellt werden. Dazu wid ein Programm, welches auf dem STM32 der Entertainment-Gruppe l¨auft implementiert werden, welches das linear-r¨uckgekoppelte Schieberegister ansteuert.

Lukas Karal

6.2 Blockschaltbild

In Abbildung 23 ist das gemeinsame Blockschaltbild der Gruppe Interface dargestellt. Es umfasst die Teilprojekte Game-Controller, Pseudo-Random-Number-Generator (PRNG) und 7-Segement-Anzeige. Aus der Abbildung 23 wird die Vernetzung der Gruppe zu den anderen Gruppen ersichtlich.

So werden der PRNG und und die 7-Segement-Anzeigen ¨uber einen STM32-Mikocontroller gesteu-ert, der von der GruppeEntertainmentverwaltet wird. Dar¨uber hinaus werden die Controller direkt an die Platine der GruppeCPU geschlossen, um auftretende Latenzen m¨oglichst gering zu halten.

Lukas Karal

Abbildung 23: Blockschaltbild f¨ur die Gruppe Interface.(Eigene Abbildung erzeugt mit yEd)

Im Dokument Das 8-Bit-Waffeleisen (Seite 43-52)