| 
    
      
        | Caratteri CGRAM nei display
          LCDa matrice
 |  
 DDRAM e CGRAM. Ricordiamo ancora che la comunicazione con l' integrato che gestisce l'LCD
  avviene manipolando linee di controllo e linee dati. Infatti il controller
  dispone di una linea specifica per l' accesso in lettura o scrittura (RW) e
  una per la selezione tra comandi e dati (RS), più le 8 linee dati.A riguardi di queste ultime, va tenuto presente che, anche nel caso in cui il
  collegamento con il microprocessore ne utilizzasse solo 4, per risparmiare i/o, un dato o comando
  si estende comunque su 8 bit.
 Dal punto di vista fisico della mappa di memoria del controller, l' area
  RAM è occupata dalla DDRAM a partire dall' indirizzo 80h; bastano 7 bit per
  l' indirizzamento. Il comando
  di posizionamento ad un indirizzo in DDRAM è questo: 
    
    
      
        | Comando | Controllo |  | Dato | Funzione | Tempo di esecuzione
 |  
        | Set DDRAM address
 | RS | RW |  | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Imposta un indirizzo di DDRAM che potrà
        poi essere letto o scritto | 37-100 us |  
        | 0 | 0 |  | 1 | indirizzo DDRAM |  Dal punto di vista del codice, quindi: bcf     RSpin         
  ; set RS = 0 for commandbcf     RWpin         
  ; set RW = 0 for write operation
 movlw   .5            
  ; DDRAM relative address 5
 iorlw   b'100000000'   ;
  add DDRAM base address
 call    writechar      ; invio il
  comando al modulo
 La  CGRAM
  si trova ad occupare 64 locazioni a partire dall' indirizzo 40h, dunque si
  estende da 40h a 7Fh: sono sufficienti 5 bit per l' indirizzamento. Ne
  risulta che il comando ha questa
  forma: 
    
    
      
        | Comando | Controllo |  | Dato | Funzione | Tempo di esecuzione
 |  
        | Set CGRAM address
 | RS | RW |  | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Imposta un indirizzo di CGRAM che potrà
        poi essere letto o scritto | 40 us |  
        | 0 | 0 |  | 0 | 1 | indirizzo CGRAM |  Dal punto di vista del codice, quindi: bcf     RSpin         
  ; set RS = 0 for commandbcf     RWpin         
  ; set RW = 0 for write operation
 movlw   .5          
  ; CGRAM relative address 5
 iorlw   b'010000000'   ;
  add CGRAM base address
 call    writechar      ; invio il
  comando al modulo
 porta l' indirizzo corrente del contatore di CGRAM a 05h. 
 Una nota.Notiamo che è corrente utilizzare, per semplicità, l' indirizzo
  relativo della RAM; questo rende più semplice il collocamento dei
  caratteri nelle locazioni DDRAM corrispondenti alla visualizzazione sul
  display. Ad esempio, per un display da 1 riga di 16 caratteri: 
    
    
      
        |  | il primo carattere visualizzato si trova all' estremo di sinistra
          (home), alla posizione 00 (carattere 1). 
 Il carattere Y si trova alla posizione 0Fh.
 |  In effetti, nella memoria DDRAM, il primo carattere occupa la locazione 80h
  e l' ultimo la locazione 8Fh.  
    
    
      
        | ColonnaLCD
 | Posizione del simboli
          sul display | Posizione del codice in DDRAM |  
        | hex | bin |  
        | decimale | hex | bin |  
        | 1 | 0 | 00h | 00000000 | 80h | 10000000 |  
        | 2 | 1 | 01h | 00000001 | 81h | 10000001 |  
        | .. | .. | .. | .. | .. | .. |  
        | 15 | 14 | 0Eh | 00001110 | 8Eh | 10001110 |  
        | 16 | 15 | 0Fh | 00001111 | 8Fh | 10001111 |  
  
  Si può osservare che la posizione del codice in DDRAM è semplicemente la
  posizione del simbolo sul  display con il bit 7 = 1. Quindi, dal punto di
  vista del codice:
   
  
  movlw   0x05          
  ; DDRAM relative address 5iorlw   b'100000000'   ;
  add DDRAM base address
 call    writechar      ; invio il
  comando al modulo
 
 e
 
  
  movlw   0x85          
  ; DDRAM address 5call    writechar      ; invio il
  comando al modulo
 producono lo stesso risultato.
 Analogamente per la CGRAM, dove i due bit più significativi sono fissi a 01,
  per cui
 
  
  movlw   0x05          
  ; CGRAM relative address 5iorlw   b'100000000'   ;
  add CGRAM base address
 call    writechar      ; invio il
  comando al modulo
 
 e
 
  
  movlw   0x45          
  ; CGRAM address 5call    writechar      ; invio il
  comando al modulo
 sono equivalenti. Come ulteriore chiarimento, indichiamo nella tabella qui sotto, nel caso
  del messaggio visualizzato nell' immagine, il contenuto della DDRAM:   
    
    
      
        | Colonna LCD | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |  
        | Carattere visibile | 1 | x | 1 | 6 |  | L | C | D |  | D | I | S | P | L | A | Y |  
        | Contenuto DDRAM | 31h | 78h | 31h | 36h | 20h | 4Ch | 43h | 44h | 20h | 44h | 49h | 53h | 50h | 4Ch | 41h | 59h |  
        | Locazione DDRAM | 80h | 81h | 82h | 83h | 84h | 85h | 86h | 87h | 88h | 89h | 8Ah | 8Bh | 8Ch | 8Dh | 8Eh | 8Fh |  La conversione da codice contenuto nella DDRAM e simbolo ASCII
  corrispondente è effettuata come descritto prima, ovvero utilizzando il
  codice come indirizzo della tabella del CG ed estraendo e trattando i 40 bit
  corrispondenti (operazione completamente trasparente per l' utente).   
  
 |