Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Gestione display OLED

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto Utentexyz, Foto UtenteWALTERmwp

1
voti

[51] Re: Gestione display OLED

Messaggioda Foto UtenteThEnGi » 28 mag 2024, 8:08

Saverio15 ha scritto:Comunque visto questa storia infinita, ci proverò.


La storia "è infinita" perché stai usando una libreria senza sapere cosa fa e di che segnali ha bisogno il componente questo ti porta ad eseguire un debug "per tentativi".
Devi scegliere quale libreria usare ! Non provarle tutto finché non funziona.

Io questa metodologia di lavoro la chiamo "stile Arduino" perché molto utilizzata da coloro che usufruiscono di questa piattaforma

Saverio15 ha scritto:Nella compilazione delle 4 righe, mi viene segnalato "" Poca memoria disponibile, potrebbero presentarsi problemi di stabilità".
L'Arduino nano è lo stesso per i due display, come mai questa differenza?


Questo si ricollega al problema di sopra, non sai cosa carica effettivamente

Arduino non prevede un sistema di "garbage collection" (efficace) provocando "memory leaks", la memoria usata per le variabili (posta all'inizio) va ad espandersi fino ad incontrare quella di programma (posta alla fine) provocando il crash del micro

Sotto questo aspetto o usi un uC con più memoria flash/sram o alleggerisci la libreria (o ne scegli una più leggera).

In alternativa si può provare ad ottimizzare il codice (Link Arduino DOC), ma non credo tu vada a recuperare molto.....
NDR: è stato postato ? non ho controllato tutte le pagine :mrgreen:

Come consigliato dalla guida, un primo approccio può essere spostare alcune variabili dalla Sram alla Flash e ridurre lo spazio allocato alle variabili ovvero non usare un long quando basta un byte :ok:

O_/
Avatar utente
Foto UtenteThEnGi
2.215 3 6 9
Expert EY
Expert EY
 
Messaggi: 2228
Iscritto il: 6 ott 2022, 18:43

0
voti

[52] Re: Gestione display OLED

Messaggioda Foto Utentestefanopc » 28 mag 2024, 8:43

Saverio15 ha scritto:Se ho ben capito, nelle varie istruzioni le devo iniziare con "u8g2" anzichè con "display", è così?

La libreria U8g funziona molto bene e gestisce in modo semplice le diverse tipologie di Oled.
Ha un manuale molto ben organizzato e svariate funzionalità.

https://github.com/olikraus/u8g2/wiki

https://github.com/olikraus/u8g2/wiki/u8g2reference

In più ha numerosi programmi di esempio da cui si può facilmente capire come utilizzarla correttamente.
Ciao
600 Elettra
Avatar utente
Foto Utentestefanopc
12,0k 5 9 13
Master EY
Master EY
 
Messaggi: 4976
Iscritto il: 4 ago 2020, 9:11

0
voti

[53] Re: Gestione display OLED

Messaggioda Foto UtenteThEnGi » 28 mag 2024, 8:48

ThEnGi ha scritto:Devi scegliere quale libreria usare ! Non provarle tutto finché non funziona.

Come consigliato dalla guida, un primo approccio può essere spostare alcune variabili dalla Sram alla Flash e ridurre lo spazio allocato alle variabili ovvero non usare un long quando basta un byte :ok:


Ovviamente intendevo "finche funziona", provarle tutte per non farlo funzionare mi sembra sadico :mrgreen:

Prendo uno spunto dal post [29], per darti uno spunto:

Codice: Seleziona tutto
display.println("Ciao");


diventa

Codice: Seleziona tutto
display.println(F("Ciao"));


e così 4 byte (più qualcosa) di Sram vengono allocati in Flash, applica il processo a tutte le scritte "statiche".
Nano mi sembra che sia equipaggiato con 32kb di flash e 2kb di Sram, usando la flash hai (in teoria) 16 volte più spazio per i dati :ok:

Una soluzione più drastica potrebbe essere anche l'uso della EEPROM per contenere eventuali parametri statici
ES. °C= X * °F
X la scrivi una volta nella EEPROM e poi la richiami quando serve
NDR: La EEPROM può essere scritta "poche" volte ma letta infinite
Cosi facendo scarichi sia Sram che Flash utilizzando la EEPROM che magari è li vuota a "fare niente"

Ora non posso testare se la libreria si arrabbia nel fare così, esegui una piccola prova variando una sola riga e vedendo se compila e funziona.

Stesso principio per i "Serial.println"

O_/
Avatar utente
Foto UtenteThEnGi
2.215 3 6 9
Expert EY
Expert EY
 
Messaggi: 2228
Iscritto il: 6 ott 2022, 18:43

0
voti

[54] Re: Gestione display OLED

Messaggioda Foto UtenteSaverio15 » 28 mag 2024, 10:58

Intanto Grazie per la vostra pazienza nel seguirmi.
Ultimamente, penso che un muratore si abbia stancato meno di me che "lavoro" a questo programma. :D
Ora mi riposo un po' e poi riprovo con la libreria u8g2. Speriamo bene.
Avatar utente
Foto UtenteSaverio15
20 3
 
Messaggi: 28
Iscritto il: 17 feb 2013, 17:28

0
voti

[55] Re: Gestione display OLED

Messaggioda Foto Utentebigendian » 28 mag 2024, 16:03

Per queste cose non mi servirei di alcuna libreria, ma del datasheet dei display e un po' di codice per un driver minimale. In questo modo saprai sempre cosa fa il tuo codice, mantieni dimensioni codice al minimo, impari un po' di cose, ti diverti. Le librerie le lascerei per cose piu complesse o per chi vuole risultati piu veloci, sempre che si sappia come usarle, compilare, linkare etc.
Avatar utente
Foto Utentebigendian
26 2
 
Messaggi: 37
Iscritto il: 6 mag 2024, 9:26

0
voti

[56] Re: Gestione display OLED

Messaggioda Foto UtenteSaverio15 » 2 giu 2024, 12:59

ciao.
Ho deciso di fermarmi fino a quando non risolverò il problema della scrittura di un nuovo dato sopra un dato precedente.
Ho risolto il problema mettendo un "display.clear" all'inizio del loop.
La presentazione delle misure non mi piace proprio, come si vede nel video allegato.

https://imgur.com/vgvQOLG
Avatar utente
Foto UtenteSaverio15
20 3
 
Messaggi: 28
Iscritto il: 17 feb 2013, 17:28

0
voti

[57] Re: Gestione display OLED

Messaggioda Foto Utentelelerelele » 4 giu 2024, 9:05

Saverio15 ha scritto:La presentazione delle misure non mi piace proprio, come si vede nel video allegato.

https://imgur.com/vgvQOLG

A parte che non è consentito, da regolamento, allegare immagini da siti esterni.

perché non si riesce a scrivere il dato con colore di fondo per cancellarlo?
Avatar utente
Foto Utentelelerelele
4.475 3 7 9
Master
Master
 
Messaggi: 5131
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

0
voti

[58] Re: Gestione display OLED

Messaggioda Foto UtenteEtemenanki » 4 giu 2024, 9:20

> Foto Utentelelerelele: E' un video, e purtroppo il forum non supporta nativamente i video come invece fa per le immagini, per cui serve per forza postarli come link esterni (e non tutti hanno o vogliono avere a che fare con youtube ... comunque imgur e' un server per immagini e video abbastanza sicuro).

