Schwierigkeiten beim Ansteuern eines ILI9486 TFT-Displays mit ESP8266 Board

Hallo liebe Community,

ich hoffe, es ist in Ordnung, mein Problem hier anzusprechen. Ich stehe vor einer Herausforderung beim Ansteuern eines ILI9486 TFT-Displays mit einem Arduino Uno WiFi Klon für ein Geburtstagsgeschenk für einen Freund, der hobbymäßig im Forex Trading tätig ist. Der Geburtstag steht am 26.01. an, und ich versuche, einen Preistracker zu basteln.

Das verwendete Display ist dieses Modell in der ILI9486 For UNO Variante: Link zum Display Und hier ist der UNO WiFi Klon, den ich benutze: Link zum Arduino Uno WiFi Klon

Trotz verschiedener Bibliotheken und Beispielcodes scheint das Display nur die Hintergrundbeleuchtung anzuzeigen, ohne weitere Inhalte darzustellen. Es könnte sein, dass meine begrenzte Expertise das Problem verursacht, vielleicht habe ich mich auch etwas übernommen mit dem Projekt.

Aktuell experimentiere ich mit diesem Code: Link zum Code

Ich wäre sehr dankbar, wenn jemand aus der Community mir dabei helfen könnte, das Display korrekt anzusteuern oder andere Ansätze vorschlagen könnte, die ich ausprobieren könnte.

Vielen herzlichen Dank im Voraus für eure Unterstützung.

Mit freundlichen Grüßen, Louis

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Hallo,
es gibt keinen Arduino Uno Wifi Clone.
Dein Board ist auch kein Arduion und auch kein Uno.
Lediglich die Boardform ist dem Uno ähnlich, also noch nicht einmal ein Clone.

Jetzt zu deinem Problem: Was genau funktioniert nicht ?
Wie hast du das Display am Board angeschlossen ? Bitte zeige ein Schaltbild.
Und poste deinen Sketch hier direkt im Forum in Code-Tags, dann kann den auch jeder lesen.
Und poste einen Link zur verwendeten Display Library.

Hi HotSystems,

Das Display ist einfach ein Shield und somit einfach auf das Arduino Uno WiFi ähnliche Board gesteckt. Die "Verkabelung" sieht folgendermaßen aus.
TFT-3

Hier nochmal mein Code direkt im Forum:

/***********************************************************************************
*This program is a demo of clearing screen to display red,green,blue.
*This demo was made for LCD modules with 8bit or 16bit data port.
*This program don't need to rely on any libraries and Can run directly.

* File                : _9486uno.ino
* Hardware Environment: Arduino UNO
* Build Environment   : Arduino

*Set the pins to the correct ones for your development shield or breakout board.
*This demo use the BREAKOUT BOARD only and use these 8bit data lines to the LCD,
*pin usage as follow:
*                  LCD_CS  LCD_CD  LCD_WR  LCD_RD  LCD_RST  SD_SS  SD_DI  SD_DO  SD_SCK 
*     Arduino Uno    A3      A2      A1      A0      A4      10     11     12      13                                                     

*                  LCD_D0  LCD_D1  LCD_D2  LCD_D3  LCD_D4  LCD_D5  LCD_D6  LCD_D7  
*     Arduino Uno    8       9       2       3       4       5       6       7

*Remember to set the pins to suit your display module!
*
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, QD electronic SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
**********************************************************************************/

#define LCD_RD   A0
#define LCD_WR   A1     
#define LCD_RS   A2        
#define LCD_CS   A3       
#define LCD_REST A4

void Lcd_Writ_Bus(unsigned char d)
{
 PORTD = (PORTD & B00000011) | ((d) & B11111100); 
 PORTB = (PORTB & B11111100) | ((d) & B00000011); 
 *(portOutputRegister(digitalPinToPort(LCD_WR))) &=  ~digitalPinToBitMask(LCD_WR);
 *(portOutputRegister(digitalPinToPort(LCD_WR)))|=  digitalPinToBitMask(LCD_WR);
}


void Lcd_Write_Com(unsigned char VH)  
{   
  *(portOutputRegister(digitalPinToPort(LCD_RS))) &=  ~digitalPinToBitMask(LCD_RS);//LCD_RS=0;
  Lcd_Writ_Bus(VH);
}

void Lcd_Write_Data(unsigned char VH)
{
  *(portOutputRegister(digitalPinToPort(LCD_RS)))|=  digitalPinToBitMask(LCD_RS);//LCD_RS=1;
  Lcd_Writ_Bus(VH);
}

void Lcd_Write_Com_Data(unsigned char com,unsigned char dat)
{
  Lcd_Write_Com(com);
  Lcd_Write_Data(dat);
}

