Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/ognigiorno.com/wp-content/plugins/math-comment-spam-protection/math-comment-spam-protection.php:1) in /var/www/html/ognigiorno.com/wp-includes/feed-rss2.php on line 8
I collegamenti del display
(Fare comunque riferimento alla documentazione tecnica del produttore. Nel mio caso si tratta di Hitachi HD44780)
Pin Nome
1 Vss
2 Vdd
3 Contrasto (collegare a massa)
4 RS
5 RW (di solito a massa)
6 E
7 D0 (n.c. per interfacciamento a 4 bit)
8 D1 (n.c. per interfacciamento a 4 bit)
9 D2 (n.c. per interfacciamento a 4 bit)
10 D3 (n.c. per interfacciamento a 4 bit)
11 D4
12 D5
13 D6
14 D7
Dalla tabella vediamo che per utilizzare un collegamento a 4 bit dobbiamo utilizzare i 4 più significativi del display, il register Select (RS) e il pin Enable (E)
Protocollo di comunicazione
In caso di interfacciamento a 8 bit, i dati vanno inviati tutti in una volta
Inserire un ritardo di almeno 2ms tra ogni operazione
Inizializzazione del display
Appena acceso, il display, va inizializzato, inviando i comandi base. Primo fra tutti la selezione del modo di comunicazione a 4 o 8 bit.
La sequenza esatta è visibile dal codice sorgente scaricabile qui
Inviare caratteri al display
Dopo l’inizializzazione è possibile inviare i caratteri trasmettendo il loro valore ASCII.
Il display incrementa automaticamente la posizione, quindi non è necessario fare nulla tra un carattere ed il successivo
Il codice allegato
Il codice che allego l’ho testato con controllori PIC (!6f506, 16F84, 16F689 e 16F887), ma è utilizzabile con tutti i controllori che hanno almeno 6 piedini disponibili.
Le caratteristiche principali:
L’interfaccia seriale comunica utilizzando il protocollo descritto qui ed implementa i seguenti comandi:
L’utilizzo tipico avviene tramite tastiera, per cui ad ogni tasto premuto viene visualizzata la relativa cifra, partendo da destra con shift verso sinistra. Il comando di lettura del valore visualizzato permette la completa asincronicità tra display e utilizzatore: quando serve viene letto il valore.
Gli ultimi due comandi servono per sfruttare la memoria EEPROM disponibile sul controllore, che per la gestione dei disply non vengono utilizzate. Siccome c’è sempre carenza di memoria, perché non sfruttarla?
Schema elettrico
R1-R4: 1k ohm
R5-R12: 330 ohm
T1-T4: BC517
DIS1-DIS4 Display anodo comune
Il controllore visualizza i valori delle 4 cifre, multiplexando i 4 display, alimentati tramite 4 darlington. L’interfaccia seriale lavora a livelli TTL e sfrutta gli stessi pin utilizzati per la programmazione (ICSP).
Allego il progetto completo MPLAB. Il compilatore utilizzato è il PICC di Hitech
Per implementare altri comandi di deve modificare la funzione
unsigned char interrupt ricezione(void), in particolare intervenendo nel blocco switch, inserendo altri case, riferiti ai comandi da implementare:
...
c = GetCommand();
if (!c) {
switch (read_Buff(2)) {
case 5:
...
ecco ora una parte del codice di un progetto che utilizza il modulo:
c = ReadKey();
switch (c) {
case 0x0a:
sendCommand (0x35, 6, 0);
break;
case 0x1a:
sendCommand (0x35, 7, 0);
break;
case 0x0b:
DelayMs (200);
sendCommand (0x35, 8, 0);
if (getCommand()==0)
sendSlave();
break;
default:
DelayMs (200);
c += 0x30;
sendCommand (0x35, 5, c);
}