2 Software
Erstellt: DL6GL, 25.03.2019, letzte Änderung
«1 Konzept | TOP | »3 Erweiterte I2C-Kopplung mit Touchscreen |
Die Grundstruktur der Software ist vergleichbar mit der in [1] beschriebenen:
- Master: Parametrierung der gewünschten Darstellungen und Übertragung an den Slave,
- Slave: Darstellung mit Hilfe der aus [2] verfügbaren Displayfunktionen.
Folgende Funktionen sind implementiert:
Lcd_line | Linie von/bis mit wählbarer Strichstärke und Farbe |
Lcd_box | Rechteck mit wählbarer Breite/Höhe, Füllfarbe und Rahmenfarbe |
Lcd_circle | Kreis mit wählbarem Mittelpunkt/Radius und Linienfarbe |
Lcd_fill_circle | Kreis mit wählbarem Mittelpunkt/Radius und Füllungs-/Linienfarbe |
Lcd_text | Text mit wählbarer Schriftgröße/Farbe und Hintergrundfarbe |
Lcd_clear | Bildschirm löschen und neue Hintergrundfarbe setzen |
Explizite Löschfunktionen sind nicht vorgesehen. Sollen z.B. ein Text oder eine Grafik selektiv gelöscht werden, muss der vorherige Befehl zur Darstellung des Textes oder der Grafik mit der aktuellen Schirm-Hintergrundfarbe wiederholt werden. Bei Text etwa Textfarbe = Hintergrundfarbe = Schirm-Hintergrundfarbe. "Löschen" ist also Überschreiben mit der Schirm-Hintergrundfarbe.
Bei einer Balkenanzeige (Bargraph) mit ständig veränderlichen Balkenlängen ginge das dann so:
- Erster Balkenwert = Anfangswert, z.B. =0
- Bei allen Folgewerten für den Balken die Differenz neuer Wert - aktueller Wert berechnen.
- Ist die Differenz = 0 (kein Unterschied), gibt es nicht zu tun.
- Ist die Differenz > 0 (neuer Wert größer), den Differenzwert zum aktuellen Balken zufügen.
Der Balken wird länger - Ist die Differenz < 0 (neuer Wert kleiner), den Differenzwert vom aktuellen Wert abziehen und von dort bis zum aktuellen Wert den Balken mit Schirm-Hintergrundfarbe übermalen.
Der Balken wird kürzer.
Es ist also einiges an Rechnerei und Pixelmalerei nötig. Das braucht Zeit. Ein heftig zappelndes VU-Meter wie in professionellen Mischpulten bekommt man damit nicht hin.
Die Beschreibung der Master-Funktionsparameter ist im Download zu finden.
Die ILI9341-Library "ILI9341_functions8.inc" von HKipnik [2] wurde entsprechend der genannten Änderungen angepasst:
- Funktionen für die SD-Card entfernt,
- Steuerung für den Software-Reset des LCD über A4/PC4 in "Lcd_INIT" entfernt.
Sie heißt nun "ILI9341_functions8_DL6GL.inc".
Im Slave-Programm ist als Standarddarstellung "Landscape", also 320 Pixel horizontal und 240 Pixel vertikal, vorbesetzt.
Funktionen für das TFT-Touchpanel wären noch nett gewesen. Dazu müssten die Touch-Ereignisse dann vom Slave an den Master zurückgegeben werden. Kann die I2C-Software derzeit nicht. Vielleicht später einmal...
Das I2C-Protokoll wird je nach Länge der Parameterliste in den Masterfunktionen variabel aufgesetzt:
Byte | Name | Bedeutung |
---|---|---|
0 | bytGD_Addr | Slave-Address |
1 | bytGD_Len | Number of data bytes from byte 1 to n |
2 | bytGD_Cmd | LCD command |
3 | bytGD_Dat(1) | First command parameter data byte |
n | bytGD_Dat(n-2) | Last command parameter data byte |
Mit der Nutzung von Hardware-TWI erfolgt der Empfang im Slave über die Auswertung der TWI-Register wie in [3] beschrieben.
Der Gesamtablauf sieht dann so aus:
Abb. 2.1: Programmablauf in Master und Slave.
Ein Master Demo- und das Slave-Programm sind im Download zu finden.
Die Pixel-Rechnerei bei der Ausrichtung von Texten auf dem Display erleichtert ein kleines Excel-Sheet im Download.
«1 Konzept | TOP | »3 Erweiterte I2C-Kopplung mit Touchscreen |