Display rotondo GC9A01

Salve a tutti , qualche tempo fa ho comprato un display 1.28 TFT SPI 240*240 basato sul GC9A01A con slot per scheda microSD.
Il display "dovrebbe" comunicare in SPI , però, mentre nel connettore di comunicazione della Card sono indicati MOSI-MISO-SCK -CD-CS, nel connettore del display sono indicati SCK-SDA-DC-RESET-CS . Questa cosa mi fa un poco confusione , qualcuno potrebbe aiutarmi a capire ?
1.28TFT圆.pdf (52.1 KB)
Grazie

1 Like

Ti allego il datasheet di quel controller, così capisci tutti i vari segnali: GC9A01A.pdf (3.3 MB) :wink:

Comunque, per l'utilizzo, ti conisglio l'uso della libreria di Waveshare che trovi QUI ... trovi cartelle per varie piattaforme (tra cui Arduino) e per vari display, tra cui il 1.28".

Guglielmo

Grazie Guglielmo
Adesso almeno qualcosa si vede ,ho notato che i colori sono "smorti" pochissima differenza tra il nero e il blu . Ho impostato la retroilluminazione al massimo , ma niente da fare.
Potrebbe essere che un Nano faccia fatica a gestirlo ?
Grazie

NO, è la qualità del display.

Guglielmo

EDIT: Potrebbe essere anche qualche parametro a livello di driver, ma non mi azzarderei a metterci le mani ... :roll_eyes:

Ho notato che quando carico un nuovo progetto il display freeza e i colori sono molto brillanti.
Forse non significa nulla, però se in fase di programmazione del nano i colori diventano brillanti e invece con il programma in esecuzione no, non potrebbe essere un problema di alimentazione ?
Grazie

Perché cosa cambia nell'alimentazione quando carichi il codice e quando lo esegui? Usi una configurazione diversa?

Sicuro che non c'è qualche impostazione relativa al "contrasto" dell'immagine? Ti sei studiato bene il datasheet?

Guglielmo

Teoricamente non c'è niente di differente nella configurazione tra quando carico e quando eseguo il sw, collegato al nano c'è solo il display e alimento sempre da USB.
Ho letto il datasheet ma cercavo altre cose, adesso provo a vedere di nuovo.
Grazie

Non conosco nel dettaglio le librerie in questione però a me è capitato con il framework grafico LGVL.

Progetto compilato in ambiente Arduino (libreria TFT_eSPI): colori slavati e poco vividi.
Progetto compilato con ESP-IDF: colori brillanti e con buon contrasto.

Mi ero ripromesso di cercare di capire il perché, ma poi in realtà mi è passato di mente e non ci ho più guardato.

Evidentemente quella libreria sbaglia i conti!

Come ho scritto ... probabilmente c'è qualche parametro da ritoccare nel driver ... ma occorre sapere bene dove mettere le mani ... :roll_eyes:

Guglielmo

... in effetti forse ben più di qualcuno :crazy_face:

Se si legge il datasheet, per la parte di gestione colore, ha un'infinità di impostazioni tra cui quattro possibili configurazioni di correzione Gamma (da pag. 174 a pag. 181) ed un'infinità di altre impostazioni.

Del resto, basta dara un'occhiata ai sorgenti ... questa la funzione di inizializzazione del display della libreria

void LCD_Init(void)
{
  LCD_Reset();

  //************* Start Initial Sequence **********// 
 	LCD_WriteReg(0xEF);
	LCD_WriteReg(0xEB);
	LCD_WriteData_Byte(0x14); 
	
  LCD_WriteReg(0xFE);			 
	LCD_WriteReg(0xEF); 

	LCD_WriteReg(0xEB);	
	LCD_WriteData_Byte(0x14); 

	LCD_WriteReg(0x84);			
	LCD_WriteData_Byte(0x40); 

	LCD_WriteReg(0x85);			
	LCD_WriteData_Byte(0xFF); 

	LCD_WriteReg(0x86);			
	LCD_WriteData_Byte(0xFF); 

	LCD_WriteReg(0x87);			
	LCD_WriteData_Byte(0xFF);

	LCD_WriteReg(0x88);			
	LCD_WriteData_Byte(0x0A);

	LCD_WriteReg(0x89);			
	LCD_WriteData_Byte(0x21); 

	LCD_WriteReg(0x8A);			
	LCD_WriteData_Byte(0x00); 

	LCD_WriteReg(0x8B);			
	LCD_WriteData_Byte(0x80); 

	LCD_WriteReg(0x8C);			
	LCD_WriteData_Byte(0x01); 

	LCD_WriteReg(0x8D);			
	LCD_WriteData_Byte(0x01); 

	LCD_WriteReg(0x8E);			
	LCD_WriteData_Byte(0xFF); 

	LCD_WriteReg(0x8F);			
	LCD_WriteData_Byte(0xFF); 


	LCD_WriteReg(0xB6);
	LCD_WriteData_Byte(0x00);
	LCD_WriteData_Byte(0x20);

	LCD_WriteReg(0x36);
	LCD_WriteData_Byte(0x08);//璁剧疆涓虹珫灞�

	LCD_WriteReg(0x3A);			
	LCD_WriteData_Byte(0x05); 


	LCD_WriteReg(0x90);			
	LCD_WriteData_Byte(0x08);
	LCD_WriteData_Byte(0x08);
	LCD_WriteData_Byte(0x08);
	LCD_WriteData_Byte(0x08); 

	LCD_WriteReg(0xBD);			
	LCD_WriteData_Byte(0x06);
	
	LCD_WriteReg(0xBC);			
	LCD_WriteData_Byte(0x00);	

	LCD_WriteReg(0xFF);			
	LCD_WriteData_Byte(0x60);
	LCD_WriteData_Byte(0x01);
	LCD_WriteData_Byte(0x04);

	LCD_WriteReg(0xC3);			
	LCD_WriteData_Byte(0x13);
	LCD_WriteReg(0xC4);			
	LCD_WriteData_Byte(0x13);

	LCD_WriteReg(0xC9);			
	LCD_WriteData_Byte(0x22);

	LCD_WriteReg(0xBE);			
	LCD_WriteData_Byte(0x11); 

	LCD_WriteReg(0xE1);			
	LCD_WriteData_Byte(0x10);
	LCD_WriteData_Byte(0x0E);

	LCD_WriteReg(0xDF);			
	LCD_WriteData_Byte(0x21);
	LCD_WriteData_Byte(0x0c);
	LCD_WriteData_Byte(0x02);

	LCD_WriteReg(0xF0);   
	LCD_WriteData_Byte(0x45);
	LCD_WriteData_Byte(0x09);
	LCD_WriteData_Byte(0x08);
	LCD_WriteData_Byte(0x08);
	LCD_WriteData_Byte(0x26);
 	LCD_WriteData_Byte(0x2A);

 	LCD_WriteReg(0xF1);    
 	LCD_WriteData_Byte(0x43);
 	LCD_WriteData_Byte(0x70);
 	LCD_WriteData_Byte(0x72);
 	LCD_WriteData_Byte(0x36);
 	LCD_WriteData_Byte(0x37);  
 	LCD_WriteData_Byte(0x6F);


 	LCD_WriteReg(0xF2);   
 	LCD_WriteData_Byte(0x45);
 	LCD_WriteData_Byte(0x09);
 	LCD_WriteData_Byte(0x08);
 	LCD_WriteData_Byte(0x08);
 	LCD_WriteData_Byte(0x26);
 	LCD_WriteData_Byte(0x2A);

 	LCD_WriteReg(0xF3);   
 	LCD_WriteData_Byte(0x43);
 	LCD_WriteData_Byte(0x70);
 	LCD_WriteData_Byte(0x72);
 	LCD_WriteData_Byte(0x36);
 	LCD_WriteData_Byte(0x37); 
 	LCD_WriteData_Byte(0x6F);

	LCD_WriteReg(0xED);	
	LCD_WriteData_Byte(0x1B); 
	LCD_WriteData_Byte(0x0B); 

	LCD_WriteReg(0xAE);			
	LCD_WriteData_Byte(0x77);
	
	LCD_WriteReg(0xCD);			
	LCD_WriteData_Byte(0x63);		


	LCD_WriteReg(0x70);			
	LCD_WriteData_Byte(0x07);
	LCD_WriteData_Byte(0x07);
	LCD_WriteData_Byte(0x04);
	LCD_WriteData_Byte(0x0E); 
	LCD_WriteData_Byte(0x0F); 
	LCD_WriteData_Byte(0x09);
	LCD_WriteData_Byte(0x07);
	LCD_WriteData_Byte(0x08);
	LCD_WriteData_Byte(0x03);

	LCD_WriteReg(0xE8);			
	LCD_WriteData_Byte(0x34);

	LCD_WriteReg(0x62);			
	LCD_WriteData_Byte(0x18);
	LCD_WriteData_Byte(0x0D);
	LCD_WriteData_Byte(0x71);
	LCD_WriteData_Byte(0xED);
	LCD_WriteData_Byte(0x70); 
	LCD_WriteData_Byte(0x70);
	LCD_WriteData_Byte(0x18);
	LCD_WriteData_Byte(0x0F);
	LCD_WriteData_Byte(0x71);
	LCD_WriteData_Byte(0xEF);
	LCD_WriteData_Byte(0x70); 
	LCD_WriteData_Byte(0x70);

	LCD_WriteReg(0x63);			
	LCD_WriteData_Byte(0x18);
	LCD_WriteData_Byte(0x11);
	LCD_WriteData_Byte(0x71);
	LCD_WriteData_Byte(0xF1);
	LCD_WriteData_Byte(0x70); 
	LCD_WriteData_Byte(0x70);
	LCD_WriteData_Byte(0x18);
	LCD_WriteData_Byte(0x13);
	LCD_WriteData_Byte(0x71);
	LCD_WriteData_Byte(0xF3);
	LCD_WriteData_Byte(0x70); 
	LCD_WriteData_Byte(0x70);

	LCD_WriteReg(0x64);			
	LCD_WriteData_Byte(0x28);
	LCD_WriteData_Byte(0x29);
	LCD_WriteData_Byte(0xF1);
	LCD_WriteData_Byte(0x01);
	LCD_WriteData_Byte(0xF1);
	LCD_WriteData_Byte(0x00);
	LCD_WriteData_Byte(0x07);

	LCD_WriteReg(0x66);			
	LCD_WriteData_Byte(0x3C);
	LCD_WriteData_Byte(0x00);
	LCD_WriteData_Byte(0xCD);
	LCD_WriteData_Byte(0x67);
	LCD_WriteData_Byte(0x45);
	LCD_WriteData_Byte(0x45);
	LCD_WriteData_Byte(0x10);
	LCD_WriteData_Byte(0x00);
	LCD_WriteData_Byte(0x00);
	LCD_WriteData_Byte(0x00);

	LCD_WriteReg(0x67);			
	LCD_WriteData_Byte(0x00);
	LCD_WriteData_Byte(0x3C);
	LCD_WriteData_Byte(0x00);
	LCD_WriteData_Byte(0x00);
	LCD_WriteData_Byte(0x00);
	LCD_WriteData_Byte(0x01);
	LCD_WriteData_Byte(0x54);
	LCD_WriteData_Byte(0x10);
	LCD_WriteData_Byte(0x32);
	LCD_WriteData_Byte(0x98);

	LCD_WriteReg(0x74);			
	LCD_WriteData_Byte(0x10);	
	LCD_WriteData_Byte(0x85);	
	LCD_WriteData_Byte(0x80);
	LCD_WriteData_Byte(0x00); 
	LCD_WriteData_Byte(0x00); 
	LCD_WriteData_Byte(0x4E);
	LCD_WriteData_Byte(0x00);					
	
    LCD_WriteReg(0x98);			
	LCD_WriteData_Byte(0x3e);
	LCD_WriteData_Byte(0x07);

	LCD_WriteReg(0x35);	
	LCD_WriteReg(0x21);

	LCD_WriteReg(0x11);
	DEV_Delay_ms(120);
	LCD_WriteReg(0x29);
	DEV_Delay_ms(20);
  /*************************/
} 

