LCD232 - INTERFACCIA SERIALE PER DISPLAY LCD - 4




Protocollo di comunicazione

La comunicazione tra il modulo e  il circuito esterno che lo pilota avviene secondo lo standard RS232 per un comunicazione asincrona a 8 bit senza parità. Il modulo e' pensato per essere pilotato da un micro ( per esempio il PIC 16F628A) che implementa lo standard RS232 tramite il modulo USART ma può essere pilotato anche tramite la porta seriale di un PC interponendo un traslatore di livelli. ( circuito con max232). vediamo come devono essere strutturate le istruzioni da mandare al modulo perché questo esegua le varie funzioni.

Formato delle istruzioni 

Per un display basato sul chipset HD44780, il controllo avviene agendo sui segnali di controllo RS e RW e mandando contemporaneamente sul bus dei dati a 8 bit (DB7-DB0) un determinato dato in base al set predefinito di comandi come da specifica. Quindi l’istruzione di comando del display comprende un comando definito da RS e RW a cui si associa un dato passato sul bus  (DB7- DB0). ( per ulteriori informazioni sui display basati su HD44780 scaricate il datasheet)
Il modulo LCD_232 consente di controllare il DISPLAY con le stesse istruzioni con la sola differenza che queste istruzioni sono inviate in maniera seriale secondo la seguente struttura:

cmd

dato end

L’istruzione, nella sua forma più semplice, e’ composta da tre byte:.
Il byte cmd definisce il comando da eseguire ed e’ praticamente il valore che assume il byte che ha come bit 1 e bit 0 rispettivamente RS e RW. Di seguito la tabella che mette in relazione il campo cmd con i valori RS e RW

RS

RW

cmd

0

0

0

0

1

1

1

0

2

1

1

3

  cmd può assumere valori maggiori di quelli definiti da RS e RW quando serve per attivare le funzioni aggiuntive (cmd>3).
Il byte dato e il dato da associare al comando ovvero il valore che si manda sul bus (DB7:DB0) nel caso del controllo parallelo.
Nel caso di comandi di lettura il valore del dato deve valere 0xFF. In tal caso il valore letto e’ trasmesso sulla linea di Tx data con il formato:

dato

end

Dato_read

0D

Il byte end ha il valore di fine istruzione che corrisponde al return da tastiera ed e’ il carattere ASCII numero 13 che si ottiene inviando il valore esadecimale ( 0x0D).

Struttura delle istruzioni multipla

Normalmente, la istruzione singola, inviata con la struttura prima descritta, viene eseguita subito dopo la fine della comunicazione.  In genere si può avere anche la necessità di eseguire una set di istruzioni in maniera consecutiva.
Il modulo LCD_232 permette di caricare una set di istruzioni ( max 16) ed eseguirle tutte in successione subito dopo la fine della comunicazione.
Praticamente si tratta di un estensione della istruzione di base ( cmd +dato+ end). La differenza sta nel fatto che, per poter caricare l’ istruzione successiva, non bisogna chiudere quella precedente con il fine istruzione (0x0D)h. Quindi in generale, se si vogliono mandare M comandi si deve scrivere:

cmd1 dato1 cmd2 dato2 ….. ….. cmdM datoM (0x0D)

 con M<= 16

Si possono inviare, in maniera multipla  tutte le istruzioni standard ( ovvero quelli definite per il display) e alcune istruzioni aggiuntive.

Esempio 1: cancellare il display (funzione  clear)

Con un collegamento parallelo bisogna settare: RS = 0, RW = 0 con [DB7:DB0] = (01)h  (vedi tabella istruzioni). Utilizzando il modulo seriale bisogna inviare la sequenza:

cmd dato end
00 01 0D

In tal caso si ha la seguente corrispondenza: 

cmd = (00)h essendo  RS e RW sono = 0

dato=(01)h essendo  il valore di [DB7:DB0] pari a  (01)h

end=(0D) stringa fine istruzione

 

Esempio 2: leggere il registro di stato ( busy flag + address counter) 

Per controllo parallelo bisogna  settare : RS=0 RW=1 con [DB7:DB0] = valore del registro di stato. A livello di modulo seriale bisogna inviare:

cmd dato end
01 FF 0D

In tal caso

cmd = (01)h perché  RS = 0 e RW =1

dato=(FF)h argomento del comando nel caso di istruzione di lettura

end=(0D) stringa fine istruzione

Successivamente sulla linea TX DATA e’ inviata il valore del registro di stato secondo la notazione:

dato  0D

con dato = valore registro di stato letto

Praticamente bisogna utilizzare le stesse istruzioni del caso parallelo inviando serialmente il comando cmd,  definito da RS e RW, il dato e, per  finire la comunicazione,  la stringa di fine istruzione (0x0D).