ESERCITAZIONE # 12b
Occorre per prima cosa specificare le caratteristiche del modulo LCD. Una
cartella LCDLocalModels contiene diversi esempi già pronti per l' uso
per alcuni dei più comuni moduli LCD.
La forma tipica di un file è questa:
;************************************************************************
;** Variables for Newhaven NHD-0216KHZ-NSW-BBW-L - 5V **
;************************************************************************
#DEFINE LCDLocalModel
;
; Newhaven NHD-0216KHZ-NSW-BBW-L , controller SPLC780D or ST7066U or
; S6A0069 , Vdd = 5V
; LCD local model
;====================
LCDTYPE = 0
; Hitachi inititialization
LCDLINENUM = 2 ; 2 lines
LCDCHARXLINE = d'16' ; 16 char per line
LCDVOLT = 5
; power supply 5V only
LCDSHRTWAIT = d'38' ; short wait
LCDLNGWAIT = d'1520' ; long wait
TWEH = d'300'
; E pulse
TCYE = d'500'
; E cycle
TDDR = d'120'
; data setup in read operation
; DDRAM address of each line
LCDL1 = 0x00 ; selects line 1
LCDL2 = 0x40 ; selects line 2
;**************************************************************
; parameters calculation for WHILE cycles adding nops
; nop = 1 TCYC [ns]
LCDTWEH equ (TWEH/TCYC)
LCDTDDR equ (TDDR/TCYC)
LCDTCYE equ ((TCYE-TWEH)/TCYC)
;************************************************************** |
E' necessario specificare i seguenti parametri, facilmente rilevabili dal
foglio dati del modulo:
Parametro |
Valori
ammessi |
Note |
LCDTYPE |
LCDTYPE = 0 ; standard HD44780
LCD
LCDTYPE = 1 ; KS066/ST0766 short init.
LCDTYPE = 2 ; KS0073 special command set |
Questo parametro definisce il tipo
di controller impiegato dal modulo LCD.
Nel caso di dubbio, utilizzate la scelta 0, che, essendo quella con i
parametri di temporizzazione più conservativi, si adatta a qualsiasi
tipo di controller. |
LCDLINENUM |
[1,2,3,4] |
Questo parametro definisce il
numero di linee del display LCD. Serve a comunicare al driver su quante
linee si sta lavorando. |
LCDCHARXLINE |
da 8 a 40 |
Questo parametro definisce il
numero dei caratteri per linea. Sono possibili scelte da 8 a 40. |
LCDVOLT |
5 o valori minori |
Questo parametro definisce la tensione di
lavoro del modulo LCD. Ha lo scopo di aumentare le temporizzazioni se la
tensione è minore di 5V. |
LCDSHRTWAIT |
us |
E' il tempo minore di esecuzione di un comando o di trasferimento di
un dato. Il valore è espresso in us. |
LCDLNGWAIT |
us |
E' il tempo massimo di esecuzione dei comandi di clear e home. Il
valore è espresso in us. |
TWEH |
us |
E' il tempo minimo per il quale il segnale E deve rimanere a livello
alto |
TCYE |
us |
E' il tempo di ciclo del segnale E |
TDDR |
us |
E' il tempo di setup dei dati in lettura |
LCDL1
LCDL2
LCDL3
LCDL4 |
hex
|
Valore dell' indirizzo di inizio delle varie linee |
L' Assembler, poi, si incarica di calcolare i parametri LCDTWEH,
LCDTDDR, LCDTCYE in funzione di quanto impostato e della
durata di un ciclo di istruzione, che dipende dal clock del processore.
- LCDTYPE è un valore imposto
arbitrariamente per differenziare alcuni tipi fondamentali di controller
LCD.
- 0 Il valore si applica ai controller che dichiarano nel
foglio dati una inizializzazione come quella del modello Hitachi 447880. Questa scelta,
in genere, è adeguata per ogni modulo e può essere
adottata quando non si abbiano informazioni precise sul controller
usato.
- 1 si applica ai controller genere KS066/ST0766 che supportano una
inizializzazione più breve.
- 3 viene usato per definire controller del genere KS0073 che
dispongono di un set di comandi esteso
- LCDLINENUM e LCDCHARXLINE
sono evidentemente quelli del modulo usato. Non sono previsti dal driver
moduli 4 x 40,
dato che questi sono in realtà realizzati da 2 moduli 2 x 40 e richiedono
un doppio segnale di enable.
- LCDVOLT è la tensione di
alimentazione. Se minore di 4.5V determina un aumento di alcuni tempi di
esecuzione per adattarsi alle specifiche del foglio dati dei controller.
- LCDSHRTWAIT e successivi sono i tempi
rilevabili dal foglio dati del controller.
- LCDL1/4 sono gli indirizzi di partenza
delle linee, anche questi rilevabili dal foglio dati. Questi parametri sono
stati aggiunti in quanto alcuni controller hanno una mappa di memoria dei
caratteri visualizzati sulle linee diversa da quella del 44780. Anche questo
si rileva dal foglio dati del modulo.
Per facilitare il lavoro, una cartella LCDLocalModule
contiene una serie di definizioni di moduli di uso comune, già pronte per l'
uso e che basta inserire nel sorgente. Nel caso di moduli non presenti nella
lista, sarà facile adattarne uno al dispositivo in uso.
Pure il file LCDuni8_18Fio.def : esso
contiene i collegamenti tra i port del microcontroller e il modulo. Il file di default è il seguente:
;************************************************************************
;** LCDuni8_18Fio.def - LCD 8 bit mode driver - I/O definitions **
;************************************************************************
;--> Change definitions depending on the hardware configuration
;
; LCD connections
; ===================
;LCD data lines
LCDtris equ TRISC
; LCD data port direction
LCDportr equ PORTC
; read from LCD data port
LCDportw equ LATC
; write to LCD data port
;LCD control lines
#define LCD_Etris TRISB,0x02 ; E on portB,2
#define LCD_RStris TRISB,0x00 ; RS on portB,0
#define LCD_Ew LATB, 0x02
#define LCD_Er PORTB,0x02
#define LCD_RSw LATB, 0x00
#define LCD_RSr PORTB,0x00
#if LCDRW == 1
; RW will be used - RW mode
#define LCD_RWtris TRISB,0x01 ; RW on portB,1
#define LCD_RWw LATB, 0x01
#define LCD_RWr PORTB,0x01
#endif
;*********************************************************************** |
Ovviamente l' utente dovrà modificare le definizioni a seconda dei collegamenti
fisici.
Da notare che, per evitare il problema
R-M-W, vengono definiti sia i PORT che i LAT, i primi usati in lettura, i
secondi in scrittura.
|