Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Konfiguration 1,44" SPI display an Edzelf-Software
#1
da mich diese Aktion ein paar Abende beschäftigt hat möchte ich eine kurze Beschreibung liefern von der andere profitieren können.

Es wird dieses Display zugrunde gelegt. Bedienung ohne encoder und Vorwärtsschalten der playlist über einen Sensor.
Stand der Edzelf-Software: 11/2020

   

   

   

die Verpackung und der Aufdruck verraten uns u.a. schon:

- den Chip: ST7735
- die Auflösung: 128x128Px
- die Schnittstelle: SPI

dieses Display findet man auch abgebildet im Handbuch von Edzelf. Die Informationen sind allerdings etwas zerstreut und nicht immer eindeutig. Und erst das Studium eines youtube-Videos, auf das Edzelf hinweist, brachte am Schluss den Erfolg.

Kommen wir erst mal zur Verkabelung:

LED - 3,3V
SCK - GPIO18
SDA - GPIO23
A0 - GPIO2
RESET - EN
CS - GPIO15
GND - Ground
VCC - 3,3V

es gibt auch Hinweise für VCC = 5V und einen Spannungsregler auf der Platine. Der LED-Pin für das backlight darf aber trotzdem nur mit 3,3V betrieben werden oder kann auch über einen GPIO zum dunkeltasten geschaltet werden. Ohne Spannung am LED-Pin bleibt das Display dunkel!

Die Konfiguration der software:

Im Abschnitt Esp32_radio:

als Displaytyp wird BLUETFT deklariert. Alle anderen Displaytypen sind auszukommentieren.
An der Stelle bitte auch CH376 sowie SDCARD auskommentieren, sofern die hardware nicht vorhanden oder nicht bestückt ist.

Code:
//#define CH376                          // For CXH376 support (reading files from USB stick)
//#define SDCARD                         // For SD card support (reading files from SD card)
// Define (just one) type of display.  See documentation.
#define BLUETFT                        // Works also for RED TFT 128x160

im Abschnitt defaultprefs:

falls das Radio mit Sensorweiterschaltung betrieben werden soll:

Aktivieren des Sensors touch4:

Code:
touch_04 = uppreset = 1 //GPIO13

wegen Konflikt an GPIO13 Löschen der Zeile:

Code:
gpio_13 = downvolume = 2

bei nicht bestücktem encoder müssen dessen Pin deaktiviert werden, damit sie sich nicht verselbstständigen:

Code:
pin_ir = -1                                          # GPIO Pin number for IR receiver VS1838B
pin_enc_clk = -1                                     # GPIO Pin number for rotary encoder "CLK"
pin_enc_dt = -1                                      # GPIO Pin number for rotary encoder "DT"
pin_enc_sw = -1                                      # GPIO Pin number for rotary encoder "SW"

im Abschnitt bluetft.h:

hier wird INITR_144GREENTAB aktiviert:

Code:
//tft->initR ( INITR_GREENTAB ) ;                               // Init TFT interface
 //tft->initR ( INITR_REDTAB ) ;                                 // Init TFT interface
 //tft->initR ( INITR_BLACKTAB ) ;                                 // Init TFT interface
 tft->initR ( INITR_144GREENTAB ) ;                            // Init TFT interface
 //tft->initR ( INITR_MINI160x80 ) ;                             // Init TFT interface
 //tft->initR ( INITR_BLACKTAB ) ;                               // Init TFT interface (160x128)

falls das display gedreht werden soll wird hier die rotation eingestellt:

Zitat:#define dsp_setRotation()       tft->setRotation ( 3 )             // Use landscape format (3 for upside down)

an dieser Stelle wird die Auflösung angepasst:

Code:
#define dsp_getwidth()          128                                // Adjust to your display
#define dsp_getheight()         128                                // Get height of screen

es erwartet uns eine sehr schöne und informative Anzeige:

   
Gruß,
Jupp
-----------------------------
"Normal" ist auch nur eine Einstellung auf der Waschmaschine
(Whoopi Goldberg)
Zitieren
#2
Hallo Jupp,
danke für die vielen klärenden Informationen zum Thema TFT-Display und Edzelf-Software.
Da hast Du sicher ganz schön wuseln müssen!
Letztendlich aber zählt der Erfolg - also die Einbindung des Displays hast Du sehr gut gelöst.
Grüße aus Wassenberg,
Norbert.
Zitieren
#3
Danke, Jupp,
Ich habe ein 2,4“ SPI , werde morgen prüfen - Es sollte mit den gleichen Einstellungen funktionieren. Du hast die Hauptarbeit schon gemacht.
Gruß!
Ivan
Zitieren
#4
Hallo,
Der 2,4“ ILI9341 mit 240x320 läuft auch.
   
