TFT 240x320 lentissimo

Buongiorno a tutti,

ho acquistato questo lcd https://www.amazon.it/gp/product/B01C3RDFN6/ref=oh_aui_search_detailpage?ie=UTF8&psc=1

che ho montato su una mega 2560.

Lo schermo funziona bene ma ha un refresh rate bassissimo.. Sarà sui 2-3 hz.

Sto usando la libreria adafruit tft e il graphicstest da questo come risultato

TFT LCD test
Using Adafruit 2.8" TFT Breakout Board Pinout
TFT size is 240x320
Found ILI9341 LCD driver
Benchmark Time (microseconds)
Screen fill 2133896
Text 670808
Lines 6944564
Horiz/Vert Lines 255416
Rectangles (outline) 186008
Rectangles (filled) 5879264
Circles (filled) 2256820
Circles (outline) 3028152
Triangles (outline) 2202892
Triangles (filled) 2878400
Rounded rects (outline) 1016440
Rounded rects (filled) 6804468
Done!

Esiste un modo per velocizzarlo un po via software?
O, se non fosse possibile, potreste consigliarmi un altro lcd ?

Grazie !

dieghe_1984:
Esiste un modo per velocizzarlo un po via software?
O, se non fosse possibile, potreste consigliarmi un altro lcd ?

Non è un problema di software o di display, un 8 bit più di tanto non può fare e aggiornare un display tft da 320x240 pixel richiede l'elaborazione di 870400 byte.
Per risolvere o vai su processori a 32 bit oppure su smart display come i Nextion, però costano molto di più.

astrobeed:
Non è un problema di software o di display, un 8 bit più di tanto non può fare e aggiornare un display tft da 320x240 pixel richiede l'elaborazione di 870400 byte.

Concordo. Ma continuo anche a ritenere l'installazione su Arduino di schermi grafici, e peggio ancora se touch, una cosa contro natura :wink:
Le interfacce "belline" e usabili mettiamole su un sistema centrale di controllo su PC con Linux, Windows o anche un semplice Raspberry PI 3 ma su Arduino metterei sempre solo LCD 2 o 4 righe e basta...

docdoc:
Concordo. Ma continuo anche a ritenere l'installazione su Arduino di schermi grafici, e peggio ancora se touch, una cosa contro natura :wink:

Quantomeno che ci vengano messi display "intelligenti", con MCU e memoria porpria e che colloquiano semplicemente via seriale, come appunto i Nextion indicati da Astro (... che, in quella classe di display, sono tra i più economici).

Guglielmo

docdoc:
Concordo. Ma continuo anche a ritenere l'installazione su Arduino di schermi grafici, e peggio ancora se touch, una cosa contro natura :wink:

In linea di massima sono d'accordo, però dipende molto da quello che si vuole fare, se ci si accontenta di una grafica spartana, solo fincature, testo, numeri e qualche semplice icona, un Atmega2560 riesce a gestire abbastanza bene un display 320x240, sopratutto se si usa l'accortezza di aggiornare solo l'area interessata e non tutto il display ogni volta che cambia un dato.
Ho detto un Mega2560 perché oltre al numero di pin interessati, anche più di 20, è un attimo riempire i 32k di flash di un 328, oltre al peso delle librerie c'è quello dei font usati e delle eventuali icone, anche i 2k di ram vengono riempiti in un attimo quando si usano i TFT.
Da evitare come la peste i display tft su bus SPI, per ovvi motivi sono nettamente più lenti di quelli su bus parallelo e richiedono tempi maggiori di refresh, idem i tft con bus a 8 bit, richiedono il doppio degli accessi sul bus, rispetto alla versione a 16 bit, e rallentano sensibilmente l'aggiornamento.
Display tft su bus SPI o 8 bit si riescono ad usare abbastanza bene solo con processori a 32 bit con clock >50 MHz, p.e. con le Teensy 3.x si ottengono buoni risultati.
Qui un breve video con una Teensy 3.1 che pilota un tft con bus spi @40 MHz, non c'è nessun flickering e la visualizzazione è abbastanza fluida.

astrobeed:
Da evitare come la peste i display tft su bus SPI, per ovvi motivi sono nettamente più lenti di quelli su bus parallelo e

Vero. Però chi opta per un bus parallelo, deve usare un mucchio di pin solo per il display.
Perciò ripeto un consiglio che ho scritto in un altro thread:

"IN GENERALE:
ma ragazzi, nell'ultimo periodo (un mese) ci sono MOOOOOLTI thread aperti su display venduti a basso prezzo da siti cineserie.
Mi permetto di sconsigliarvi questi acquisti SOPRATTUTTO se il venditore NON da librerie, datasheet e info di come usarlo con Arduino.
Ci perdere solo tempo. Inoltre Arduino Uno non ha molta memoria e questi display richiedono tutta la elaborazione da Arduino, che non è molto potente (come velocità di calcolo)
Meglio dei display testo semplici o dei display tft seriali con a bordo una mcu e memoria. Ad esempio i Nextion della Itead.

Poi se siete fortunati qualcuno ha scritto una libreria compatibile con il vs. display, ma è difficile capire quale lib funziona. "

nid69ita:
Vero. Però chi opta per un bus parallelo, deve usare un mucchio di pin solo per il display.

Tanto per motivi di uso flash e ram sei praticamente obbligato ad usare un Atmega2560, il problema numero di pin è abbastanza relativo.

E' solo per far capire che si usano molti pin in quel caso.
In un recente thread un utente si stupiva di ciò sul suo shield/display. :slight_smile:

Grazie a tutti per le risposte. Sono nuovo di arduino e non conosco le sue limitazioni.

Purtroppo mi serve fare dei grafici a colori quindi ho optato per togliere lo schermo, mandare i dati al portatile via seriale e far fare conti e grafica a lui.

Visto che ci sono, sto usando un accelerometro MPU 6050 e ho notato che rileva una misurazione ogni 9-10 millisecondi.
Dato che questo tempo è uguale sia con la mega che con la arduino due, deduco che questi 10 ms siano dovuti all'accelerometro.

Anche qui, esiste un modo per velocizzarlo via software o sapete indicarmi un modello più veloce ?

Grazie ancora

Mi rispondo da solo all'ultima domanda

Per modificare il sampling rate del MPU 6050 bisogna modificare il file MPU6050_6Axis_MotionApps20.h

Alla voce

0x02, 0x16, 0x02, 0x00, 0x01 // D_0_22 inv_set_fifo_rate

L'ultimo numero della 5 voce determina il rate secondo la formula 200 / (1 + x )

Ad esempio
0x02, 0x16, 0x02, 0x00, 0x07 // D_0_22 inv_set_fifo_rate

Darà un sampling rate di 200/(1+7) = 25 hz

mentre

0x02, 0x16, 0x02, 0x00, 0x00 // D_0_22 inv_set_fifo_rate

Darà 200 /(1 + 0 ) = 200 hz ( che sembra il massimo che si possa ottenere e che va bene anche a me)

Grazie ancora a tutti !