Arduino nano every è più lento di arduino nano

Ho un progetto con un display TFT sche stavo portando avanti con l'arduino nano. A un certo punto mi serviva una memoria flash maggiore e anche più Ram quindi ho comprato L'Every ma ho visto che è molto più lento a mostrare immaggini nel display

E quindi? Quale è la domanda per il forum?

Guglielmo

Come mai l'Every è più lento del nano ? Non dovrebbe essere il contrario ?

In teoria si. Ma senza altre info che possiamo dire ? Tiriamo a casaccio ?
Quale TFT ? metti un link
Quale libreria tft usi ?

Dipende dal software che sui ... magari la libreria TFT era ottimizzata per ATmega328P e non lo è per ATmega4809.

A livello di clock vanno entrambe a 16 MHz e l'architettura è sempre AVR; la grossa differenza è a livello periferiche e, se una libreria qualisasi non è ottimizzata per sfruttarle a pieno, ovviamente le performaces sono inferiori ... ::slight_smile:

Guglielmo

Link Display: https://www.amazon.it/dp/B07N6FQ5XW?ref=ppx_pop_mob_ap_share

La libreria è quella standard di arduino TFT.h
Ho creato una funzione per questa libreria che mi permette di fare frame buffering. Il codice ha sempre funzionato bene per il nano e anche per l'Every ma più lento Codice:

void Adafruit_ST7735::fillPixelsScreen(int16_t x, int16_t y, int16_t w, int16_t h,
unsigned char* c,uint16_t Color1, uint16_t Color2) {

// rudimentary clipping (drawChar w/big text requires this)
if ((x >= _width) || (y >= _height)) return;
if ((x + w - 1) >= _width)  w = _width - x;
if ((y + h - 1) >= _height) h = _height - y;
if (tabcolor == INITR_BLACKTAB) {
Color1 = swapcolor(Color1);
Color2 = swapcolor(Color2);
}
w /= 2;
h /= 2;
for (y = 0; y < h; ++y) {
unsigned int index = y * w;
setAddrWindow(0, y*2, 160 - 1, y);
SPI.beginTransaction(spisettings);
* rsport |= rspinmask;
*csport &= ~cspinmask;
//for(byte Rsx = 0; Rsx < 2;++Rsx)
for (x = 0; x < w; ++x) {
if (bitRead(c[index / 8], index % 8)) {
SPI.transfer16(Color1);
SPI.transfer16(Color2);
} else {
SPI.transfer16(Color2);
SPI.transfer16(Color2);
}
++index;
}
for (byte i = 0; i < 0; ++i) {
SPI.transfer16(0);
SPI.transfer16(0);
}
*csport |= cspinmask;
#ifdef SPI_HAS_TRANSACTION
if (hwSPI) SPI.endTransaction();
#endif
}
}

https://www.mediafire.com/file/2g6eewpmffy2wq9/Arduino_speed_difference.mp4/file

Questo è un link a un video su mediafire che mostra l'abissale differenza di velocità.
Vi do alcune informazioni sul codice:

Faccio uso di molta allocazione dinamica.
Il frame buffer è grande 640 Byte
uso bool b : 1 per ottimizzare l'uso della ram
Lavoro con numeri decimali
Nel mio codice ci sono MOLTE classi e struct
Faccio uso del PROGMEM per sprite e musiche

Spero che possiate aiutarmi :slight_smile:

Guarda, il miglior suggerimento che posso darti è di aprire una dicussione nella sezione Inglese dedicata a tale board, QUI, ovviamente scrivendo SOLO in lingua Inglese ...

Nella sezione Italiana credo siano pochi gli utilizzatori di quella scheda e quindi ... rischi di aspettare parecchio ...

Guglielmo

P.S.: Magari, se dall'altra parte trovano la soluzione, se cortesemente poi la comunichi anche qui, magari potrà aiutare qualcuno in futuro ... :slight_smile:

Ok grazie