dafür bedarf man die gleiche PIN  - Belegung wie Jupp oben angibt,
und nur das ILI Display definieren, alle andere auskommentieren.

// Define (just one) type of display.  See documentation.
//#define BLUETFT                        // Works also for RED TFT 128x160
//#define OLED                         // 64x128 I2C OLED
//#define DUMMYTFT                     // Dummy display
//#define LCD1602I2C                   // LCD 1602 display with I2C backpack
//#define LCD2004I2C                   // LCD 2004 display with I2C backpack
#define ILI9341                      // ILI9341 240*320
//#define NEXTION                      // Nextion display. Uses UART 2 (pin 16 and 17)


Jetzt muss mir Jupp nur helfen wie man die Schriftgröße ändert. Big Grin
Gruß!
Ivan
Zitieren
#5
eine größere Schrift auf dem 2,4" Display darzustellen erwies sich als recht kompliziert und es ist mir auch noch nicht in allen Punkten gelungen. Ich schildere mal wie weit ich damit gekommen bin.

das Aktivieren des Display hat Ivan ja schon beschrieben. Die Schrift ist nur leider nicht größer als bei den kleineren TFT. Das 2,4" ist zwar übersichtlicher, aber nicht besser ablesbar:

   

mit einem einfachen Parameter in der ESP32_radio kann man grundsätzlich die Schriftgröße ändern:

Code:
dsp_setTextSize ( 1 ) ;                            // Small character font

ein Wert von 2:

   

und von 3:

   

jetzt fällt erst mal auf daß die Uhrzeit aus dem Bild gerutscht ist. Das kann man ausgleichen mit dem Parameter TIMEPOS. Dieser ist negativ, weil vom Ende der Zeile ausgehend die Startposition der Uhrzeit abgezogen wird.

Code:
// Position (column) of time in topline relative to end
#define TIMEPOS -52

ich ändere auf -160

Ich ziehe die Ziffern der Uhrzeit weiter auseinander in der ILI9341.h mit der Einstellung:

Code:
pos += 18 ;                                   // Next position

(Orginalwert: 6)

   

für 1 Sekunde passt es jetzt. Die retangles, mit denen die Ziffern vor dem Neuschreiben gelöscht werden, haben auch ihre Positionen verschoben.

das korrigiere ich in der ILI9341.h:

Code:
dsp_fillRect ( pos, 0, 16, 24, BLACK ) ;     // Clear the space for new character

(Originalwerte: 0, 6, 8)

damit ist die Uhrzeit schon mal ansehnlich:

   

jetzt kommen wir zu den devidern (Balken).

Der unterste Balken ist die Lautstärkeanzeige. Den mache ich breiter in der ILI9341.h, indem ich an 4 Stellen die 2 durch eine 8 ersetze:

Code:
dsp_fillRect ( 0, dsp_getheight() - 8,
                    len, 8, RED ) ;                    // Paint red part
     dsp_fillRect ( len, dsp_getheight() - 8,
                    dsp_getwidth() - len, 8, GREEN ) ; // Paint green part

die oberen beiden divider bekomme ich nicht verändert. Wenigstens kann ich sie verschwinden lassen, indem ich hier zwischen width und green statt der 1 eine 0 einsetze (ESP32_radio):

Code:
dsp_fillRect ( 0, p->y - 4, width, 1, GREEN ) ;      // Yes, show divider above text

   

es sieht schon fast brauchbar aus. Die Display-Segmente müssten noch auseinandergezogen werden, und weitere Probleme warten noch. Betätigt man den encoder zum Senderwechsel überschreiben dessen Meldungen die Senderanzeige, und löschen sich auch nicht. Das ist jetzt der Punkt wo ich im Momnet nicht weiterkomme. Solange man nicht mit einem encoder arbeitet kann man mit der Anzeige einigermassen leben, mehr aber auch nicht.
Gruß,
Jupp
-----------------------------
"Normal" ist auch nur eine Einstellung auf der Waschmaschine
(Whoopi Goldberg)
Zitieren
#6
Hallo, Jupp,
das ist erst ein Schritt voran, werde ich heute Abend gleich testen. Natürlich hoffe ich, dass Du bald eine Komplette Lösung findest, wonach auch die Striche nicht weg sind und der Encoder nicht derart die Anzeige beeinflusst, wobei die Striche natürlich nur eine rein optische Sache sind und darauf man verzichten kann.
Gruß!
Ivan
Zitieren
#7
Hallo Jupp und Ivan,
wenn ich es richtig lese

Code:
dsp_fillRect ( 0, p->y - 4, width, 1, GREEN ) ;      // Yes, show divider above text

dann wird die Funktion dsp_fillRect mit folgenden Parametern aufgerufen:
dsp_fillRect ( Koordinate x, Koordinate y, Breite, Höhe, Farbe) ;

