Nelle applicazioni a microcontrollore sono sempre più presenti i display grafici. Li si trovano un po' ovunque e, data la loro flessibilità e i costi decisamente abbordabili, stanno soppiantando in diversi casi i display alfanumerici. La scelta offerta dal mercato è ampia sia in termini di controller, quanto di dimensioni dei pannelli LCD, tanto per quanto concerne gli aspetti cromatici. Ad oggi, molti compilatori offrono librerie di interfacciamento con display ma per meglio capire come funzionano e tentare una nuova sfida, si vuole proporre un modo per la realizzazione di proprie routine per la gestione dei display grafici, senza utilizzare tool "preconfezionati". Obiettivo, tra gli altri, è anche quello di permettere la portabilità tra compilatori, così da poter conservare buona parte del lavoro svolto qualora si decida di migrare di piattaforma. Chi fosse interessato ai display alfanumerici, può trovare in questo articolo e quest'altro articolo le informazioni in merito a come pilotare quel tipo di LCD.
Indice |
I controller grafici: una rapida panoramica
Tra i controller grafici per display monocromatici, si annoverano due famiglie di controller che storicamente hanno fatto incetta del mercato dei display: il KS0108/KS0107 di Samsung e il T6963C di Toshiba. Il primo è ottimo per display relativamente piccoli, mentre il secondo può pilotare pannelli di dimensioni maggiori. Questo articolo tratterà il solo KS0108, non è escluso che prossimamente venga pubblicato un articolo su T6963C. Fatte salve le differenze nelle modalità di interfacciamento, le routine grafiche invece possono avere elementi in comune.
Display grafico 128x64 con controller KS0108
Per capire come funziona il KS0108, si prende in considerazione un display grafico abbastanza comune, con risluzione 128x64, come quello di figura.Il controller è connesso al pannello LCD in modo tale che il display viene suddiviso in due lati, destro e sinistro, e ciascun lato è ulteriormente suddiviso in settori, chiamati pagine. Ciascuna lato ha dimensione orizzontale pari alla metà della dimensione orizzontale del pannello, cioè 64 pixel; ciascuna pagina ha invece dimensione verticale pari a 8 pixel.
Per accedere al singolo pixel del display è necessario pertanto stabilire:
- a quale lato appartiene il pixel (sinistro o destro);
- a quale pagina appartiene il pixel (0,...,7);
- quale pixel della pagina è quello che si vuole accendere o spegnere;
Tutte queste informazioni sono passate al controller per mezzo del bus parallelo e di segnali di controllo del display. Il pinout di un tipico display è quello riportato in tabella:
Pin | Simbolo | Funzione svolta |
---|---|---|
1 | CS1 | Chip select per il lato sinistro |
2 | CS2 | Chip select per il lato destro |
3 | Vss | GND |
4 | Vdd | Alimentazione per la logica (+5V) |
5 | V0 | Regolazione contrasto |
6 | RS | Dati o comandi (istruzioni) |
7 | R/W | Lettura o scrittura |
8 | E | Chip Enable |
9 | DB0 | Bus parallelo - bit 0 |
10 | DB1 | Bus parallelo - bit 1 |
11 | DB2 | Bus parallelo - bit 2 |
12 | DB3 | Bus parallelo - bit 3 |
13 | DB4 | Bus parallelo - bit 4 |
14 | DB5 | Bus parallelo - bit 5 |
15 | DB6 | Bus parallelo - bit 6 |
16 | DB7 | Bus parallelo - bit 7 |
17 | RST | Reset (attivo basso) |
18 | Vout | Uscita in tensione negativa (-10V) |
19 | LED_A | Retroilluminazione: anodo |
20 | LED_K | Retroilluminazione: catodo |
Il significato dei pin è il seguente.
Bus parallelo
Si tratta di un bus bidirezionale, impiegato per trasferire dati e istruzioni (comandi) dal microcontrollore al controller del display e per trasferire dati e status dal display al micrcontrollore. I pin DB0, .., DB7 rappresentano gli 8 bit del bus parallelo.
Segnali di controllo
Sono cinque segnali con i quali è possibile svolgere diverse funzioni:
- CS1, CS2: da impiegarsi per accedere al lato sinistro e al lato destro del display, secondo la tabella:
CS1 | CS2 | |
---|---|---|
Lato sinistro | 0 | 1 |
Lato destro | 1 | 0 |
- RS: se posto a 1 sul bus parallelo transitano dati, se posto a 0 transitano istruzioni
- R/W: se posto a 1 si accede al controller in lettura, se posto a 0 vi si accede in scrittura
RS | R/W | Funzione svolta |
---|---|---|
0 | 0 | Scrittura di istruzioni |
0 | 1 | Lettura dello stato |
1 | 0 | Scrittura di dati (dal microcontrollore alla RAM del display) |
1 | 1 | Lettura di dati (dallla RAM del display al microcontrollore) |
- E: il segnale di Chip Enable deve seguire una transizione positiva (da 0 a 1) o negativa (da 1 a 0) a seconda che si voglia trasferire i dati dal microcontrollore al display o viceversa.
Alimentazione, contrasto e retroilluminazione
I pin rimanenti sono relativi all'alimentazione dei circuiti logici, alla regolazione del contrasto e all'alimentazione della retroilluminazione:
Vdd | Alimentazione per la logica (+5V) |
Vss | GND |
V0 | Regolazione contrasto |
Vout | Uscita in tensione negativa (-10V) |
RST | Reset |
LED_A | Retroilluminazione: anodo (+5V) |
LED_K | Retroilluminazione: catodo (GND) |
Lo schema di collegamento dell'alimentazione, regolazione del contrasto della retroilluminazione è il seguente:
Uno schema per iniziare
Eccoci giunti alla messa in pratica. Prima di iniziare è doveroso tracciare uno schema elettrico, così da disporre di una base dalla quale partire. Come si nota, il microcontrollore impiegato è un PIC18F4550, ma è possibilie impiegare un qualunque altro PIC che sia a 40 pin e che abbia una struttura analoga a quella del micro in oggetto, come ad esempio il PIC18F4620 ma anche il PIC16F877.
Lo schema proposto sfrutta l'oscillatore interno del PIC, permettendo quindi l'utilizzo di due pin per eventuali altre funzionalità. Si noti che, per semplicità, non è stata riportata la connessione ICSP per la programmazione.
La lista dei componenti è facilmente deducibile, ma la ripropongo qui per completezza:
IC1: 7805
IC2: PIC18F4550
Display: grafico 128x64, con controller KS0108
C1: 100nF
C2: 100uF, 25V
C3: 100nF
R1: 10k trimmer
A questo punto non resta che procurarsi il materiale e iniziare a montare il tutto. Consiglio vivamente di realizzare una scheda, anche su millefori (non è necessario un PCB), ma sconsiglio l'utilizzo di una bread-board. Per quanto riguarda il display, si veda il link in bibliografia.
Nella prossima puntata...
Nel secondo appuntamento, che verrà pubblicato a breve, saranno illustrati i comandi che il PICMicro dovrà impartire al display per le fasi di inizializzazione e di accesso alle aree grafiche.
Licenza
Questo articolo rientra nell'ambito della licenza CREATIVE COMMONS BY-NC-ND Italia 3.0, secondo quanto indicato nelle note legali qui riportate.
Sintesi delle note legali (italiano)
Ogni riferimento a marchi di terze parti si è reso necessario esclusivamente per dare senso a questo articolo. I marchi citati appartengono alle aziende proprietarie.
Biblografia
- Sito web PicExperience