Del resto credo che Waveshare sia il produttore originale e quindi ... dovrebbero essere quelli che lo conoscono meglio ... :roll_eyes:

Guglielmo

@bernie67: Altrimenti potresti provare ad utilizzare QUESTA altra libreria che supporta anche essa il chip GC9A01A ... come fa vedere:

Guglielmo

Buongiorno
1)Ho provato la libreria suggerita da Guglielmo , purtroppo non mi funziona , in realtà l'avevo già provata ma mi ero dimenticato ....
2)Riguardando il datasheet ho visto che a pagina 89 capitolo 5.10.3 parla del Brightness e mi è venuto un dubbio , non è che vuole un PWM sulla retroilluminazione per regolare la luminosità ? Nel programma che utilizzo adesso il pin è configurato come digitaloutput , adesso provo a configurarlo come analogoutput e poi vi faccio sapere .
Grazie

In che senso? Ti ho anche messo un video Youtube che fa vedere che FUNZIONA ... quindi?

Guglielmo

Il video su Youtube fa vedere un display diverso dal mio che funziona.
Sicuramente basato sullo stesso driver , ma potrebbe essere che il mio è stato configurato in maniera diversa ? E magari dei registri che la libreria indicata non va a scrivere ?
Altro dubbio , nel video non usa un arduino o sbaglio ?
Per dovere di cronaca , usare il PWM sulla retroilluminazione non ha portato risultati.
Grazie

NO, il controller è quello e cambia solo la posizione dei pin ed i pin che collega ... nel video usa un ESP32, ma la cosa è indifferente.

Ovvio che ti devi andare a vede nell'esempio della libreria, per quel display, i pin che usa che NON è detto vengano assegati agli stessi pin su Arduino (occhio che su ESP32 si indica direttamente il GPIO e non il pin Arduino).

Guglielmo

Nel programma indica che PIN usa in base al processore che si usa. Ho collegato tutto come specificato nel programma, però il risultato è schermo nero.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.