Sono facilmente reperibili diversi tipi di moduli LCD con un numero
variabile di cifre. Vediamone uno con controller
HT1621.
Si tratta di un modello venduto anche da dx.com e definito SKU: 435837,
indicazione sul c.s. 688750
Il modulo LCD può presentare 6 cifre a 7 segmenti, più il
simbolo della batteria con tre segmenti addizionali (questo simbolo è sempre visibile, mentre i tre segmenti sono
programmabili).
Inoltre, si possono accendere 3 punti decimali come visibile nella foto qui
sopra.
La superficie in vetro del modulo è circa 23x58mm; i 2.4" dichiarati dal
venditore si riferiscono alla lunghezza complessiva dell'LCD, compresa la
sporgenza laterale dalla retro illuminazione.
Con una alimentazione di 5V e a temperatura ambiente le cifre sono chiare e
ben contrastate.
Un connettore a 6 pin consente di interfacciare il modulo con un
microcontroller.
Quattro fori agli angoli dello stampato facilitano il fissaggio del modulo su
un pannello.
Sono disponibili tre versioni, con retro illuminazione di diverso colore:
blu, verde e bianco. Una backlight , anche minima può essere necessaria per la corretta
visualizzazione: le cifre sono visibili senza, ma con un angolo di
visualizzazione molto stretto.
Il consumo a display spento (default all'accensione) è inferiore agli 11uA,
mentre in modo operativo, è di minore di 190uA.
La retro illuminazione, nei campioni
acquistati, è sempre accesa, essendo collegata tra Vdd
e Vss. Però, essa è commutabile sul pin
LED+ con un ponticello sul lato posteriore dello stampato.
Aprendo il ponticello e chiudendo l'altro, si collega un capo della retro
illuminazione al pin
LED+. Quindi, la luce si accende portando il pin a livello alto.
Questa modifica può essere necessaria in applicazioni a basso consumo in
quanto, a differenza di quello che indicano le
specifiche del venditore
0.4mA
senza retroilluminazione, e 4 mA con retroilluminazione
la corrente di retro illuminazione (nel modello con luce bianca)
è ben 20mA.
Questo valore, però, rientra nelle possibilità di gestione della maggior parte
dei microcontroller, quindi il pin LED+ può essere comandato
direttamente da un I/O digitale senza interporre buffer.
Il valore della corrente può essere anche ridotto, sostituendo la resistenza
serie R2 da 100ohm saldata sullo stampato o aggiungendone una esterna.
Con 470ohm in serie, a 5V di alimentazione e a temperatura ambiente, la retro
illuminazione è ancora adeguata e la corrente scende a 4mA. Con 220ohm la
corrente è 10mA, ma anche 5mA possono essere adeguati. La scelta dipenderà dall'applicazione.
Il controller a bordo è un HT1621, montato direttamente
sullo stampato e coperto dalla classica goccia nera. La scheda non rende
accessibili:
-
i pin BZ/BZ
per il comando del buzzer piezo gestito da HT1621 (cosa che potrebbe essere utile in molte
applicazioni).
-
il pin IRQ,
per cui le funzioni di WDT e Timer non hanno effetto esterno
-
i pin dell'oscillatore, che, però, è selezionato al power on in modo
RC interno
La struttura del display richiede BIAS 1/3 e 4 COM.
I segmenti sono mappati in memoria nel controller come segue:
Sono disponibili 12 indirizzi (da 0 a 11).
Ogni indirizzo contiene 4 bit, corrispondenti ai 4 COM, quindi occorre una
coppia di indirizzi per ogni cifra a 7 segmenti visualizzabile sul pannello.
Indirizzo |
0-1 |
2-3 |
4-5 |
6-7 |
8-9 |
10-11 |
Digit |
0 |
1 |
2 |
3 |
4 |
5 |
La posizione fisica corrispondente è questa:
Dalla tabella qui sopra si rileva che la corrispondenza dei
bit/segmenti, raccolti in un byte, è questa:
; Sequenza:
xcbadegf
_sa = 0x10 ; 00010000 segmento
a
_sb = 0x20 ; 00100000 segmento b
_sc = 0x40 ; 01000000 segmento c
_sd = 8 ; 00001000
segmento d
_se = 4 ; 00000100
segmento e
_sg = 2 ; 00000010
segmento g
_sf = 1 ; 00000001
segmento f
_dp = 0x80 ; 10000000 segmento dp o
bat
7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
|
x |
seg c |
seg b |
seg a |
seg d |
seg e |
seg g |
seg f |
Dal punto di vista del programma, è possibile scrivere una
coppia indirizzo/dato di 4 bit, con L'ID 101:
Occorre inviare 6 bit di indirizzo anche se quelli relativi al
modulo stanno in 4 bit.
Si potranno scrivere anche un gruppo indirizzo/2 dati da 4 bit
(ovvero un intero carattere), sia un numero qualsiasi di dati da 4bit ad
indirizzi successivi auto incrementanti.
L'indirizzo viene incrementato per ogni 4 bit di dati, a partire dal primo valore
inviato.
La comunicazione inizia abbassando la linea CS
e si chiude quando questa viene riportata a livello alto.
Dato che l'interfaccia del modulo è composta da tre segnali:
e non comprende RD,
non è possibile la lettura. Quindi tutti i modi di Read e RMW,
previsti da HT1621, non sono applicabili.
Da notare che la linea DATA, per HT1621, è
bidirezionale, il che richiede che dal lato host passi in modo input quando
HT1621 trasmette dati. Però, nel caso di questo modulo, dato che la lettura
non è possibile, DATA sarà impostata solo come uscita sul lato del
microcontroller a cui il modulo è collegato.
Sul connettore a 6 pin, oltre a questi segnali, sono presenti anche l'alimentazione e
il LED+ di cui abbiamo parlato prima. Sulla serigrafia, sia di fronte
che sul retro del circuito stampato, sono riportate le indicazioni delle
funzione di ogni pin.
SPI?
Il venditore dichiara che il modulo dispone di una interfaccia
SPI.
In effetti, osservando i diagrammi forniti dal foglio dati di HT1621, si tratta
di una comunicazione seriale sincrona.
Il pin
CS
ha funzione analoga al SS/CS di SPI: quando si comunica con HT1621, deve
essere a livello basso. Se la linea è a livello alto, il chip non
accetta alcun dato.
Per la trasmissione di dati, si imposta il pin WR a livello basso, quindi si
imposta il pin DATA col valore voluto e si riporta il pin WR
a livello alto.
La transizione consente al chip di acquisire il dato. In questo caso WR
ha
funzione analoga a CLK della comunicazione SPI
La somiglianza, però, si ferma qui, perchè, in pratica,
esistono alcune grosse differenze:
-
Una interfaccia SPI standard ha due linee per i dati,
ingresso e uscita (MOSI/MISO o SDO/SDI), mentre HT1621 dispone di una sola
linea dati bidirezionale (DATA).
La cosa potrebbe essere corretta unendo SDO/SDI con DATA, ma interponendo un diodo Schottky
oppure una resistenza tra la
linea DATA e SDO, per isolare la condizione a livello alto.
-
In SPI la linea CLK è unica, ma
per HT1621 esistono DUE linee di clock: WR
quando si scrive e RD
quando si legge
Nel caso del modulo trattato, dato che RD
non è accessibile, si può utilizzare CLK di SPI collegato
a WR del
modulo, mentre RD
è ignorato (collegato a livello alto)
Il problema principale è che la lunghezza dei dati da
trasmettere è variabile a seconda della situazione:
-
un comando singolo richiede l'emissione di un ID a 3
bit,
seguito da comando a 8 bit e da uno 0 finale, per un totale di 12 bit
-
una serie di comandi inviati in successione richiede
l'emissione di un ID a 3 bit, seguito dai comandi a 9 bit, per un
totale di
3+(n*9) bit
-
un indirizzo più un dato richiede l'emissione di un
ID a 3 bit, seguito dall'indirizzo a 6 bit e dal dato a 4
bit, per un totale di 13
bit
-
se si invia un indirizzo e una sequenza di dati, si richiede
l'emissione di un ID a 3 bit, seguito dall'indirizzo a 6 bit e da
n dati a 4 bit, per un totale di 3 + (4*n) bit
Il modulo MSSP di un PIC a 8 bit è previsto per inviare 1
byte=8 bit. Si possono concatenare più emissioni, ma si tratterebbe comunque di
moduli da 8 bit, il che non soddisfa le specifiche di HT1621.
Occorre una periferica di trasmissione sincrona che possa variare il numero di
bit emessi oppure la scrittura di un driver ad hoc che non utilizzi MSSP.
In effetti, a parte la comodità di uso del modulo MSSP, HT1621 è un
dispositivo abbastanza lento ed è comandabile senza problemi manipolando i bit
di controllo.
Il foglio dati riporta la durata MINIMA degli impulsi di clock, che dipende
dalla lettura o scrittura e dalla tensione di alimentazione.
Nel modo Write, con Vdd=5V, l'impulso del clock deve essere al
minimo 1.67us e questo tempo si raddoppia con Vdd=3V.
Ovviamente, trattandosi di una trasmissione sincrona, va bene qualsiasi tempo
maggiore di questi limiti, sui quali probabilmente è meglio aggiungere un
qualche margine, dato che anche la temperatura e le impedenze dei collegamenti
microcontroller-modulo avranno influenza.
Il foglio dati specifica che la frequenza del clock in scrittura
deve essere al MASSIMO quella indicata:
Anche qui la dipendenza dalla tensione di alimentazione
consiglia di curare il timing della comunicazione.
In effetti, il venditore specifica che la Vdd debba essere
compresa tra 4.7 e 5.2V, in relazione alla retro illuminazione (sopratutto
quella di colore blu) ed alla
resistenza di polarizzazione della Vlcd che è fissa (R1=20k).
I comandi.
La tabella riporta i comandi ammessi da HT1621 ed
evidenziati quelli applicabili al modulo.
Nome |
ID |
Codifica |
D/C |
Funzione |
Def. |
READ |
110 |
A5A4A3A2A1A0D0D1D2D3 |
D |
Read data from RAM |
|
WRITE |
101 |
A5A4A3A2A1A0D0D1D2D3 |
D |
Write data to RAM |
|
R-M-W |
101 |
A5A4A3A2A1A0D0D1D2D3 |
D |
Read and write RAM |
|
SYS_DIS |
100
|
0000-0000-X |
C |
Turn system off |
* |
SYS_EN |
0000-0001-X |
C |
Turn system on |
|
LCD_OFF |
0000-0010-X |
C |
Turn off bias generator |
* |
LCD_ON |
0000-0011-X |
C |
Turn on bias generator |
|
TIMER_DIS |
0000-0100-X |
C |
Disable timer |
|
WDT_DIS |
0000-0101-X |
C |
Enable WDT |
|
TIMER_EN |
0000-0110-X |
C |
Enable timer |
|
WDT_EN |
0000-0111-X |
C |
Enable WDT |
|
TONE_OFF |
0000-1000-X |
C |
Tone off |
* |
TONE_ON |
0000-1001-X |
C |
Tone on |
|
CLR_TIMER |
0000-11XX-X |
C |
Clear timer |
|
CLR_WDT |
0000-111X-X |
C |
Clear WDT |
|
XTAL_32K |
0001-01XX-X |
C |
Crystal oscillator |
|
RC_256K |
0001-10XX-X |
C |
Internal RC oscillator |
* |
EXT_256K |
0001-11XX-X |
C |
External clock |
|
BIAS_1/2 |
0010-abX0-X |
C |
-
LCD 1/2 bias option
-
ab=00: 2 commons
option
-
ab=01: 3 commons
option
- ab=10: 4 commons option
|
|
BIAS_1/3 |
0010-abX1-X |
C |
-
LCD 1/3 bias option
-
ab=00: 2 commons
option
-
ab=01: 3 commons
option
- ab=10:
4 commons option
|
|
TONE_4K |
010X-XXXX-X |
C |
Tone frequency 4kHz |
|
TONE_2K |
011X-XXXX-X |
C |
Tone frequency 2kHz |
|
IRQ_DIS |
100X-0XXX-X |
C |
Disable IRQ |
* |
IRQ_EN |
100X-1XXX-X |
C |
Enable IRQ |
|
F1 |
101X-X000-X |
C |
Time base/WDT clock
output:1Hz
The WDT time-out flag after: 4s |
|
F2 |
101X-X001-X |
C |
Time base/WDT clock
output:2Hz
The WDT time-out flag after: 2s |
|
F4 |
101X-X010-X |
C |
Time base/WDT clock
output:4Hz
The WDT time-out flag after: 1s |
|
F8 |
101X-X011-X |
C |
Time base/WDT clock
output:8Hz
The WDT time-out flag after: 1/2s |
|
F16 |
101X-X100-X |
C |
Time base/WDT clock
output:16Hz
The WDT time-out flag after: 1/4s |
|
F32 |
101X-X101-X |
C |
Time base/WDT clock
output:32Hz
The WDT time-out flag after: 1/8s |
|
F64 |
101X-X110-X |
C |
Time base/WDT clock
output:64Hz
The WDT time-out flag after: 1/16s |
|
F128 |
101X-X111-X |
C |
Time base/WDT clock
output:128Hz
The WDT time-out flag after: 1/32s |
* |
TEST |
1110-0000-X |
C |
Test mode, user don't use |
|
NORMAL |
1110-0011-X |
C |
Normal mode |
* |
Poichè non sono accessibili alcuni pin, i comandi utili sono 6 (più due che
sono di default e non vanno modificati).
Non sono accessibili i pin BZ/BZ
e i comandi relativi al TONE non hanno effetto.
Non è accessibile il pin IR
e
le funzioni di WDT e Timer e quelle relative ai tempi non hanno
effetto esterno. Così pure le funzioni dell'oscillatore esterno;
l'oscillatore è quello interno RC_256, attivo per default all'arrivo
dell'alimentazione e non va modificato.
Così pure l'impostazione NORMAL non va modificata.
Mancando l'accesso a RD
non sono applicabili le funzioni READ e RMW.
Per le caratteristiche del modulo LCD, deve essere scelto BIAS 1/3 e COM 4.
Note:
- Alcune impostazioni sono fissate per default all'arrivo
dell'alimentazione mentre altre non lo sono.
- All'accensione il display è disabilitato e spento, per il minimo
consumo.
Con spento si intende che non sono presenti segmenti sul display, mentre lo
stato della retro illuminazione dipende dal jumper sul retro dello stampato;
all'arrivo è chiuso il jumper che mantiene il LED di retro illuminazione
tra Vdd e Vss, quindi sempre acceso.
Per attivare il display occorre una inizializzazione software del
modulo richiederà la trasmissione dei seguenti tre comandi in successione:
- SYS_EN
: abilita il sistema
- BIAS 1/3 COM4 : applica bias e com necessari
- LCD_ON
: accende il display (che non è la stessa cosa della retro illuminazione!)
NORMAL e RC_256k sono già definiti dal default e
non vanno modificati.
Per la retro illuminazione, se si è modificato il jumper sullo
stampato accedendo al pin LED+, occorrerà portarlo a livello alto. Se
non è stata fatta la modifica, la retro illuminazione è sempre accesa con la
Vdd presente.
-
Da notare che il contenuto della memoria non è azzerato
all'accensione e conterrà valori casuali che appariranno sul display
come segmenti accesi a caso.
Se necessario, si dovrà azzerare la memoria del modulo scrivendo 0 in tutte
le locazioni.
-
HT1621
non dispone di una decodifica tra dato e segmenti, per cui i bit inviati a 1
corrispondono a segmenti accesi, quelli a 0 corrispondono a segmenti spenti.
Occorre utilizzare una lookup table esterna per convertire i simboli
che si intendono presentare nella
corrispondente maschera di bit da visualizzare.
Driver. Nella
sezione Documentazione è presente il link ad alcune informazioni e al driver
per Arduino. Per i PIC Midrange Enhanced è stato scritto un
driver in Assembly e una applicazione di prova.
Documentazione.
|