Home
Accesso / Registrazione
 di 

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

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

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di giuskina

ottimo !

sarà scontato per un professionista ma per un niubbo come me no!! E poi si possono anche fare lettere, vi rcordate l metodo di fare i numeri e girare la calcolatrice ? Chi nono l'ha mai fatto????

ritratto di mingoweb

Purtroppo le lettere non si

Purtroppo le lettere non si possono visualizzare con questo tipo di display!

ritratto di Fabrizio87

queste mi piacerebbe

queste mi piacerebbe realizzarlo,
ma c'è un problema fondamentale sul mio computer non c'è più la porta parallela.

ritratto di mingoweb

Esistono dei convertitori da

Esistono dei convertitori da USB a parallela. Il pc riconoscerà LPT1 e quindi puoi utilizzare tutti i software che desideri!

ritratto di stewe

Perchè limitarsi ad un

Perchè limitarsi ad un display come questo se i display LCD con controller HD44780 si trovano su ebay a pochissimi euro?
Diciamo che un 16 caratteri (qualsiasi carattere ASCII ed eventuali simboli personalizzabili) per 2 righe retroilluminato riuscite a farvelo spedire a casa con meno di 5 €...
Il funzionamento è simile e se ci affiancate un PIC, potete facilmente comandarlo via seriale!
Se invece usate una board Arduino, le cose diventano ancora più semplici: avendo il chip di conversione seriale-usb, la comunicazione seriale potrà essere effettuata tramite USB (in simulazione di porta COM).
Bello no?

ritratto di NIck_BG

porta parallela

In effetti la mancanza della porta parallela costituisce un grosso problema...
Comunque essendone il mio computer fornito ho intenzione di cimentarmi nei prossimi giorni...
Vi farò sapere...

ritratto di Alex87ai

Al link che propongo c'è

Al link che propongo c'è una breve guida su come interfacciare un display lcd alfanumerico gestito da HD44780 tramite la porta LPT del computer (anche se obsoleta, ma il progetto sembra interessante soprattutto per chi dispondendola ancora sul proprio fisso e non usandola, può creare un vero e proprio modding del proprio PC aggiungendo uno strumento che indica la quantità di memoria RAM utilizzata, carico della CPU e temperatura della stessa!!!)

http://www.moddingplanet.it/classic/printer.php?action=review&id=125&page=1

ritratto di NIck_BG

link postato da Alex

Il link che hai postato è davvero completo...
Anche le immagini illustrative sono abbastanza chiare e si riescono a capire tutti i collegamenti fatti step-by-step.

Mi sapete suggerire un sito affidabile dove scaricare un software per LCD?

Grazie in anticipo

ritratto di Alex87ai

Guarda, sempre nel link che

Guarda, sempre nel link che ho postato ci sono dei nomi di software che cercati con google dovresti riuscire a trovarli molto facilmente...e a quanto c'è scritto sono pure free!! Magari, sui siti ufficiali dei software, potresti incappare in qualche altro schema che illustra il collegamento del display al PC ;)

ritratto di stewe

Ecco il link di LCD Smartie:

Ecco il link di LCD Smartie: http://lcdsmartie.sourceforge.net/
Buoni LCD a tutti!

ritratto di mingoweb

Non è un progetto molto

Non è un progetto molto innovativo, ma molto utile per eventuali studi scolastici!

ritratto di giuskina

mingo...

... è chiaro che non leggi le lettere su questo tipo di display nfatti la mia era una battuta ? Adesso che lo sai l'hai capita??? Comunque, grazie del link al modding (ora ho una lista di preferiti da approfondre lunga qualche anno luce) W arduino e anche gli LCD :O

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ultimi Commenti