Soll heißen, zeichne ein Rechteck vom oberen Eckpunkt links x,y mit der Breite width und der Höhe 1 in der Farbe GREEN.
Das erklärt, warum bei Höhe "0" kein Rechteck gezeichnet wird....

Die Funktion ist ein Bestandteil der komplexen Funktion display_info.
Sie wird folgendermaßen kommentiert:
//**************************************************************************************************
//                                      D I S P L A Y I N F O                                                                                *
//**************************************************************************************************
// Show a string on the LCD at a specified y-position (0..2) in a specified color.                              *
// The parameter is the index in tftdata[].                                                                                        *
//**************************************************************************************************

Wenn ich das richtig verstehe, dann kann die Linie nur an 3 verschiedenen y Positionen gezeichnet werden.
Diese Positionen sind durch ein für das verwendete Display spezifisches Datenfeld tftdata[] vorgegeben.

Das "Mal eben zu ändern" halte ich für nicht realistisch.

Ich könnte mir eine Zusatzfunktion vorstellen, die bei definierten Display-Typ(en) an zu klärenden Koordinaten
eine Linie in der jeweiligen Farbe zeichnet.
Grüße aus Wassenberg,
Norbert.
Zitieren
#8
jetzt passt alles. Keine Überschreibungen mehr, kein Überlauf, keine Zeichenfragmente mehr die sich nicht löschen.

   

auch die encoder-Meldungen machen keine Probleme mehr

   

Der Schlüssel lag in der Definition der Segmente, wie von Norbert angegeben (ILI9341.h):

Zitat:// Data to display.  There are TFTSECS sections
#define TFTSECS 4
scrseg_struct     tftdata[TFTSECS] =                        // Screen divided in 3 segments + 1 overlay
{                                                           // One text line is 8 pixels
 { false, WHITE,   0,  24, "" },                            // 1 top line
 { false, CYAN,   40,  96, "" },                            // 8 lines in the middle
 { false, YELLOW, 140, 96, "" },                            // 4 lines at the bottom
 { false, GREEN,  140, 96, "" }                             // 4 lines at the bottom for rotary encoder
} ;

achso .. der Ivan-Text wird in der ESP32_radio.ino eingetragen:

Zitat:tftset ( 0, "IVAN" ) ;                     // Set screen segment text top line
Gruß,
Jupp
-----------------------------
"Normal" ist auch nur eine Einstellung auf der Waschmaschine
(Whoopi Goldberg)
Zitieren
#9
Ja, Jupp,
Hast du prima beschrieben:  Ich wiederhole nur, Beschreibung findet man in Jupps Beitrag:
1. In Esp32_Radio.ino die  dsp_setTestSize  auf 3 setzten, für 2,4“ Display optimal.
2. In Esp32_Radio.ino die #defineTIMEPOS auf -160 setzen
3. Wer den Displaynamen ändern will ebenso in Esp32_Radio.ino die tftset(0, “NAME“) //Set screen segment text top line ändern.
Die restlichen Änderungen erfolgen in ILI9341.h, und zwar wie Jupp die oben detailliert beschrieben hat.

Bei mir hat es geklappt:
   
Danke auch an Norbert für den entscheidenden Hinweis Thumbs_up
Gruß!
Ivan
Zitieren
#10
Hallo Ivan,
schön zu lesen, dass jetzt auch Dein Display die Daten im korrekten Format anzeigt.

Ich möchte aber ausdrücklich den Jupp loben, der mehrere Stunden lang akribisch
die Details ausgearbeitet und getestet hat.
Er besitzt den richtigen Biss und die Ausdauer, ein solches Projekt fertig zu stellen.
Es macht immer wieder Spaß, mit ihm zusammen zu arbeiten.
Grüße aus Wassenberg,
Norbert.
Zitieren
#11
Thumbs_up Ganz meine Meinung auch, Norbert.
Dazu kommt sein Geduld auch, denn ich nerve ihn mächtig.
Gruß!
Ivan
Zitieren


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Philips 22RR600 iRadio mit SPI-Display saarfranzose 6 462 21.09.2020, 12:14
Letzter Beitrag: navi
  Skull-Radio mit ESP32 und Edzelf-Software saarfranzose 20 1.987 17.06.2020, 10:18
Letzter Beitrag: saarfranzose
  Edzelf-Tuner ELPAS saarfranzose 0 466 15.06.2020, 17:30
Letzter Beitrag: saarfranzose
  eInk Display an iRadio Neuling 2 554 15.05.2020, 00:06
Letzter Beitrag: Bernhard45
  Externer RDS-Decoder mit LCD-Display HolgerK 0 519 19.11.2018, 21:20
Letzter Beitrag: HolgerK

Gehe zu: