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: 431141,
indicazione sul c.s. SYD2315.
Le dimensioni sono molto ridotte e le immagini fornite non ne
rendono conto: il circuito stampato è circa 32*29mm,
mentre l'area del display è circa 12*24mm.
Il modulo LCD può presentare 31/2 cifre a 7 segmenti con un punto decimale, come visibile nella foto qui
sopra.
La presenza di un solo punto decimale è una scelta incomprensibile: a nostro parere,
si tratta di una
grave limitazione che impedisce l'uso del modulo in molte applicazioni; ad
esempio, per
usarlo come display per uno strumento di uso generale, potrebbero occorrere altri due punti decimali.
Il modulo dispone di retro illuminazione (colore blu) ed è previsto per
funzionare tra 4.3 e 5.5V.
Quattro fori agli angoli dello stampato facilitano il fissaggio del modulo su
un pannello.
|
Un connettore a 6 pin consente di interfacciare il modulo con un
microcontroller.
- VSS - gnd comune
- VDD - alimentazione positiva
- CS - chip select
- WR - clock scrittura
- RD - clock lettura
- BL - retro illuminazione
- DATA - linea dati bidirezionale
|
I caratteri sono visibili con una luce ambiente normale anche senza
backlight.
Per luminosità ambiente basse, come normale per i display LCD, sarà necessaria
la retro illuminazione; questa viene comandata applicando al pin BL la tensione di
alimentazione positiva.
La corrente del LED di retro illuminazione è limitata dalla R3=180ohm, che
determina una corrente di circa 10mA.
Questo valore, però, rientra nelle possibilità di gestione della maggior parte
dei microcontroller, quindi il pin BL può essere comandato
direttamente da un I/O digitale senza interporre buffer.
Il valore della corrente può essere anche ridotto, sostituendo la resistenza
serie R3 saldata sullo stampato o aggiungendone una esterna. L'illuminazione è
ancora adeguata abbassando la corrente a 5-6mA. La scelta dipenderà dall'applicazione.
Rinunciando alla retro illuminazione, il modulo assorbe meno di 10uA se il
sistema non è attivato (default all'accensione SYS_OFF e LCD_OFF), mentre la
corrente sale a 0.4mA con i segmenti accesi (dopo i comandi SYS_ON e LCDON).
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 6 indirizzi (da 0 a 5).
Ogni indirizzo contiene 4 bit, corrispondenti ai 4 COM, quindi occorre una
coppia di indirizzi per ogni cifra a 7 segmenti visualizzabile sul pannello.
Da notare che la cifra iniziale 1 è comandata come un unico
segmento dal COM1-SEG0.
Indirizzo |
0-1 |
2-3 |
4-5 |
Digit |
1&2 |
3 |
4 |
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 = 1 ; 00000001 segmento
a
_sb = 2 ; 00000010 segmento b
_sc = 4 ; 00000100 segmento c
_sd = 8 ; 00001000
segmento d
_sf = 0x10 ; 00010000
segmento f
_sg = 0x20 ; 00100000
segmento g
_se = 0x40 ; 01000000
segmento e
_dp = 0x80 ; 10000000 segmento dp o
cifra 1
7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
|
x |
seg e |
seg g |
seg f |
seg d |
seg c |
seg b |
seg a |
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:
è anche possibile la lettura. Quindi tutti i modi di Read e RMW,
previsti da HT1621, 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. Se non si utilizza la lettura, DATA sarà impostata solo come uscita sul lato del
microcontroller a cui il modulo è collegato, mentre RD
sarà collegato alla Vdd.
Sul connettore a 6 pin, oltre a questi segnali, sono presenti anche l'alimentazione e
il pin BL per il comando della retro illuminazione. Se non occorre
questo comando, BL va collegato alla Vdd.
Sulla serigrafia a 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
Se occorre impiegare anche la funzione di lettura, è necessario inviare
il clock della trasmisisone sincrona sia su WR
che su RD
.
Se non si utilizza la lettura, si può impiegare il 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.
Da osservare il tempo di lettura è praticamente doppio di quello di
scrittura.
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:
Di nuovo, notiamo la maggiore lentezza della lettura e la dipendenza dalla tensione di alimentazione,
che consigliano di curare il timing della comunicazione.
In effetti, il venditore specifica che la Vdd debba essere
compresa tra 4.3 e 5.5V, in relazione alla retro illuminazione (di colore blu) ed alla
resistenza di polarizzazione della Vlcd che è fissa (R1=12k).
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 8 (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.
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 pin BL.
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.
-
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.
|