> Foto UtenteSaverio15: dipende dai clear (il lampeggio) e forse da qualche regolazione della velocita' di comunicazione del bus I2C (il fatto che ti compaiano le righe scritte lentamente in quel modo dopo il clear) ... forse anche dalla libreria, ma su quello non ci giurerei.

Io alla fine ero arrivato ad una cosa del genere, ad ogni aggiornamento riscrivo l'intero display, non solo il numero superiore (cambia solo quello perche' gli altri dati rimangono identici, ma vengono comunque riscritti tutti), e considera che stavo usando un 328PB standalone, senza quarzo e con l'oscilatore interno ad 8MHz

https://i.imgur.com/RRVX2FQ.mp4
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.
Avatar utente
Foto UtenteEtemenanki
8.070 3 6 10
Master
Master
 
Messaggi: 5082
Iscritto il: 2 apr 2021, 23:42
Località: Dalle parti di un grande lago ... :)

0
voti

[59] Re: Gestione display OLED

Messaggioda Foto UtenteSaverio15 » 4 giu 2024, 10:58

Mi scuso per aver inseriti il video in quel modo, ma non sapevo come fare altrimenti.

Penso anch'io che la lentezza delle presentazione delle righe dipenda dalla libreria. Infatti visualizzando anche una sola riga, la presentazione è lenta.
Ho provato ad inserire, prima della nuova lettura, dei caratteri ascii con un quadratino tutto nero (219) ma non funziona bene.

Ora sto provando a mettere dei rettangoli neri solo sulla parte variabile dei numeri, per cancellare i vecchi valori, e poi scrivere la nuova misura. Vedremo come funzionerà.

Sarebbe il caso di provare a cambiare la libreria ma per il momento non me la sento.
Avatar utente
Foto UtenteSaverio15
20 3
 
Messaggi: 28
Iscritto il: 17 feb 2013, 17:28

0
voti

[60] Re: Gestione display OLED

Messaggioda Foto UtenteSaverio15 » 9 giu 2024, 11:12

Forse ho risolto il problema pricipale della scrittura dei dati sovraesposti., ma sono convinto che esiste un metodo migliore per risolvere il problema.

Faccio un riepilogo per chi non vuole rileggere tutti i post precedenti.

Il programma con Arduino Nano, visuslizza 5 strumenti di misura e presenta le seguenti misurazioni:

Temperatura e Umidità con DHT22
Tensione della batteria interna
Metro ad ultrasuoni con SRF05
Inclinometro con GY-521
Bussola con GY-271

Lo strumento funzionava bene ma aveva un inconvediente.
Al primo giro del loop. Tutte le misure si visualizzavano perfettamente.
Dal secondo giro del loop e nei seguenti, se nella lettura delle misure c'era un cambiamento di valore, questo veniva scritto sopra il precedente senza cancellare la prima misura.
Naturalmente questo rendeva illegibile il nuovo valore.
Inserisco un link di un breve video per rendere più chiaro il fenomeno.

https://www.youtube.com/shorts/B1eIoqZUpPI

Il problema poteva essere risolto inserendo un “display.clear” in testa al loop.
Risolto il problema della leggibilità dei dati, sorgeva il problema della continua scittura di tutto il display. Naturalmente anche questo non era accettabile.

https://www.youtube.com/shorts/WW-0uNfULPo

Per migliorare la visualizzazione dei dati, ho provato diverse soluzioni anche quelle suggerite da chi segue questa discussione.
La soluzione che ha risolto il problema è stato quuello di fare dei rettangoli bianchi solo nello spazio dove veniva scritto le letture dei vari strumenti. “display.drawRect(X,X,X,X ,WHITE);”

https://www.youtube.com/shorts/JKOphZtNrJQ

Una volta centrato bene lo spazio ho cambiato il rettangolo con uno nero “display.fillRect(X,X,X,X,BLACK); “

https://www.youtube.com/shorts/B1eIoqZUpPI

Al momento mi sembra che funzioni bene.
Se qualcuno è interessato, posso inserire il programma completo e funzionante con display OLED SH1106.

Ancora una cosa, nei video si vede un display SH1106 con scritte bianche e uno SSD1306 con scritte blu. I due display hanno indirizzi diversi ma visualizzano entrambi gli stessi dati se si usa un programma con SH1106.

Scusate la lunghezza della descrizione.
Avatar utente
Foto UtenteSaverio15
20 3
 
Messaggi: 28
Iscritto il: 17 feb 2013, 17:28

Precedente

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti