Go Down

Topic: Libreria SavSegNum (Read 193 times) previous topic - next topic

savoriano

Buongiorno a tutti
Ho ultimato l'aggiornamento della mia libreria SavSegNum migliorando ancora di più la sua velocità.
Un po' di storia.
Avevo fabbricato un computer di bordo per la mia moto e avendo un problema di blinking mi venne l'idea di creare un nuovo modo per scrivere i numeri sul mio schermo tft.
Le librerie standard per scrivere un carattere utilizzano 2 sistemi (a mia conoscenza):
1: disegnare punto per punto i pixels contenti nel rettangolo occupato dal carattere.
vantaggi: non c'è bisogno di cancellare prima di riscrivere
inconvenienti: occupa molta memoria, lentezza.
2: disegnare solamente i pixels che costituiscono il carattere.
vantaggi: utilizza meno memoria (forse!), é più veloce.
inconvenienti: bisogna occuparsi di cancellare il carattere precedente.

Questa libreria non carica in memoria il set di caratteri ma l'occupazione di memoria risparmiata è assorbita dalla libreria stessa.
Scrivere un numero pero' è una operazione velocissima: varia da 400usec per un numero di 8*7 pixels a 3200uSec per un numero di 40*40 pixels.
Queste velocità non influiscono sulla quantità di numeri da stampare. stampare 1 oppure 88888888 il tempo non cambia.
Voi mi direte; è impossibile stampare su un tft un numero di 10 cifre in solo 3200uSec!! E' vero, non ho fatto nessuna magia ma ho utilizzato uno stratagemma che l'occhio umano non può percepire.
In realtà per scrivere un 1 (40*40 pixels) ha bisogno SI di 3200uSec ma per completarlo gli ci vuole un massimo di 7 loops. Un numero di 10 cifre ha bisogno quindi al massimo di 70 loops. Un programma che, per completare un loop, gli ci vuole 1mSec, in 70mSec i dieci caratteri sono tutti completati.
Perché dico "al massimo 70 loops"? perché volendo in un loops si può chiamare la procedura di scrittura più volte; se la si chiama due volte ci vogliono 35 loops, pero' il tempo dedicato alla scrittura raddoppia.
Questo dipenderà dal tempo che possiamo consacrargli.
Questa libreria va bene per quei programmi che devono stampare numeri su un tft senza dover sacrificare troppo tempo!
L'ho utilizzato per esempio per il mio ultimo progetto di un CDI che doveva stampare su tft i giri minuto e il ritardo di accensione. Dato che il motore a 10000giri/min mi dava un tempo a disposizione di circa 2mSec al giro, con questa biblioteca ho risolto questo problema di tempo.
La sola limitazione di questo sistema ( anche se, penso, spero, voi ne troviate altre) è che non può stampare numeri di 7 cifre (compresi i suoi multipli)!
Sarei felicissimo che qualcuno lo provasse per vedere se può essere migliorato.
Sto riflettendo anche all'idea di ampliare il set di caratteri per poter stampare anche delle lettere.
Per ora è capace di stampare i numeri compreso + * - / .:=

Ho utilizzato un tft di 3.5" + Arduino Mega. Questo schermo utilizza la libreria MCUFRIEND_kbv che a sua volta si appoggia alla libreria Adafruit_GFX. Non ho provato, ma penso che tutti gli schermi che possono funzionare con quest'ultima libreria, possano girare con la mia libreria ( esempio Adafruit_SSD1306 ).

Nello zip ci sono i files della biblioteca più un piccolo sketch di esempio.

Go Up