Ciao e ben ritrovati.
Qualche mesetto fa, ho pubblicato un articolo dove descrivevo un generatore di caratteri morse, corredato di display lcd per la visualizzazione dei caratteri generati.
Tale progetto, prevede oltre alla generazione di lettere, numeri e segni d’interpunzione, anche la generazione di caratteri speciali, come ad esempio KA, VE, AS, AR, VA, di cui non riprendo qui la descrizione, ma rimando al link che segue per approfondimenti. generatore di caratteri Morse
In merito a tali caratteri, alcuni lettori mi hanno chiesto, almeno quelli che hanno visto il video fino alla fine, come ho fatto a stampare tali caratteri sul display, poiché non sono previsti dal costruttore, quindi non presenti nella tabella dei caratteri.
Come molti di voi sapranno, la risposta è, che nel display utilizzato, vi sono alcune locazioni di memoria chiamate "CGRAM", dove è possibile memorizzare fino ad otto caratteri definibili dall’utente, secondo le proprie esigenze.Per molti questo sarà un gioco da ragazzi, altri forse apprezzeranno queste poche semplici indicazioni, per imparare a gestire al meglio i caratteri definibili dall'utente sui display “HD44780”, indicazioni che saranno valide ed utilizzabili indipendentemente dal linguaggio di programmazione preferito ed usato da ognuno.
Le indicazioni che seguiranno, faranno riferimento al file ASM utilizzato per il generatore di caratteri Morse.
Facendo adesso riferimento al listato ASM, scorrete le righe delle istruzioni, fino a leggere :
Le parole evidenziate in rosso e sottolineate sono dei link.
Descrizione;... nuovi caratteri ----
Le due istruzioni successive:; inizializzo cgram chr n°0 riga n° 0
MOVLW .64
CALL TXCMD
inviano al display il numero decimale 64, col quale si ordina alla logica interna, di considerare i dati che seguiranno, come dati relativi ai caratteri definiti dall’utente, e di predisporsi alla loro memorizzazione nelle locazioni specificate come di seguito descritto.
Per semplicità è più conveniente convertire il valore decimale “64” in binario, che sarà il seguente “01000000”, e per rendere ancora più comprensibile il nostro discorso, lo spezzetteremo nelle tre parti seguenti “01.000.000”.Dove in questo caso specifico, i primi due bit a sinistra devono essere sempre posti a “01”, in questo modo la logica interna, si preparerà a ricevere i dati costituenti i caratteri definiti dall’utente.
I tre bit centrali, servono a comunicare alla logica interna, quale degli otto caratteri definibili dall’utente, ci stiamo preparando ad inviare, in questo caso il carattere residente nella locazione corrispondente al numero binario "000"; l'ultima locazione ovviamente è la "111", per un totale di otto locazioni, cioè otto caratteri.
I tre bit a destra invece, servono a comunicare alla logica interna, quale delle otto righe costituenti il carattere definito dall’utente, ci stiamo preparando ad inviare, in questo caso la riga corrispondente al numero binario "000".
Se fin qui sono stato chiaro, avrete senz’altro capito che, andando a modificare il valore dei due blocchi da tre bit visti prima, possiamo andare a definire o a modificare qualsiasi riga di uno degli otto caratteri definibili dall’utente.
Torniamo adesso al nostro listato ASM, le successive sedici istruzioni, inviano al display otto dati che costituiscono il carattere da noi definito.; dati nuovo chr in cgram = VA MOVLW .20 call TXDATO MOVLW .20 call TXDATO MOVLW .20 call TXDATO MOVLW .8 call TXDATO MOVLW .2 call TXDATO MOVLW .5 call TXDATO MOVLW .7 call TXDATO MOVLW .5 call TXDATO
Se ve ne fosse bisogno, vi ricordo che gli otto caratteri, così come anche le righe, sono numerate da zero a sette partendo dall’alto verso il basso, e che le istruzioni "CALL TXCMD" e "call TXDATO" richiamono le subroutin per inviare un comando oppure un dato al display; per completezza se scorrete il listato, troverete anche la subroutin per inviare un numero al display chiamata "TXNUM".
Per vedere l’aspetto che avrà il carattere, bisogna costruire la griglia dei pixel, costituita da otto righe per cinque colonne, ed inserire degli uni in corrispondenza dei pixel che vogliamo accendere.
Di seguito riporto i caratteri VA, AS e KA da me definiti, dove in cima alle colonne è riportato il peso assunto dai bit che si trovano a livello logico uno, ed accanto ad ogni riga il valore decimale, ottenuto dalla somma del peso dei bit che per ogni riga si trovano ad uno. Saranno proprio questi otto valori inviati al display, che lo istruiranno su quali bit accendere per formare il carattere.