L’uso dei display LCD low-cost su porta LPT

L’uso dei display LCD (Liquid Crystal Displays - Display a Cristalli Liquidi) nelle realizzazioni embedded è un classico argomento di discussione. Parecchi anni fa affrontai il problema della costruzione di dispositivi aventi come semplice uscita un display numerico a 7 segmenti. Nella realizzazione finale optai come soluzione per un display LCD ad 8 cifre controllato da un particolare LCD controller denominato HT1621B. Non fui molto soddisfatto a causa del costo di questa soluzione: era di circa 10 $, malgrado risultasse competitivo.

Durante una recente visita ad un negozio di componentistica ho visto dei modelli a 3$ (modello TIC8148) e li ho acquistati. Una breve ricerca in internet mi ha fornito dettagli su questo dispositivo: si tratta di un LCD con Chip Su (On) Vetro (Glass) (COG) o, in altri termini, un display LCD con il controller al suo interno. Una più particolareggiata ricerca di un breve datasheet si concluse senza giungere ad una chiara comprensione su come usare il TIC8148. C’era solo qualche consiglio su come usare un chip COG denominato ML1001 (che viene considerato come driver LCD, vedi fig. 1)

TIC8148_LCD_COG
Pic. 1.– TIC8148: LCD con COG.

Le specifiche tecniche disponibili per questo LCD controller erano assai più complete ed esaustive della documentazione riguardo al TIC8148. L’ ML1001 è uno shifter register dotato di 40 linee di uscita, per pilotare 40 segmenti LCD e che può essere connesso in cascata per pilotare fino a 80 o 120 segmenti. Analogamente il TIC8148 è formato da 2 driver LCD aventi struttura interna simile a quella mostrata in fig.2.

TIC8148 internal structure

Il diagramma degli ingressi ed uscite del COG sono riferite al TIC8148.

Eccone una breve descrizione:

      1 - VDD tensione di alimentazione positiva, nel range dei 2..6 V

2- GND terra

3 – LOAD switch dell’impulso di registro (stato degli 80 segmenti)

4 – DIN ingresso seriale per il caricamento dei dati

5 – DCLK impulso di clock per i dati seriali

6 – CHK verifica dell’output (generalmente non utilizzato)

I dati in ingresso vengono regolati in base alla cresta del segnale di DCLK e, dopo 80 cicli di clock, agiscono modulando la linea di ingresso LOAD, switchandone l’uscita dei tronconi in uscita.

TIC8148_segments_numbering
Pic. 3. – TIC8148 segments numbering.

Il TIC8148 dispone di soli 72 segmenti, come uscita. Dunque le uscite dell’ML1001 dal #73 al #80 non sono connesse. Lo schema citato per i segmenti LCD è sempre quello di Fig. 1. Le cifre sono numerate da #1 a #8 da sinistra a destra. Ogni cifra richiede 9 bit. Generalmente ogni cifra è espressa da 7 segmenti (A, B, C , D, E, F, G) seguiti da quello relativo alla virgola decimale (segmento P) e dall’informazione opzionale relativa al simbolo V (segmento H).

I dati relativi allo shift-register COG vengono clockati tenendo conto in primo luogo del Bit Più Significativo (Most Significant Bit - MSB - Bit più significativo). Ciò significa che il segmento #80 dovrebbe essere il primo, tra i tronconi di file, e che quello #1 dovrebbe essere l’ultimo. Durante il trasferimento dei dati la prima parte è costituita da un dato fittizio (i segmenti #73-#80 non sono connessi) seguita da 72 bit di dati reali. Potete fare riferimento alla tabella pubblicata qui sotto per vedere lo schema di riferimento dei bit di dati e relativi segmenti del TIC8148.

TIC8148_segments_mapping
Table 1. – TIC8148 segments mapping.

Ecco un breve esempio di applicazione in C# per il TIC8148. Per realizzarla in modo più semplice si è scelto di usare la porta parallela (LPT) di un PC. Ho deciso di usare 4 dei canali della porta LPT per controllare ed alimentare l’LCD tramite COG. Lo schema è rappresentato in Fig. 4.

PIC4_SCHEME
Pic. 4. – Connection of TIC8148 to PC LPT port.

Descrizione dello schema elettrico