void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
        Lcd_Write_Com(0x2a);
	Lcd_Write_Data(x1>>8);
	Lcd_Write_Data(x1);
	Lcd_Write_Data(x2>>8);
	Lcd_Write_Data(x2);
        Lcd_Write_Com(0x2b);
	Lcd_Write_Data(y1>>8);
	Lcd_Write_Data(y1);
	Lcd_Write_Data(y2>>8);
	Lcd_Write_Data(y2);
	Lcd_Write_Com(0x2c); 							 
}

void Lcd_Init(void)
{
  digitalWrite(LCD_REST,HIGH);
  delay(5); 
  digitalWrite(LCD_REST,LOW);
  delay(15);
  digitalWrite(LCD_REST,HIGH);
  delay(15);

  digitalWrite(LCD_CS,HIGH);
  digitalWrite(LCD_WR,HIGH);
  digitalWrite(LCD_CS,LOW);  //CS

    Lcd_Write_Com(0xF9);  
    Lcd_Write_Data(0x00); 
    Lcd_Write_Data(0x08);
    Lcd_Write_Com(0xC0);  
    Lcd_Write_Data(0x19); 
    Lcd_Write_Data(0x1A);  
    Lcd_Write_Com(0xC1);  
    Lcd_Write_Data(0x45); 
    Lcd_Write_Data(0X00); 
    Lcd_Write_Com(0xC2);  
    Lcd_Write_Data(0x33); 
    Lcd_Write_Com(0xC5);  
    Lcd_Write_Data(0x00); 
    Lcd_Write_Data(0x28); 
    Lcd_Write_Com(0xB1);  
    Lcd_Write_Data(0x90); 
    Lcd_Write_Data(0x11); 
    Lcd_Write_Com(0xB4);  
    Lcd_Write_Data(0x02); 
    Lcd_Write_Com(0xB6);  
    Lcd_Write_Data(0x00); 
    Lcd_Write_Data(0x42);
    Lcd_Write_Data(0x3B);
    Lcd_Write_Com(0xB7);  
    Lcd_Write_Data(0x07); 
    Lcd_Write_Com(0xE0); 
    Lcd_Write_Data(0x1F); 
    Lcd_Write_Data(0x25); 
    Lcd_Write_Data(0x22); 
    Lcd_Write_Data(0x0B); 
    Lcd_Write_Data(0x06); 
    Lcd_Write_Data(0x0A); 
    Lcd_Write_Data(0x4E); 
    Lcd_Write_Data(0xC6); 
    Lcd_Write_Data(0x39); 
    Lcd_Write_Data(0x00); 
    Lcd_Write_Data(0x00); 
    Lcd_Write_Data(0x00); 
    Lcd_Write_Data(0x00); 
    Lcd_Write_Data(0x00); 
    Lcd_Write_Data(0x00); 
    Lcd_Write_Com(0xE1); 
    Lcd_Write_Data(0x1F); 
    Lcd_Write_Data(0x3F); 
    Lcd_Write_Data(0x3F); 
    Lcd_Write_Data(0x0F); 
    Lcd_Write_Data(0x1F); 
    Lcd_Write_Data(0x0F); 
    Lcd_Write_Data(0x46); 
    Lcd_Write_Data(0x49); 
    Lcd_Write_Data(0x31); 
    Lcd_Write_Data(0x05); 
    Lcd_Write_Data(0x09); 
    Lcd_Write_Data(0x03); 
    Lcd_Write_Data(0x1C); 
    Lcd_Write_Data(0x1A); 
    Lcd_Write_Data(0x00);  
    Lcd_Write_Com(0xF1);   
    Lcd_Write_Data(0x36);   
    Lcd_Write_Data(0x04);
    Lcd_Write_Data(0x00);
    Lcd_Write_Data(0x3C);
    Lcd_Write_Data(0x0F);
    Lcd_Write_Data(0x0F);
    Lcd_Write_Data(0xA4);
    Lcd_Write_Data(0x02);
    Lcd_Write_Com(0xF2);   
    Lcd_Write_Data(0x18);   
    Lcd_Write_Data(0xA3);
    Lcd_Write_Data(0x12);
    Lcd_Write_Data(0x02);
    Lcd_Write_Data(0x32);
    Lcd_Write_Data(0x12);
    Lcd_Write_Data(0xFF);
    Lcd_Write_Data(0x32);
    Lcd_Write_Data(0x00);
    Lcd_Write_Com(0xF4);   
    Lcd_Write_Data(0x40);   
    Lcd_Write_Data(0x00);
    Lcd_Write_Data(0x08);
    Lcd_Write_Data(0x91);
    Lcd_Write_Data(0x04);     
    Lcd_Write_Com(0xF8);   
    Lcd_Write_Data(0x21);   
    Lcd_Write_Data(0x04);
    Lcd_Write_Com(0x36);   
    Lcd_Write_Data(0x48);   
    Lcd_Write_Com(0x3A);   
    Lcd_Write_Data(0x55);        
 
    Lcd_Write_Com(0x11);    //Exit Sleep 
    delay(120); 				
    Lcd_Write_Com(0x29);    //Display on 
}

void H_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c)                   
{	
  unsigned int i,j;
  Lcd_Write_Com(0x02c); //write_memory_start
  digitalWrite(LCD_RS,HIGH);
  digitalWrite(LCD_CS,LOW);
  l=l+x;
  Address_set(x,y,l,y);
  j=l*2;
  for(i=1;i<=j;i++)
  {
    Lcd_Write_Data(c);
  }
  digitalWrite(LCD_CS,HIGH);   
}

void V_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c)                   
{	
  unsigned int i,j;
  Lcd_Write_Com(0x02c); //write_memory_start
  digitalWrite(LCD_RS,HIGH);
  digitalWrite(LCD_CS,LOW);
  l=l+y;
  Address_set(x,y,x,l);
  j=l*2;
  for(i=1;i<=j;i++)
  { 
    Lcd_Write_Data(c);
  }
  digitalWrite(LCD_CS,HIGH);   
}

void Rect(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c)
{
  H_line(x  , y  , w, c);
  H_line(x  , y+h, w, c);
  V_line(x  , y  , h, c);
  V_line(x+w, y  , h, c);
}

void Rectf(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c)
{
  unsigned int i;
  for(i=0;i<h;i++)
  {
    H_line(x  , y  , w, c);
    H_line(x  , y+i, w, c);
  }
}
int RGB(int r,int g,int b)
{return r << 16 | g << 8 | b;
}
void LCD_Clear(unsigned int j)                   
{	
  unsigned int i,m;
 Address_set(0,0,320,480);
  //Lcd_Write_Com(0x02c); //write_memory_start
  //digitalWrite(LCD_RS,HIGH);
  digitalWrite(LCD_CS,LOW);


  for(i=0;i<320;i++)
    for(m=0;m<480;m++)
    {
      Lcd_Write_Data(j>>8);
      Lcd_Write_Data(j);

    }
  digitalWrite(LCD_CS,HIGH);   
}

void setup()
{
  for(int p=0;p<10;p++)
  {
    pinMode(p,OUTPUT);
  }
  pinMode(A0,OUTPUT);
  pinMode(A1,OUTPUT);
  pinMode(A2,OUTPUT);
  pinMode(A3,OUTPUT);
  pinMode(A4,OUTPUT);
  digitalWrite(A0, HIGH);
  digitalWrite(A1, HIGH);
  digitalWrite(A2, HIGH);
  digitalWrite(A3, HIGH);
  digitalWrite(A4, HIGH);
  Lcd_Init();
 //LCD_Clear(0xf800);
}

void loop()
{  
   LCD_Clear(0xf800);
   LCD_Clear(0x07E0);
   LCD_Clear(0x001F);
  /*   
  for(int i=0;i<1000;i++)
  {
    Rect(random(300),random(300),random(300),random(300),random(65535)); // rectangle at x, y, with, hight, color
  }*/
  
//  LCD_Clear(0xf800);
}

Die aktuelle Library an der ich mich versuche ist folgende: GitHub - Bodmer/TFT_eSPI: Arduino and PlatformIO IDE compatible TFT library optimised for the Raspberry Pi Pico (RP2040), STM32, ESP8266 and ESP32 that supports different driver chips

Vielen Dank für die Antwort!

Das wird def. nicht funktionieren, da du keinen Uno hast.
Wenn überhaupt, musst du das Display per Kabel einzeln verdrahten.

Da wird dir evtl. @fony helfen können. Soweit ich weiß, hat er damit Erfahrung.

Du hättest besser ein TFT-SPI nehmen sollen, das ist deutlich einfacher anzuschließen.

Und ändere bitte deinen Titel. Es ist kein Arduino und kein Uno, auch kein Clone.
Nenne es einfach ESP8266 Board

Achso und zum Klarstellen:
Das Display zeigt gar nichts an. Kein Flackern, keine einzelnen Pixel, nichts. Es fängt lediglich die Hintergrundbeleuchtung des Displays an zu leuchten.
LG Louis

Wie ich schrieb: Ein TFT mit SPI wäre für dich einfacher gewesen.
Dieses z.B.

Okay, danke dir!
Ja habe jetzt leider nunmal das obige hier.
Soll ich @fony per PN anschreiben oder wird er/sie vielleicht hier antworten?
LG Louis

Er wird sich hier melden. Mit @fony habe ich Ihn getriggert.

1 Like

Hallo :wink:
Was Für Display ist das jetzt der für den Mega(Ali Link), oder der gezeigter in#4?

Habe mir das angesehen, du willst das Display direkt ansteuern ohne Hilfe einer Bibliothek.
Wo her ist der Code, ist der für den ESP8266?

Beide Display sind 5V TFT mit Pegel Wandler drauf , den in #4 wurde nicht drauf auf den alla Uno tun, der macht dir den ESP kaputt.
Das Display wird nicht mit ESP8266 funktionieren man braucht 8 Data Pins + 4 Steuer Pins.
ok RST kann man mit RST klemmen also brauch man 11 Pins, ABER nicht alle PIN's am ESP können alles, dazu GPIO1 , GPIO2 sollten frei bleiben, egal auch wie habe ein 8Bit Display am ESP8266 nicht zum laufen gebracht, wegen den Beschränkungen was zeig die Tabelle, am ESP32 dagegen kein Problem mit mit der TFT_eSPI Bibliothek

Wen weitere Fragen, frag :wink:

In Post #4 hat @ottertyp doch geschrieben, dass er die TFT_eSPI verwendet.
Und ein anderes Display kommt nicht in Frage.

Wenn du kein anderes Display verwenden willst, dann musst du wohl auf einen Uno oder Mega umsteigen. Allerdings ein wechsel auf ein SPI-TFT sehe ich als bessere Lösung.

Wir wissen gar nicht welschen genau der TO hat, laut Link zu Ali ist das auch ein 8Bit nur für Anfänger komplizierter anschließen.
Auf keinen fall wird es am ESP8266 funktionieren, wegen zu wenig Pins.
Indem Code was wurde gezeigt fehlen Gama Einstellungen für RGB, also auch am Uno wurde meiner Meinung nicht funktionieren, und wen der sollte doch "starten" sind die Farben komplett verfälscht, oder nur Schwarz Weis.

Wie oben geschrieben wen man dem 5V gibt werden am CS, RS, WR 5V rausgehauen, das mag der ESP nicht so, wie du selber weist, damit der TFT am ESP32 funktioniert muss der LDO außerbetrieb genommen werden, dann gibt es keine Probleme.
OT Mein ESP32 C3 mit dem mini Display ist gestern angekommen, müssen nur die Stiftleisten verlötet werden.

1 Like

Mit dem TFT hatte ich mir das schon gedacht. Daher habe ich auch schon Tipps zu anderem TFT gegeben.

Das ging ja schnell. Ich hatte mir vor längerem auch noch ein zweites ESP32-C3 bestellt, das ist noch nicht hier. Allerdings ohne Display. :wink:
Ist auch nur Reserve, wenn ich schnell noch was anderes bauen muss.

Habe nicht genau auf der Seite nach Massen geschaut :wink:
Der Bist ist so klein wie Nano, auf dem Foto zu Vergleich

Und warum hast du diesen ESP32-C3 ohne seriellen Monitor bestellt ?

Ehrlich gesagt, damals nicht drüber nachgedacht was sollte aber kein Beinbruch sein :wink:
Wen der funktioniert auf aufhieb, wird noch nachbestellt, mal schauen, suche einen ESP32 mit 16MB Speicher, mir geht Letzte zeit der Flasch aus, alle was gefunden waren mir zu teuer, hat aber noch zeit.

Ich hatte mir die Classic Version (mit seriellem Monitor) extra bestellt, um darauf meine Programme zu zu schreiben und die dann anschließend (wenn fertig) auf den ESP32-C3 super mini zu flaschen.

Vielen Dank euch beiden!
Denke werde das Display wechseln.

Wie geschrieben Das Display wird funktionieren am einem ESP32, bleiben sogar ein paar Pins frei für andere Sachen, wen gewünscht schreibe dir Anleitung wie das zu machen ist, es geht einfacher als man denkt, und das Display findet Arbeit :wink:
Musst nur Foto der Rückseite machen, vor allem sind die 8Bit Displays am ESP32 viel schneller als auf dazu gekauften Uno R3 oder Mega.
wen du am ESP32 Interessiert bis hole kein beim Amaz. und gar nicht bei AZ.
Hier eine Seite aus DE zu vernünftigen Preisen, bei Ali sind die um hälfte günstiger nur warte zeit um 1 Mon.

1 Like