Försöker få igång en 20x2 lcd behöver hjälp.

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
Kent
Inlägg: 156
Blev medlem: 19 januari 2004, 10:48:05
Ort: Södra Dalarna
Kontakt:

Försöker få igång en 20x2 lcd behöver hjälp.

Inlägg av Kent »

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.
Senast redigerad av Kent 2 juni 2004, 08:59:43, redigerad totalt 1 gång.
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Har du tillräckliga pausar mellan kommandona som du skicka till displayen?
Användarvisningsbild
Xyzzy
Inlägg: 1222
Blev medlem: 30 januari 2004, 22:31:07
Ort: Uppsala, Sweden

Inlägg av Xyzzy »

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
Användarvisningsbild
tusse
Inlägg: 1364
Blev medlem: 19 augusti 2003, 21:56:17
Ort: Järfälla

Inlägg av tusse »

Kolla inkopplingen.
Kent
Inlägg: 156
Blev medlem: 19 januari 2004, 10:48:05
Ort: Södra Dalarna
Kontakt:

Inlägg av Kent »

Okey ska kolla allt det där när tillfälle ges.

Återkommer i ärendet :wink:
gvs
EF Sponsor
Inlägg: 1688
Blev medlem: 18 oktober 2003, 14:20:34
Ort: Göteborg
Kontakt:

Inlägg av gvs »

kent: var hittade du den guiden?
Kent
Inlägg: 156
Blev medlem: 19 januari 2004, 10:48:05
Ort: Södra Dalarna
Kontakt:

Inlägg av Kent »

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.
Kent
Inlägg: 156
Blev medlem: 19 januari 2004, 10:48:05
Ort: Södra Dalarna
Kontakt:

Inlägg av Kent »

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

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
;-----------------------------------------------------------------
netbear
Inlägg: 116
Blev medlem: 27 maj 2003, 21:52:29
Ort: Karlskrona
Kontakt:

Inlägg av netbear »

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.

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
Kent
Inlägg: 156
Blev medlem: 19 januari 2004, 10:48:05
Ort: Södra Dalarna
Kontakt:

Inlägg av Kent »

Vid första anblicken så ser det avancerat ut. En del kommandon som jag inte använt än. Men ska ta en riktig kik på det i dagarna.
Om det inte är allt för mycket besvär så skulle du kunna kommentera lite?
Skriv svar