Spesso il buffer di uscita della porta parallela di un PC è in grado di pilotare il TIC8148 direttamente. Personalmente consiglio l’uso di un buffer in tutti i casi in cui la distanza tra la porta parallela e l’LCD superi i 20 cm. Nella maggior parte dei casi il buffer di uscita della porta LPT di un PC è in grado di fornire l’ alimentazione ad un dispositivo esterno come un LCD pilotato da un COG. Sia il TIC8148 che il 74HC244 possono lavorare nel range dei 2..6 V. Non c’è dunque alcuna necessità di correggere i livelli del segnale. Il canale D2 della porta parallela fornisce l’alimentazione di 3,3 V allo stabilizzatore di tensione. Il circuito può essere alimentato da sorgente esterna. Il diodo VD1 protegge la porta LPT in caso di danno derivante da alimentazione esterna. Il buffer del 74HC244 è in grado di fornire un’immagine dei dati in ingresso e di pilotare l’LCD.. I canali D0, D4 e D5 sono quelle che pilotano LOAD, DCLK e DIN.
La Fig. 5 mostra uno screenshot di una semplice applicazione Windows in C#, mentre la n. 6 è la foto di un prototipo funzionante. Fornisce l’ora del PC al TIC8148.

Screenshot_Windows_TIC8148_application
Pic. 5. – Screenshot of Windows TIC8148 application.
TIC8148 Working_prototype
Pic. 6 – Working prototype

La descrizione del codice
Windows non fornisce le librerie necessarie per gestire direttamente la porta LPT. Per controllare le linee d’uscita di LPT si è optato in favore della soluzione di terze parti inpout32.dll. E’ dotata di un metodo relativo alla scrittura dei dati verso la porta ed un altro per la lettura. In appendice troverete esempi su come accedere ai vari metodi della libreria.

In appendice B trovate il listato dei codici sorgente relativi alla routine principale. Quando Windows Application intercetta un evento dal Timer 1, legge l’ora corrente del PC e la converte in formato decimale.

La tracciatura dei dati, dalla ricezione fino all’LCD non è complicata. Generalmente per rappresentare i dati relativi ad un LCD a 8 cifre si ricorre alla tracciatura tramite un vettore ad 8 byte. Per semplificare l’uso di tale vettore si è usata la tabella di conversione “hex2digits” con 16 ingressi. Ad ognuno di questi ingressi viene associato un numero in esadecimale da 0X0 a 0XF per andare a formare una cifra dell’LCD. Come già detto, ogni cifra viene rappresentata da 9 bit (7 relativi ai segmenti del display, 1 per il segmento V ed 1 per la virgola). Per eliminare complicazioni durante la conversione si suppone che l’intero insieme degli 80 spezzoni di bit abbiano la seguente struttura:
1) 1 byte fittizio (segmenti #80,…,#73)
2) 8 per la visualizzazione della cifra (dati LCD + virgola)
Con queste premesse una semplice tabella di conversione permetterà di ottenere in uscita il risultato desiderato.

Appendix A

(import of library function for PC port access)

using System;
using System.Runtime.InteropServices;
using System.Threading;
public class PortAccess
{
[DllImport("inpout32.dll", EntryPoint="Out32")]
public static extern void Output(int adress, int value);
[DllImport("inpout32.dll", EntryPoint="Inp32")]
public static extern int Input( int adress);
}

Appendix B

(main module to output data over PC parallel port to LCD)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace TIC8148
{
public partial class Form1 : Form
{

Scarica il codice: Download - TIC8148_LPT.pdf

Scarica subito una copia gratis
Tags:

12 Commenti

  1. Avatar photo giuskina 7 Febbraio 2011
  2. Avatar photo Fabrizio87 7 Febbraio 2011
  3. Avatar photo stewe 7 Febbraio 2011
  4. Avatar photo NIck_BG 7 Febbraio 2011
  5. Avatar photo Alex87ai 7 Febbraio 2011
  6. Avatar photo NIck_BG 7 Febbraio 2011
  7. Avatar photo Alex87ai 7 Febbraio 2011
  8. Avatar photo stewe 7 Febbraio 2011
  9. Avatar photo mingoweb 7 Febbraio 2011
  10. Avatar photo mingoweb 7 Febbraio 2011
  11. Avatar photo mingoweb 7 Febbraio 2011
  12. Avatar photo giuskina 9 Febbraio 2011

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend