Esercitazioni ASM - PIC18

 


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.
    - 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.


 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 13/01/13.