2 Software

Gespeichert von DL6GL am Mo., 25.03.2019 - 11:56

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:

  1. Erster Balkenwert = Anfangswert, z.B. =0
  2. Bei allen Folgewerten für den Balken die Differenz neuer Wert - aktueller Wert berechnen.
  3. Ist die Differenz = 0 (kein Unterschied), gibt es nicht zu tun.
  4. Ist die Differenz > 0 (neuer Wert größer), den Differenzwert zum aktuellen Balken zufügen.
    Der Balken wird länger
  5. 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:

Master-Slave data flow

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.