Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/ognigiorno.com/wp-content/plugins/math-comment-spam-protection/math-comment-spam-protection.php:1) in /var/www/html/ognigiorno.com/wp-includes/feed-rss2.php on line 8 Display – OgniGiorno.com https://www.ognigiorno.com insieme tutti i giorni Sun, 13 Mar 2011 20:29:23 +0000 en-US hourly 1 https://wordpress.org/?v=5.8.10 Come pilotare i display LCD tipo HD44780 https://www.ognigiorno.com/2009/03/30/come-pilotare-i-display-lcd-tipo-hd44780.html https://www.ognigiorno.com/2009/03/30/come-pilotare-i-display-lcd-tipo-hd44780.html#respond Mon, 30 Mar 2009 08:12:13 +0000 http://www.ognigiorno.com/?p=254 Read More »Come pilotare i display LCD tipo HD44780]]> Un valido dispositivo di output quando si lavora con i controllori è il display LCD. Ne esistono diversi per dimensioni (numero di righe e lunghezza righe). Quello mostrato nella foto è 2×16, ma l’interfacciamento è lo stesso anche con altre dimensioni. Il protocollo qui descritto (con allegato codice sorgente in C) prevede un interfacciamento di 4 bit di dati (oltre ai 3 di controllo).

hd44780

I collegamenti del display
(Fare comunque riferimento alla documentazione tecnica del produttore. Nel mio caso si tratta di Hitachi HD44780)

Pin Nome
1 Vss
2 Vdd
3 Contrasto (collegare a massa)
4 RS
5 RW (di solito a massa)
6 E
7 D0 (n.c. per interfacciamento a 4 bit)
8 D1 (n.c. per interfacciamento a 4 bit)
9 D2 (n.c. per interfacciamento a 4 bit)
10 D3 (n.c. per interfacciamento a 4 bit)
11 D4
12 D5
13 D6
14 D7

Dalla tabella vediamo che per utilizzare un collegamento a 4 bit dobbiamo utilizzare i 4 più significativi del display, il register Select (RS) e il pin Enable (E)

Protocollo di comunicazione

  1. Portare RS a 1 per invio dati, 0 per invio di comando
  2. Portare E a 1
  3. Valorizzare i 4 bit più significativi
  4. Portare E a 0
  5. Portare E a 1
  6. Valorizzare i 4 bit meno significativi
  7. Portare E a 0

In caso di interfacciamento a 8 bit, i dati vanno inviati tutti in una volta
Inserire un ritardo di almeno 2ms tra ogni operazione

Inizializzazione del display
Appena acceso, il display, va inizializzato, inviando i comandi base. Primo fra tutti la selezione del modo di comunicazione a 4 o 8 bit.
La sequenza esatta è visibile dal codice sorgente scaricabile qui

Inviare caratteri al display
Dopo l’inizializzazione è possibile inviare i caratteri trasmettendo il loro valore ASCII.
Il display incrementa automaticamente la posizione, quindi non è necessario fare nulla tra un carattere ed il successivo

Il codice allegato
Il codice che allego l’ho testato con controllori PIC (!6f506, 16F84, 16F689 e 16F887), ma è utilizzabile con tutti i controllori che hanno almeno 6 piedini disponibili.

]]>
https://www.ognigiorno.com/2009/03/30/come-pilotare-i-display-lcd-tipo-hd44780.html/feed 0
Modulo display a 7 segmenti https://www.ognigiorno.com/2009/03/11/modulo-display-a-7-segmenti.html https://www.ognigiorno.com/2009/03/11/modulo-display-a-7-segmenti.html#respond Wed, 11 Mar 2009 11:00:21 +0000 http://www.ognigiorno.com/?p=139 Read More »Modulo display a 7 segmenti]]> Nella progettazione e realizzazione dei progetti adotto da tempo la tecnica “modulare” che consiste nella realizzazione di periferiche con interfacciamento standard (seriale nel caso specifico). Vediamo qui la scheda del modulo display a 7 segmenti.

display

Le caratteristiche principali:

  • 4 cifre
  • Interfaccia seriale 9600 baud
  • 256 byte EEPROM

csdispp

L’interfaccia seriale comunica utilizzando il protocollo descritto qui ed implementa i seguenti comandi:

  • aggiunta cifra a destra
  • cancellazione ultima cifra inserita
  • cancel completo (porta a 0 tutte le cifre)
  • Lettura valore visualizzato
  • Scrittura EEPROM
  • Lettura EEPROM

L’utilizzo tipico avviene tramite tastiera, per cui ad ogni tasto premuto viene visualizzata la relativa cifra, partendo da destra con shift verso sinistra. Il comando di lettura del valore visualizzato permette la completa asincronicità tra display e utilizzatore: quando serve viene letto il valore.

Gli ultimi due comandi servono per sfruttare la memoria EEPROM disponibile sul controllore, che per la gestione dei disply non vengono utilizzate. Siccome c’è sempre carenza di memoria, perché non sfruttarla?

Schema elettrico

schemadisplay

R1-R4: 1k ohm

R5-R12: 330 ohm

T1-T4: BC517

DIS1-DIS4 Display anodo comune

Il controllore visualizza i valori delle 4 cifre, multiplexando i 4 display, alimentati tramite 4 darlington. L’interfaccia seriale lavora a livelli TTL e sfrutta gli stessi pin utilizzati per la programmazione (ICSP).

Firmware

Allego il progetto completo MPLAB. Il compilatore utilizzato è il PICC di Hitech

Per implementare altri comandi di deve modificare la funzione

unsigned char interrupt ricezione(void), in particolare intervenendo nel blocco switch, inserendo altri case, riferiti ai comandi da implementare:

...
c = GetCommand();
if (!c) {
switch (read_Buff(2)) {
case 5:
...

Esempio di utilizzo

ecco ora una parte del codice di un progetto che utilizza il modulo:

c = ReadKey();
switch (c) {
case 0x0a:
sendCommand (0x35, 6, 0);
break;
case 0x1a:
sendCommand (0x35, 7, 0);
break;
case 0x0b:
DelayMs (200);
sendCommand (0x35, 8, 0);

if (getCommand()==0)
sendSlave();
break;
default:
DelayMs (200);
c += 0x30;
sendCommand (0x35, 5, c);
}

]]>
https://www.ognigiorno.com/2009/03/11/modulo-display-a-7-segmenti.html/feed 0