|
NOKIA 3310 CONTROLLO LCD
| |||||||||
|
Questo display integra al suo interno il controller/driver PCD8544 realizzato dalla philips che gestisce ogni singolo pixel.
Come si vede dal immagine sul retro del display sono presenti 8 contatti
-vdd >alimentazione a max 3,3 volt
-sck >clock si usa per gestire l'invio dei dati all'lcd
-sdin > input dati
-d/c > serve per far interpretare i dati al controller
-sce >abilita lcd
-gnd >massa
-vout >collegato a massa con un condensatore elettrolitico da 1uf
-res >reset attivo a livello basso
-------------------------------------------------------------------------------------------------------
Per comunicare con questo lcd bisogna inviargli il dato composto da 8 bit serialmente sul pin sdin,sincronizzando ogni bit sul fronte di salita del clock fornito sul pin sck.
La sequenza da inviare la si vede nella tabella del datasheet a pagina 14.
1)function set=metto a massa in pin d/c... il bit H è il primo bit che si invia e a seconda del suo valore gli 8 bit che invierò in seguito sono riferiti alla gestione interna(H=1) del display (temp control,bias sistem,set vop)o alla gestione dei pixel (H=0).
-il bit V è in secondo bit che invio e dice al lcd se le coordinate sono riferite al asse x o y
-il bit PD serve per abilitare lcd.
2)display control=metto a massa in pin d/c...serve per selezionare il tipo visualizzazione attraverso il valore dei due bit D,E.
3)write data=metto a vcc il pin d/c...qua ho a disposizione 7 bit che mi dicono lo stato di ogni singolo pixel acceso quando 1 spento con 0...però dipende dal dipo di visualizzazione scelta se normal mode (D=1,E=0) o inverse video mode(D=1,E=1)
lo schermo è diviso in 6 righe (0,...,5) ciascuna riga è composta da 84colonne(0,...,83)
ciascuna divisa in 8 pixel.L'indirizzo di ogni singola colonna è incrementato automaticamente dal controller tuttavia esiste la possibilità di individuare ciascuna di queste attraverso il comando set x address,mentre per le righe set y address .
--------------------------------------------------------------------------------------------------------
PIC16F84/A
Per gestire questo schermo io ho adoperato un comunissimo pic16f84 alimentato a 3 volt.
il display pultroppo supporta una tensione massima di 3,3 volt per cui bisogna trovare un qualche sistema che adatti tale tensione se si intende adoperare qualche altro microcontrollore che supporta solo i 5 volt.
Il programma lo ho scritto con mikrobasic però vagando su internet ho trovato un listato scritto in assembly.
Il suo funzionamento è molto semplice creo delle costanti nelle quali salvo il valore che voglio inviare poi attraverso un ciclo for punto ogni singolo valore e lo converto a 8 bit in binario
for k=0 to 7
b=(a mod 2) 'controlla se divisione da il resto
a=(a div 2) 'dimezzo a
portb.1=b 'invio dato-valore del resto
portb.0=0 'clock
portb.0=1 'clock
next k
con questo sistema però mi si sfalsa in valore in quanto ad esempio
voglio mandare -
a b c d e f g
0 0 1 0 0 0 0 = 32 -per inizializzare function set
dove
g=H
f= V
e= PD
se mettessi 32 nel mio programma però no otterrei questo valore in uscita ma
0000100 =4- dove ho tutti i valori sballati
allora per questo nel mio programma devo mettere 4 cosi che in uscita ottenga
0010000= 32
lo stesso vale per tutti gli altri valori....volendo si potrebbe gestire la cosa diversamente ma
visto che con questo sistema funziona non ne ho cercato un altro....
------------------------------------------------------------------------------------------------------------------------
per velocizzare la ricerca del valore che deve assumere ogni colonna ho creato degli altri programmi con visual basic che mi forniscono già il dato da inserire nella costante....
IL PRIMO è:
i valori vanno sostituiti nella costante ma se si aumentano o diminuiscono al suo interno bisogna aggiornare il numero presente [] nelle due parentesi e nel ciclo for che la utilizza....
IL SECONDO è:
vagando nel web ho trovato un programma di disegno "FastLCD" aposito per creare le coordinate da utilizzare per il controllo dello schermo.
A questo punto viene creato un file si estensione .bas ,questo file lo si apre con visual basic
che lo riconosce come modulo si selezionano le coordinate e si preme copia....
una volta fatto questo si apre il mio programma e si incolla il tutto nello spazio più ampio...
si preme su conversione....si selezzionano le varie righe e si copia il loro contenuto sostituendolo a quello nella costante nel programma e il gioco è fatto....
Io per testare il tutto ho utilizzato una bread board e mi sono creato un piccolo stampato per collegarmi all lcd, volendo si possono saldare sei fili alle linguette ma cosi facendo mi si sono rotti 2 schermi.... perchè le linguette sono incollate e appena si sforza si stacca tutto....
-----------------------------------------------------------------------------------------------------------------------
Il programma in assembly in vece fa cosi:
-----------------------------------------------------------------------------------------------------------------------
PIC16F628/A
Altro programma(v2) questo contiene i dettagli di tutto lo schermo in un unica costante in questo caso l'ho fatto per visualizzare tre immagini diverse per cui ho dovuto cambiare il pic sono passato al 16f628 che ha piu memoria a disposizione 2k a differenza del 84 che ha 1k....comunquevolendo questo programma si puo utilizzare su qualsiasi microcontrollore se opportunamente adattato....
l'unica limitazione è rappresentata dalla memoria interna....
programma molto semplice nella costante metto i 504 valori provenienti dal programma di conversione
però lasciando lo 0, al inizio di ogni costante e mettendo il numero della stessa a 505
questo per mantenere la posizione perchè il primo valore letto dalla costante lo scherm
o non lo visualizza e parte dal secondo...quindi agiungendo lo 0, il valore della prima
colonna mi corisponde al valore della stessa nel programma da disegno e l immagine
mi risulta pari pari a quella disegnata(spero di essermi spiegato!!!!)....
byte[505]=(0,'------metto i 504 valori------------')
le conessioni sono le stesse del primo programma ho provato ad alimentare
schermo e pic a 5 volt e funziona normalmente....nonstante sul datasheet dello
schermo sia indicata la tensione massima di alimentazione a 3,3volt ....non so
spiegarmi il perchè funziona quando ho provato mi ero già preanunciato di bruciare
lo schermo e invece.....bo!!!
Le modifiche a questi soft sono infinite è possibile adattarli alle proprie esigenze
variando di poco il codice......
-----------------------------------------------------------------------------------------------------------------------
PIC12F629
Ecco un altro programma(v3) che sto giro utilizza un pic 12f629 piccolo e versatile
questa volta ho aggiunto anche la posibilità di variare il tipo di visualizzazione mediate un semplice pulsante....modifica che è attuabile su tutti i programmi precedenti....
Le conessioni sono molto semplici:
Il programma è molto semplice il funzionamento è come i precedenti l'unica novità
è il ciclo che controlla il valore di una variabile e a seconda se questa è pari o dispari
invia il comando per cambiare il tipo di visualizzazione...
Il pic deve essere configurato con oscillatore interno attivo cosi da poter utilizzare i pin
gpio.4 /5 come normali pin i/o....e disattivare MCLR su gpio.3 cosi da usare anche
questo come normale pin.
-------------------------------------------------------------------------------------------------------------------------
download:
|