Mcufriend LCD TFT shield con ILI9325: Test librerie

An English version of this post is HERE! Updated with link to a solution for bitmap colours.

Articolo aggiornato con il link al post sulla soluzione del problema dei bitmap con colori sballati.

Aggiunta l’ottima libreria di David Prentice.

Ho comprato recentemente uno shield con LCD TFT su Ebay, questo:

Alcune caratteristiche dichiarate erano:

  • 4-wire resistive touchscreen
  •  spfd5408 controller with built in video RAM buffer
  • 8 bit digital interface, plus 4 control lines

Lo schermo che mi è arrivato è però diverso

E’ evidentemente diverso. La scritta ili in basso a destra e la stampa 9325 a sinistra inducono a credere che il controllore sia un ILI9325 invece dell’SPFD5408.

Il sito mcufriend è giù da mesi, forse qualche anno. E’ presente su Archive.org ma i driver non sono stati archiviati.

Sono qunindi andato su questo sito http://misc.ws/2015/01/24/lcd-touch-screen-information/ da dove ho scaricato un programma di test, LCD_ID_Reader Version 1.2 che ho scaricato e provato usando un Arduino UNO R3 e l’IDE 1.6.5. Ho così avuto conferma che il controllore è un ILI9325 e visualizzato una schermata tutta rossa che dovrebbe significare che la libreria di Justin, l’autore del post, dovrebbe funzionare. E così è stato con l’eccezione della visualizzazione delle immagini bitmap. Io ho ottenuto questo

I colori sono sballati. Da esperimenti fatti sembra che ciò sia dovuto a qualche registro non configurato correttamente perché i colori Rosso Verde e Blu puri vengono visualizzati correttamente. (Edit: 08/09/2015 soluzione qui.)

La libreria Adafruit per questi schermi ad interfaccia parallela identifica correttamente lo schermo ma non visualizza nulla, ottengo il classico schermo bianco.

Cercando sul forum forum.arduino.cc ho trovato questo post www.mcufriend.com working in arduino uno and arduino mega scritto da buhosoft il quale pubblica una libreria Adafruit modificata. Tale libreria funziona solo che occupa il doppio dello spazio di quella originale Adafruit e l’esempio che visualizza immagini bmp su una UNO non ci entra.

Allora ho eliminato da tale libreria tutta la roba che non riguardasse l’ILI9325 ottenendo che l’unica differenza rispetto alla libreria originale Adafruit erano alcune righe nella routine di reset nel file cpp della libreria.

Le righe originali

*******************ORIGINAL ADAFRUIT******************

#ifdef USE_ADAFRUIT_SHIELD_PINOUT

 digitalWrite(5, LOW);

 delay(2);

 digitalWrite(5, HIGH);

#else

 if(_reset) {

 /*

   digitalWrite(_reset, LOW);

   delay(2);

   digitalWrite(_reset, HIGH);

   */

   digitalWrite(_reset, HIGH);

   delay(50);

   digitalWrite(_reset, LOW);

   delay(100);

   digitalWrite(_reset, HIGH);

   delay(50);

CS_ACTIVE;

RD_ACTIVE;

WR_ACTIVE;

delay(10);

 }

#endif

Vanno sostituite con queste

*****************MODIFIED BUHOSOFT*******************

#ifdef USE_ADAFRUIT_SHIELD_PINOUT

 digitalWrite(5, LOW);

 delay(2);

 digitalWrite(5, HIGH);

#else

 if (_reset) {

   digitalWrite(_reset, LOW);

   delay(2);

   digitalWrite(_reset, HIGH);

 }

#endif

Effettuando questa modifica alla libreria Adafruit funziona tutto tranne daccapo la visualizzazione dei bitmap.

Ho quindi provato la libreria di Smoke and Wires. http://www.smokeandwires.co.nz che si trova su GitHub https://github.com/Smoke-And-Wires/TFT-Shield-Example-Code. Funziona ma ho sempre il problema dei bitmap.

Ho poi provato la libreria di samuraijap. Funziona ma con errori, le immagini e i disegni appaiono nel posto sbagliato come se l’indirizzamento della memoria fosse errato.

Ho quindi provato la libreria di ruelj2. Anche questa funziona ma durante la scrittura dei dati compaiono delle righe bianche sullo schermo che poi scompaiono cessata la comunicazione.

L’altra libreria provata è stata quella di goltermc che ha funzionato.

