Controller ILI9320

Sezione dedicata all'Hardware con particolare riferimento all'elettronica digitale, analogica e di potenza. Interfacce, periferiche, bus seriali e paralleli...

Controller ILI9320

Postby Leonardo » 25 Oct 2013, 21:28

Salve a tutti,

Sto utilizzando tramite XMega il controller ILI9320 http://mbed.org/media/uploads/frankvnk/ili9320ds_v0.51.pdf collegato con SPI ad un display LCD con risoluzione 320x240. Qualcuno lo ha mai utilizzato?

Riesco a scrivere correttamente nella memoria grafica GRAM del controller, l'immagine viene aggiornata immediatamente dopo la scrittura di ogni pixel con un effetto scorrimento visto il basso frame-rate dovuto all'interfaccia seriale.

Sapete se è possibile "bloccare" il refresh video e aggiornare in un colpo solo l'immagine una volta ultimata la scrittura del frame in memoria? Sul datasheet purtroppo non ho trovato nulla e non posso utilizzare altre interfacce più veloci.

Grazie
Ciao
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Controller ILI9320

Postby Leonardo » 26 Oct 2013, 10:39

Per spiegarmi meglio ecco il codice che ho sviluppato (progetto Atmel Studio): http://www.atomwave.com/FPGA/HY28A.zip

In pratica ho realizzato una libreria per il controller ili9320 nei file ili9320.c, ili9320.h, ili9320_regs.h ed conf_ili9320.h

Nel main sostanzialmente c'è il seguente codice:

Code: Select all
ili9320_init();         
   ili9320_set_cursor(0, 0);
   for (int x=0;x<240;x++)
   {      
      for(int y=0;y<320;y++)
      {         
         ili9320_write_gram(ILI9320_GREEN);
      }      
   }         
    while(true)
    {   
      ili9320_clear_screen(ILI9320_RED);
      ili9320_clear_screen(ILI9320_GREEN);
      ili9320_clear_screen(ILI9320_BLUE);                                          
    }


Quello che voglio ottenere è una schermata verde iniziale seguita dal susseguirsi veloce di schermate rosse/verdi/blu senza disegnare videate incomplete (es. mezze rosse mezze verdi)

Ecco qualche secondo di filmato del problema: http://www.atomwave.com/FPGA/ili9320.mp4 dove è possibile notare che la memoria GRAM viene aggiornata mano a mano che vengono inviati i pixel e non a frame inviato.

NOTA: La prima schermata verde è giustamente più lenta nel disegno in quanto utilizza un metodo diverso per l'invio dei dati

Per quanto riguarda la sequenza di inizializzazione ho seguito l'application notes del controller http://www.densitron.com/uploadedFiles/Displays/Support/ILI9320AN_V0.92.pdf assieme al datasheet

Grazie
Ciao
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Controller ILI9320

Postby deluca » 26 Oct 2013, 11:45

Non so se riuscirai ad aggirare il prb.
Secondo me per avere una evidente miglioria in termini di frame/sec devi almeno passare alla interfaccia parallela minimale a 8 bit.

Occorrono 13 connessioni ....
io utilizzo questo tipo di interfaccia con l'atxmega128a1
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Controller ILI9320

Postby Leonardo » 26 Oct 2013, 13:36

Il rapporto frame/sec va anche bene (anche se aumentando i frame/sec il problema giustamente si riduce) però evidentemente il controller non ha un buffer dove memorizzare il frame senza visualizzarlo immediatamente durante il riempimento o comunque con la sola interfaccia SPI non permette di fare questa cosa. Peccato.

Lo schermo è su un PCB che offre solamente trami pin header l'interfaccia SPI e per il momento tengo le cose così, per semplici applicazioni può comunque andare bene. Eventualmente dissaldo lo schermo e creo un PCB personalizzato con interfaccia parallela se si presenta la necessità.

Grazie
Ciao
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Controller ILI9320

Postby zaxxon » 26 Oct 2013, 17:08

Essendo la scrittura via SPI sicuramente più lenta rispetto a quella di refresh del display, il momento migliore in cui iniziare a scrivere sarebbe quello in cui inizia il refresh, quindi subito dopo il VSync, ma immagino che via SPI anche questa strada sia preclusa.

Hai notato per caso miglioramenti o peggioramenti provando a pilotarlo come 320x240 invece che 240x320? Ricordo che sul Dingoo A320, che usa un controller della stessa casa, si risolveva il problema del tearing ruotando di 90 gradi la gestione del display.
zaxxon
 
Posts: 17
Joined: 07 Aug 2013, 16:10

Re: Controller ILI9320

Postby Leonardo » 26 Oct 2013, 19:55

Purtroppo non è disponibile l'interfaccia VSYNC sul PCB attuale. Ruotando lo schermo non ho notato miglioramenti. La cosa migliore sarebbe utilizzare l'interfaccia RGB a 18 bit per sfruttare inoltre tutti i colori disponibili, ma per il momento va bene anche così.

Grazie
Ciao
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Controller ILI9320

Postby js-bascom » 26 Oct 2013, 23:12

Se vuoi solamente cambiare il colore dello schermo velocemente esistono comandi che cambiano la seguenza dei tre colori fondamantali.

Dai un' occhiata qui, http://vimeo.com/user2128302/videos e aspetta finche lo schermo cambia dal blu al rosso velocemente.
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: Controller ILI9320

Postby Leonardo » 27 Oct 2013, 02:22

Il cambio colore dello schermo era solo un esempio semplice per illustrare il problema

Grazie
Ciao
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Controller ILI9320

Postby Leonardo » 27 Oct 2013, 22:19

Solo per dirvi che ho ottenuto qualche miglioramento visivo diminuendo il framerate

Code: Select all
ili9320_write_reg(ILI9320_PANEL_INTERFACE_CONTROL_1, 0x300);   // fosc/8


In pratica la minor frequenza di aggiornamento del display permette di evitare la visualizzazione di due schermate sovrapposte.
Non è una grande soluzione ma per semplici interfacce prevalentemente statiche è un miglioramento interessante.
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Controller ILI9320

Postby Leonardo » 28 Oct 2013, 22:51

Per ringraziarvi dei consigli voglio condividere con voi un semplice programma che ho realizzato in grado di convertire una classica immagine bitmap RGB24 nel codice C dell'immagine in GRAY8 (scala di grigi ad 8 bit) ed RGB565, operazione utile per chi lavora con display grafici e microcontrollori.

Image

http://www.atomwave.com/fpga/ImageConverterV0.1.zip (richiede .NET Framework 4.0)

Il programma è semplice e se qualcuno necessitasse dei sorgenti per personalizzarlo o aggiungere altri formati non si faccia scrupolo di contattarmi.

Leonardo
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma


Return to Elettronica Analogica, Digitale e di Potenza

Who is online

Users browsing this forum: No registered users and 3 guests

cron