Försöker få igång en 20x2 lcd behöver hjälp.
Försöker få igång en 20x2 lcd behöver hjälp.
Skulle behöva ha lite hjälp att få igång lcd'n. Detta är första gången jag försöker få igång en lcd överhuvud taget så jag räknade med lite problem.
Tar det ifrån början.
Använder mig av en svensk skriven guide som beskriver hur man får igång en lcd med styrkretsen HD44780. (visst någon på detta forumet som skrivit det) Och jag ska driva lcd'n med 4-bitars interface.
1. Men det första jag gjorde var att koppla in den enligt schema och matar på ström. Justerar kontrasten och vips så blir det fyrkantiga rutor på översta raden. Detta får jag anta är helt normalt.
2. Börjar sedan att skriva assembler för att skicka in i en Pic16f84 för att styra lcd'n.
3. Börjar med att initiera lcd'n som beskrivet.
4. Testar att koppla in Pic'en emot lcd'n. Det som synns är att nu är bägge raderna fyllda med svarta fyrkanter. Men som jag förstår så behöver det inte betyda att den är rätt initierad.
Sen så börjar mina bekymmer. Vet ej om jag måste skriva in kommandorna för att rensa displayen, ta fram cursor osv innan jag börjar skriva text.
Får det ej att funka hur jag än gör. Har testat lite olika kombinationer.
Tycker mitt program blir väldigt krångligt och svårt att hantera så det måste ju gå att göra på något enklare sätt.
Displayen jag använder (*borttagen*)
Börjar så här och fyller på efterhand om jag får några tips.
Tar det ifrån början.
Använder mig av en svensk skriven guide som beskriver hur man får igång en lcd med styrkretsen HD44780. (visst någon på detta forumet som skrivit det) Och jag ska driva lcd'n med 4-bitars interface.
1. Men det första jag gjorde var att koppla in den enligt schema och matar på ström. Justerar kontrasten och vips så blir det fyrkantiga rutor på översta raden. Detta får jag anta är helt normalt.
2. Börjar sedan att skriva assembler för att skicka in i en Pic16f84 för att styra lcd'n.
3. Börjar med att initiera lcd'n som beskrivet.
4. Testar att koppla in Pic'en emot lcd'n. Det som synns är att nu är bägge raderna fyllda med svarta fyrkanter. Men som jag förstår så behöver det inte betyda att den är rätt initierad.
Sen så börjar mina bekymmer. Vet ej om jag måste skriva in kommandorna för att rensa displayen, ta fram cursor osv innan jag börjar skriva text.
Får det ej att funka hur jag än gör. Har testat lite olika kombinationer.
Tycker mitt program blir väldigt krångligt och svårt att hantera så det måste ju gå att göra på något enklare sätt.
Displayen jag använder (*borttagen*)
Börjar så här och fyller på efterhand om jag får några tips.
Senast redigerad av Kent 2 juni 2004, 08:59:43, redigerad totalt 1 gång.
Låter som du har problem med initieringen på något sätt, ett utmärkt verktyg för att steg för steg kolla om man gör rätt, är denna "LCD-simulator"
http://www.geocities.com/dinceraydin/dj ... cdsim.html
http://www.geocities.com/dinceraydin/dj ... cdsim.html
Använde den här==> kika tråden http://www.geekjoan.com/forum/viewtopic.php?t=28
Angåede igångsättandet av min Lcd disp. så har jag inte kommit längre men kommer att skriva så fort jag tar upp det.
Angåede igångsättandet av min Lcd disp. så har jag inte kommit längre men kommer att skriva så fort jag tar upp det.
Dags att väcka denna tråd .
Har ju tagit mig ett tag med igår så gjorde jag ett försök. Började med att använda denna http://www.geocities.com/dinceraydin/dj ... cdsim.html men jag fick ändå inte det att funka. Och jag funderade och funderade. Sen så såg jag att det stod Lcd_Off. Började kolla lite på papperna jag har och såg att det fanns ett kommando i samma funktion som cursor on och cursor blink. Fick sedan igång det klockrent med simulatorn.
Testade sedan i verkligheten med Assembler. Och det funkade också klockrent.
Men det är en sak som jag måste få till innan jag kan börja använda den på riktigt så att säga. Och det är att mitt program är nog världens krångligaste. Att skriva ett ord tar ju för lång tid.
Så en smidigare initiering måste till och nå smidigare tabeller eller listor måste göras för orden.
Någon som har någon vägledning.
Här är ett exempel taget ifrån min initiering. Och på detta sättet kan jag inte hålla på.
Har ju tagit mig ett tag med igår så gjorde jag ett försök. Började med att använda denna http://www.geocities.com/dinceraydin/dj ... cdsim.html men jag fick ändå inte det att funka. Och jag funderade och funderade. Sen så såg jag att det stod Lcd_Off. Började kolla lite på papperna jag har och såg att det fanns ett kommando i samma funktion som cursor on och cursor blink. Fick sedan igång det klockrent med simulatorn.
Testade sedan i verkligheten med Assembler. Och det funkade också klockrent.
Men det är en sak som jag måste få till innan jag kan börja använda den på riktigt så att säga. Och det är att mitt program är nog världens krångligaste. Att skriva ett ord tar ju för lång tid.
Så en smidigare initiering måste till och nå smidigare tabeller eller listor måste göras för orden.
Någon som har någon vägledning.
Här är ett exempel taget ifrån min initiering. Och på detta sättet kan jag inte hålla på.
Kod: Markera allt
Init_display call DISP_DELAY
bcf PORTB,0 ;Sätt RS till 0
call DISP_DELAY
movf PORTB,W ;Lägger ut 0011
movwf portb
bsf portb,2
bsf portb,3
bcf portb,4
bcf portb,5
movf portb,W
movwf PORTB
call DISP_DELAY
bsf PORTB,1 ;Sätt E till 1 1ggr
call DISP_DELAY
bcf PORTB,1 ;Sätt E till 1
call DISP_DELAY
bsf PORTB,1 ;Sätt E till 1 2ggr
call DISP_DELAY
bcf PORTB,1 ;Sätt E till 1
call DISP_DELAY
bsf PORTB,1 ;Sätt E till 1 3ggr
call DISP_DELAY
bcf PORTB,1 ;Sätt E till 1
call DISP_DELAY
;---------------------------------------------------------------
bcf PORTB,2 ;Lägg ut 0010
call DISP_DELAY
bsf PORTB,1 ;Sätt E till 1 1ggr
call DISP_DELAY
bcf PORTB,1 ;Sätt E till 1
call DISP_DELAY
bsf PORTB,1 ;Sätt E till 1 2ggr
call DISP_DELAY
bcf PORTB,1 ;Sätt E till 1
call DISP_DELAY
;------------------------------------------------------------------
movf PORTB,W ;Lägger ut 1000
movwf portb
bcf portb,3
bsf portb,5
movf portb,W
movwf PORTB
call DISP_DELAY
bsf PORTB,1 ;Sätt E till 1 1ggr
call DISP_DELAY
bcf PORTB,1 ;Sätt E till 1
call DISP_DELAY
;-----------------------------------------------------------------
Jag brukar använda något i stil med detta...
Du klarar dig egentligen med de första tre funktionerna de övriga är bara till för att underlätta.
Du klarar dig egentligen med de första tre funktionerna de övriga är bara till för att underlätta.
Kod: Markera allt
;-- LCD Init
lcdinit
call delay15
movlw b'00100000' ; 4-bitar
movwf PORTB
bsf EN
bcf EN
movlw b'00101000' ; Entry Mode. 4-bit, 2-lines, font (00XYZ000)
call lcdcmd
;call lcdownchar
movlw b'00001100' ; Display on/off. Display On/Off, Cursor On/Off, Blink Cursor (00001XYZ)
call lcdcmd
movlw b'00000110' ; Entry mode. Cursor move dir, Display shift (000001XY)
call lcdcmd
return
;-- Send command to LCD
lcdcmd
movwf lcdtmp
andlw 0xF0
movwf PORTB
bcf RS
bsf EN
bcf EN
swapf lcdtmp, W
andlw 0xF0
movwf PORTB
bcf RS
bsf EN
bcf EN
call delay40u
return
;-- Send data to LCD
lcddat
movwf lcdtmp
andlw 0xF0
movwf PORTB
bsf RS
bsf EN
bcf EN
swapf lcdtmp, W
andlw 0xF0
movwf PORTB
bsf RS
bsf EN
bcf EN
call delay40u
return
;-- Clear LCD
lcdclear
movlw b'00000001' ; CLS, Long delay needed.
call lcdcmd
call delay1
call delay40u
return
;-- Sets cursor at pos 1 at line 1
lcdhome1
movlw b'00000010'
call lcdcmd
call delay1 ; Require longer delay
call delay40u
return
;-- Sets cursor at pos 1 at line 2
lcdhome2
movlw b'10101000'
call lcdcmd
return