Aggiungo la libreria di David Prentice
http://forum.arduino.cc/index.php?topic=286790.msg2477797#msg2477797
Ho eseguito il test solo con l’esempio graphictest_kbv ma ha funzionato perfettamente.
Quelle provate ma che non hanno funzionato sono:

  • Libreria di andreword
  • Libreria di JoaoLopes
  • Libreria di acharis
  • Libreria di SeedStudio, una vecchia versione per SPFD5408A che sembra essere compatibile con l’ILI9325

Non ho provato la libreria UTFT in quanto i pin per la comunicazione parallela sono diversi, usa i primi 8 pin compresi quelli della seriale.

Molte librerie sono vecchie e per funzionare sull’IDE 1.6.5 bisogna aggiungere un const davanti a tutte le righe che iniziano per static unsigned char  font[] PROGMEM = { nel file glcdfont.c

Negli sketch di esempio per i bitmap va inoltre aggiunta la riga #include <SPI.h>

An English version of this post is HERE!

Advertisements

6 responses to “Mcufriend LCD TFT shield con ILI9325: Test librerie

  1. Pingback: McuFriend LCD TFT shield e ILI9325: problema Bitmap con colori scorretti risolto. | zoomxtech

  2. Disu September 27, 2015 at 10:58 pm

    Ciao, bell’articolo innanzitutto.
    Ho anch’io uno shield LCD ma in tutte le prove che ho fatto mi è sempre comparsa solo e soltanto la schermata bianca sul display.

    Provando con il comando tft.readID() a leggere il driver mi restituisce il codice C0C0.
    Con la libreria AndersMmgLcd trovata in giro (credo differisca per alcuni ritardi in fase di reset) sono riuscito a capire che il driver è lo 0x9341…però gli esempi trovati in giro mi danno comunque una schermata bianca (tra cui ad esempio quello di goltermc).

    Hai idee su come correggere la cosa?
    Ho provato anche a definire la costante USE_ADAFRUIT_SHIELD_PINOUT uguale a 1 ma non è cambiato niente.

    Like

    • zoomxx September 28, 2015 at 1:41 pm

      Grazie!
      Purtroppo non ho un display con ILI9341 e comunicazione parallela per cui non saprei come effettuare test. Io ne ho uno ma con comunicazione SPI che ancora non ho mai usato con Arduino, solamente con i micro STM32 che vanno a 3.3v
      Le tue ricerche hanno già trovato una delle due risposte che conosco, quella del ritardo, che ho trovato su GitHub
      https://github.com/adafruit/TFTLCD-Library/issues/18
      L’altra parla di comunicazione difettosa, tipicamente una saldatura fredda, l’ho letta sul forum Adafruit e sul forum di Arduino dove un utente, ripristinando la saldatura difettosa, trovava un ID0x9341.
      Purtroppo la libreria UTFT, come ho scritto, utilizza una piedinatura differente.
      Dovresti provare a cercare sia sul forum Arduino che su GitHub. Eventualmente posta sul forum Arduino cercando di mettere più informazioni possibili, ad esempio una foto del retro dello shield come ho fatto io.
      Riguardo la costante USE_ADAFRUIT_SHIELD_PINOUT devo indagare ulteriormente. Io ricordo di averla commentata ma lo sketch mi stampava lo stesso il messaggio che stavo usando lo Shield Adafruit per cui, tempo permettendo, dovrei sperimentarci sopra.

      Like

      • Disu September 29, 2015 at 7:53 am

        Ciao e grazie innanzitutto della risposta!

        Ho trovato la mia soluzione. Innanzitutto anticipo che non sto usando Arduino ma un R3 UNO.
        La scheda insieme al display li ho comprati da BangGood.

        La soluzione è riportata qui: http://forum.banggood.com/forum-topic-95414.html
        Seguendo solamente il primo commento mi funzionava il display ma non il touch.
        Seguendo anche il secondo commento postato funziona il touch e poi viene riportato il codice per invertire i valori di ingresso del touch (che altrimenti erano sballati).
        Spero sia utile!

        Liked by 1 person

  3. zoomxx September 29, 2015 at 8:27 am

    Forse a me non servirà ma magari servirà a qualcun altro. Grazie!
    La R3 Uno è una scheda Arduino a tutti gli effetti. Da Banggood hai preso scheda e schermo assieme. Magari non è una Arduino/Genuino originale, ma una compatibile che fa uso del chip e dei driver CH341 come convertitore USB-Seriale.

    Like

  4. Disu September 29, 2015 at 8:59 am

    In effetti ancora non avevo capito se fosse una scheda Arduino oppure no. Ho visto che anch’essa è made in Italy ma c’è scritto solo R3 UNO e non Arduino (viene solo descritta come “compatibile con i dispositivi Arduino”)

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: