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