Tutorials - Elettronica

 
 

3.5 digit LCD 7 segmenti


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:

  • CS

  • WR

  • RD

  • DATA

è 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 *
  • x - indifferente

  • A5:0 - indirizzi RAM

  • D3:0 - dati RAM

  • D/C - dato o comando

  • * - default al power reset

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:

  1. Alcune impostazioni sono fissate per default all'arrivo dell'alimentazione mentre altre non lo sono. 
     
  2. 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.

  1. 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. 

  2. 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.

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 16/11/17.