HOME                                         

Caratteri speciali
per display 

“HD44780”


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.
Le parole evidenziate in rosso e sottolineate sono dei link.


Descrizione

Facendo adesso riferimento al listato ASM, scorrete le righe delle istruzioni, fino a leggere :
;... 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 "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.

Qualcuno adesso scorrendo il listato, si starà chiedendo come mai tra l’invio di due righe successive, ed anche tra l’invio di due caratteri successivi, non sono state inviate le istruzioni per aggiornare il numero del carattere inviato o della riga inviata, così come abbiamo fatto all’inizio; la risposta è:

Non é necessario aggiornare il numero di riga o di carattere ogni volta, poichè ad ogni invio la logica interna incrementa automaticamente un registro chiamato “Address Counter” che punta alla locazione successiva.

Quindi basta dare solo una volta all’inizio l’indirizzo di partenza, ed inviare la raffica dei dati uno dietro l’altro fino alla fine.

Se ad esempio volessimo modificarne solo uno dei caratteri, ad esempio il quarto carattere, allora il dato iniziale di comando sarà il seguente “01.011.000”, seguito dagli altri otto dati relativi alle otto righe che costituiscono il carattere che abbiamo definito.

Per visualizzare i caratteri sul display, come prima cosa occorre comunicare al display, da quale punto iniziare a stamparli, come nell'esempio seguente.
 
 MOVLW   H'80'   ; inizializzo DDRAM  1°posto 1°riga (riga superiore)
 CALL    TXCMD
 
ed a seguire :
 
MOVLW   .0        ;invia 1° carattere definito dall'utente (da .0 a .7)
CALL   TXDATO

MOVLW   .1        ;invia 2° carattere definito dall'utente (da .0 a .7)
CALL   TXDATO
 
e cosi via.

Per completare il discorso, nella gif animata che segue, un esempio di come è possibile creare una piccola animazione, ottenuta stampando in sequenza dei caratteri opportunamente preparati, per ottenere quelli che potrebbero essere degli indicatori di livello.

 
 
Spero solo di essere stato chiaro, e soprattutto che queste indicazioni siano state utili.
 
Saluti...
 
IT9DPX - #135 - (FRANCESCO  M.)