Sei sulla pagina 1di 8

SCRITTURA SU DISPLAY DISPLAYTECH LCD MODULE 64128K COG SERIES

Questo proggetto scrive a scopo illustrativo tutte le lettere dell'alfabeto alcuni caratteri speciali e tutti i numeri su display modello displaytech LCD MODULE 64128K COG SERIES, che utilizza un 65 x 128 Dot Matrix LCD Controller/Driver Sitronix ST7565R; per il controllo ho utilizzato un PIC16F876A e, la modalita di comunicazione PIC - DISPLAY avviene in modalit seriale non parallela.

Descrizione
Tempo fa comprai questo modulo LCD 64128K COG SERIES della Displaytech Ltd, mi spinse all'acquisto il prezzo veramente basso ma, una volta acquistato cominciai a navigare in internet alla ricerca di qualche esempio di utilizzo, risultato: il buio completo; Allora munitomi di documentazione ufficiale del display (scaricabile qui) e del Controller/Driver ST7565R (scaricabile qui) cominciai a studiare per la realizzazione di un software per la scrittura sul sopracitato display utilizzando mikroC con un PIC16F876A (datasheet del controller scaricabile qui). La descrizione del progetto e suddivisa in due sezioni, la parte circuitale (Hardware) e la parte software:

IL CIRCUITO
Il circuito molto semplice, sostanzialmente composto dal display LCD MODULE 64128K COG SERIES, comandato dal microcontrollore Microchip PIC16F876A, per l'adattamento dei segnali da 5V (del microcontrollore) a 3,3V (del display) ho utilizzato un integrato HCF4050BE hex buffer/converter non inverting (datasheet scaricabile qui). Per l'alimentazione sia del display che del microcontrollore ho utilizzato un alimentatore da pc dove ho trovato entrambi i voltaggi utili 3,3V per display (fili arancioni) e 5V per microcontrollore (fili rossi). Per quanto riguarda la descrizione dei pin del display, sono riportati in lingua inglese sulla documentazione del Controller/Driver Sitronix ST7565R ma di sequito ne dar

una breve descrizione, i pin sono riferiti alla modalit di comunicazione seriale e i voltaggi sono 3,3V (stato logico "H") e 0V (stato logico "L" ):
Pin 1: CS1 abilita - Disabilita la ricezione dei comandi, se lo stato logico "H"

disabilitato se "L" abilitato;


Pin 2: /RES resetta il registro dei settaggi, stato logico "L" rinizializza il

display, quindi va mantenuto ad "H";


Pin 3: A0 indica se il dato che riceve il display un comando (stato logico "L")

o un dato (stato logico "H");


Pin 4: /WR non utilizzato in modalit seriale quindi pu essere fissato ad uno

stato logico "H" o "L";


Pin 5: /RD non utilizzato in modalit seriale quindi pu essere fissato ad uno

stato logico "H" o "L";


Pin 6: - Pin 11: D0 - D5 non utilizzati in modalit seriale devono essere fissati

ad uno stato logico "H";


Pin 12: D6 o (SCL) clock input della comunicazione seriale (SPI-4); Pin 13: D7 o (SI) data input della comunicazione seriale (SPI-4); Pin 14: VDD alimentazione del display collegata a 3,3V; Pin 15: VSS alimentazione del display collegata a Massa; Pin 16 - Pin 21 Step-up Voltage Circuits in modalit 4X step-up utilizzando

condensatori da 1uF come da schema, vedere documentazione del ST7565R;


Pin 22 - 26 Servono per stabilizzare il liquido all'interno del display vanno

collegati a massa ciascuno con un condensatore la cui capacit varia in base alla grandezza del display, nel nostro caso 1uF come da schema;
Pin 27: C86 seleziona l'interfaccia: stato logico "H" = interfaccia 6800, stato

logico "L" = interfaccia 8080;


Pin 28: P/S seleziona la modalit di comunicazione, parallela "H" o seriale "L"

nel mio caso ho scelto la modalit seriale "L", ha il vantaggi di richiedere meno pin del PIC ma lo svantaggio di comunicare in sola scrittura quindi non possibile leggere ne lo stato ne i dati scritti su display; Lo schema in formato PDF scaricabile qui, mentre in formato KiCad per chi volesse fare modifiche o creare PCB scaricabile qui. Posto anche delle immagini del prototipo costruito su BreadBoard, poich non sono un buon fotografo sono venute con un po di fastidiosi riflessi, ma penso che rendano l'idea:

Foto 1) a display spento.

Foto 2) con scritte nere su sfondo bianco.

Foto 3) con scritte bianche su sfondo nero.

IL SOFTWARE
Il software un p pi complesso, composto da diverse funzioni che verranno descritte di seguito ed ha una main function che le richiama, qualora si volesse scrivere qualcosa di diverso basta lasciare le funzioni invariate ed andara a lavorare sulla main function che rimane molto intuitiva. il risultato finale del mio esempio di software uno scurimento graduale del display ed un successivo schiarimento con scrittura dell'alfabeto, dei caratteri speciali e dei numeri scritti in nero su bianco (come da foto2), attesa di qualche secondo riscurimento del display e scrittura dell'alfabeto, caratteri speciali e numeri scritti bianco su nero (come da foto3).

Il software stato scritto in MikroC ed scaricabile da QUI dove possibile trovare sia il progetto MikroC completo, sia il file .hex da caricare nella PIC16F876A. Descrizione delle Funzioni
In questo documento verranno descritte le funzioni che vengono utilizzate per settare il display cancellarlo completamente e scrivere tutti i principali carattei (Lettere, Numeri e principali caratteri speciali);

Nome funzione
Display_Init
Descrizione:
Display_Init()

Prototipo Funzione

Inizializza le porte di comunicazione del PIC e i principali parametri di configurazione del display, prima di richiamare questa funzione deve essere aggiunta la libreria SPI e devono essere dichiarate ed assegnate con l'istruzione (sbit) come globali le seguenti variabili ai relativi pin del PIC: sbit LCD_SCL at RXx_bit; (Dove Xx il pin del PIC che si vuole usare); sbit LCD_SI at RXx_bit; (Dove Xx il pin del PIC che si vuole usare);

sbit LCD_CS1 at RXx_bit; (Dove Xx il pin del PIC che si vuole usare);
sbit LCD_A0 at RXx_bit; (Dove Xx il pin del PIC che si vuole usare); sbit LCD_RES at RXx_bit; (Dove Xx il pin del PIC che si vuole usare); sbit LCD_SCL_Direction at TRISXx_bit; (Dove Xx il pin del PIC che si vuole usare); sbit LCD_SI_Direction at TRISXx_bit; (Dove Xx il pin del PIC che si vuole usare); sbit LCD_CS1_Direction at TRISXx_bit; (Dove Xx il pin del PIC che si vuole usare); sbit LCD_A0_Direction at TRISXx_bit; (Dove Xx il pin del PIC che si vuole usare); sbit LCD_RES_Direction at TRISXx_bit; (Dove Xx il pin del PIC che si vuole usare).

Premesso questo la funzione esegue le seguenti operazioni:

1. Imposta la direzione delle sopra citate porte come uscite del pic (esempio: LCD_RES_Direction = 0); 2. Inizializza le porte al valore logico 0 esempio (LCD_RES = 0); 3. Setta le impostazioni iniziali del display nel seguente modo:

Bias Select = 1/65 duty 1/9 bias; ADC SELECT: SEG0 TO SEG131; SHL SELECT: COM63 TO COM0; SET V0 VOLTAGE; ELECTRONIC VOLUME MODE SET; ELECTRONIC VOLUME REGISTER SET; SET BOOSTER RATIO = 4X; BOOSTER RATIO REGISTER SET; POWER SETTING (VF = ON; VR = ON; VC = ON;); NORMAL REVERSE DISPLAY; DISPLAY ON ;

per informazioni sulle sopra citate impostazioni consultare il datasheet del controller display ST7565R di cui dotato il modulo display, oltre a questa sommaria descrizione possibile usufruire dei commenti riportati sul software.

void InviaComando

void InviaComando(unsigned short dato)

Serve per inviare comandi al modulo LCD, come ad esempio tutte le sopracitate impostazioni, la selezione di una riga, di una colonna o pi semplicemente di una pagina, il parametro identifica il comando. Per ulteriori informazioni sui comandi si rimanda al datasheet del controller display ST7565R

void InviaDato

void InviaDato(unsigned short dato)

Serve per inviare gli 8 bit di scrittura al modulo LCD, ad esempio se siamo nella posizione riga 0 colonna 0 inviando come parametro di questa funzione 0B11111111 noteremo nel punto pi in alto a sinistra una riga larga un pixel e lunga 8 verso il basso, inviandolo per una seconda volta la colonna verra incrementata di uno e cos via.

Display_Clear

Display_Clear(unsigned short colore)

Serve per resettare il display tutto bianco o tutto nero a seconda se il parametro :

0 = Bianco; 1 = Nero;

Attenzione con questo comando vengono resettati tutti i pixel allo stato bianco o nero cancellando tutto ci che vi sotto.

void Display_All_Point

void Display_All_Point(unsigned short colore)

Serve per impostare il display allo stato attuale o tutto nero a seconda se il parametro :

0 = Immagine preesistente; 1 = tutto nero; A differenza del precedente non cancella la ram preesistente ma con parametro 0 reimposta l'immagine precedente.

void Display_Char

void Display_Char(unsigned short x, unsigned short y, char carattere, unsigned short colore)

Serve per scrivere il carattere contenuto nel parametro "carattere", nella posizione contenuta nei parametri (x,y) corrispondenti alle coordinate del display, con colore nero se il parametro colore >= 1 altrimenti bianco. I caratteri sono stati disegnati con un editor bitmap con grandezza 8 * 8 pixel e sono contenuti nei seguenti array all'interno del software:

array ALFABETO i caratteti da A a Z; array SPECIALI i caratteri speciali;


array NUMERI (numeri da 0 a 9);

Qualora si volessero aggiungere caratteri diversi da quelli da me creati, si possono disegnare con un editor bitmap con grandezza 8 * 8 pixel, ed aggiungerli ai vettori gia creati facendo per attenzione a cambiare la grandezza dei vettori stessi nell'istruzione di dichiarazione.

Siamo giunti alla fine di questo articolo, mi scuso con tutti i lettori per la mia incapacit di espressione, spero che tutto vi rimanga chiaro ma se cos non fosse mi metto a disposizione per rispondere alle vostre richieste;