Inicialicace LCD
KPR
kpr
Středa Březen 17 14:29:46 CET 2004
Ne, to mas to pravdepodobne dobre,ale moc kratke. - enable by trval mene nez
mikrosekundu, to ti zadny LCD radic ani nestihne pobrat...
Ja to delam takto :
Vychazim z toho ze zapisovat muzu bud instrukci , nebo znak. Vychazim z 8
bitoveho zapojeni , kde 8 bit jsou data + 3 ridici signaly
Takze instrukce :
1) na datovou sbernici (port) poslu cislo instukce
2) nastavim ridici signal, ze se bude zapisovat do instrukcniho registru
3) nastavim ridici signal enable = 1
4) nejaka pauza. Pouzivam PIC, s vyhodou pouzivam watchdog timer, ktery
"pocka" 36ms a pak jde program dal
5) nastavim ridici signal enable = 0
A zapis znaku ...
1) ascii hodnotu znaku poslu na datovou sbernici (port)
2) nastavim ridici signal, ze se bude zapisovat do datoveho registru
3) nastavim ridici signal enable = 1
4) nejaka pauza. Pouzivam PIC, s vyhodou pouzivam watchdog timer, ktery
"pocka" 36ms a pak jde program dal
5) nastavim ridici signal enable = 0
Poznamka:
pri zapisu znaku se ti automaticky inkrementuje adresa. Takze dalsim
zapsanim se ti inkrementuje nebo dekrementuje kurzor. (to zalezi jak bylo na
zacatku pri inicializaci nastaveno. Default je inkrementace). Kdyz zapises
tedy 2 znaky za sebou, tak na displeji se ti objevi ty dva za sebou ...
No a kdyz chces se vratit treba na puvodni pozici , zacatek displeje , tak
na sbernici das cislo 128 , a odesles ho jako instrukci.
KPR
----------------------------------------------------------------------------
-----------------------------------------
P.S tady je zdrojak pro PIC16F84 , myslim ze je to z toho velice
pochopitelne.
PUTINS pracuje tak ze do hlavniho accumulator-registru ulozim hodnotu a
zavolam danou funkci. Ona pote data odesle jako instrukci.
PUTCHAR pracuje tak ze do hlavniho accumulator-registru ulozim ASCII hodnotu
a zavolam danou funkci. Ona pote data odesle jako znak.
jinak program udela to, ze na displeji se ti objevi '0123456789' .
LIST P = 16F84, R = DEC
include<p16f84.inc>
#define Enable PortA,0 ;Ra0 sign?l enable (= n?co jako Strobe) , 1 =
enabled , 0 = disabled
#define ReadWrite PortA,1 ;Ra1 Read=1 / Write=0
#define TypDat PortA,2 ;Ra2 0 - instrukce , 1 - data
#define MemBank STATUS,RP0
Offram equ 0x0C
MEM_W equ Offram
MEM_S equ Offram+1
XData equ Offram+2
Adresa equ Offram+3
Znak equ Offram+4
Instrukce equ Offram+5
; Adresy ??dk? LCD 4x16
;00h..0Fh
;40h..4Fh
;14h..23h
;54h..63h
;nastaven? option = 01001001 = 73 sleep bude trvat 36ms
;nastaven? p?eru?en? = 00000000 = 0 p?eru?en? zak?z?na
; ======= Za??tek programu - organizace p?eru?en? a programu
======================
Org 0
Goto Init ;startovn? obsluha (nastaven? port? atd. , pak n?b?h do hlavn?ho
programu Main)
Org 4 ;obslu?n? podprogram p?eru?en?
Goto IntProc
; ======= Po??te?n? program - nastaven? CPU a port? ======================
Init
BSF MemBank ;registrov? sada 1
MOVLW 73 ;nastaven? option zaps?no do W
MOVWF OPTION_REG ;nastaven? W-> Option
CLRF TRISA ;Piny PORTA jsou jako vystupy
CLRF TRISB ;Piny PORTB jsou jako vystupy
BCF MemBank ;registrov? sada 0
MOVLW 0
MOVWF INTCON
MOVLW 0
MOVWF PORTA
MOVLW 0
MOVWF PORTB
Goto Main
; ======= MAIN program ======================
Main
movlw 1
movwf Instrukce
call PUTINS
movlw 1
movwf Instrukce
call PUTINS
movlw 2
movwf Instrukce
call PUTINS
movlw 6
movwf Instrukce
call PUTINS
movlw 12
movwf Instrukce
call PUTINS
movlw 20
movwf Instrukce
call PUTINS
movlw 56
movwf Instrukce
call PUTINS
movlw 128 ;adresa prvn?ho znaku
movwf Instrukce
call PUTINS
movlw 48
movwf Znak
call PUTCHAR
movlw 49
movwf Znak
call PUTCHAR
movlw 50
movwf Znak
call PUTCHAR
movlw 51
movwf Znak
call PUTCHAR
movlw 52
movwf Znak
call PUTCHAR
movlw 53
movwf Znak
call PUTCHAR
movlw 54
movwf Znak
call PUTCHAR
movlw 55
movwf Znak
call PUTCHAR
movlw 56
movwf Znak
call PUTCHAR
movlw 57
movwf Znak
call PUTCHAR
goto Hotovo
Hotovo
goto Hotovo ; nekone?n? smy?ka :-)
; ======= Obsluha p?eru?en? ======================
IntProc
MOVWF MEM_W ;z?loha W
MOVF STATUS,W ;p??prava z?lohy STATUS
MOVWF MEM_S ;z?loha STATUS
MOVLW 0
MOVWF INTCON
MOVF MEM_S,W ;p??prava obnoven? Status
MOVWF STATUS ;obnoven? status
SWAPF MEM_W,F ;p??prava obnoven? W
SWAPF MEM_W,W ;obnoven? W
RETFIE ;n?vrat z p?eru?en?
; ======= Funkce pro pr?ci s LCD ======================
PUTINS
movf Instrukce,W ;v prom?nn? ins je ulo?en k?d instrukce , ten se tam ulo??
p?ed vol?n?m funkce
movwf PORTB
bcf TypDat ;instrukce
bsf Enable
sleep ;usne na 36ms
bcf Enable
return
PUTCHAR
movf Znak,W ;v prom?nn? char je ulo?en ascii znak , ten se tam ulo?? p?ed
vol?n?m funkce
movwf PORTB
bsf TypDat ;data
bsf Enable
sleep
bcf Enable
return
END ;konec programu
----------------------------------------------------------------------------
-----------------------------------------
----- Original Message -----
From: "Martin Z?ruba" <swz@volny.cz>
To: <hw-news@list.gin.cz>
Sent: Saturday, February 23, 2002 11:49 AM
Subject: Re: Inicialicace LCD
> Jeste mne napada: jak dlouhy ma byt puls Enable?
> Ja mam Atmela na 24 Mhz a Enable delane
>
> setb Enable
> nop
> clr Enable
> nop
>
> staci to?
>
> Martin Zaruba
>
>
>
Další informace o konferenci Hw-list