Sida 1 av 2

P16F877 + LCD 4x20

Postat: 6 mars 2005, 22:49:18
av Mutiaz
Hej!

Får inte min lcd att fungera,, blir bara svarta fyrkanter på den. Antagligen initieringsproblem tror jag..

E0 = RS
E1 = E
E2 = R/W

Dom andra portarna kör jag på portb0,b1,b2 osv..

Här är koden jag kör nu:

Kod: Markera allt

DEFINE	LOADER_USED	1
Pause 400

' Define LCD pins 
DEFINE LCD_RSREG  PORTE 
DEFINE LCD_RSBIT  0 
DEFINE LCD_EREG  PORTE 
DEFINE LCD_EBIT  1 
DEFINE LCD_RWREG  PORTE 
DEFINE LCD_RWBIT  2 
DEFINE LCD_DREG  PORTB 
DEFINE LCD_DBIT  0 

' Pre-start 
Pause 500                      ' Wait for LCD to wake up 
LCDOut $FE, 1         'Initiate LCD by clearing display 

Pause 500            'Wait for LCD to initiate 

LCDOut $FE, 1
LCDOut "Hej"
Pause 500

End

Postat: 6 mars 2005, 22:59:45
av AndLi
Ja det är defenitivt ett initeringsproblem, mig veterligen är det betydligt fler kommandon som behövs för att sätta upp den korrekt.. Så titta i databladet för drivkretsen igen och se vad du missar...

Postat: 6 mars 2005, 23:50:48
av cyr
Jag vet inte vad det är du programmerar i, men om det finns en LCDout-funktion, finns det då inte en färdig LCDinit eller liknande också?

Postat: 7 mars 2005, 00:00:12
av jack
PicBasic eller?
Ska nog inte behövas fler kommandon än sådär. Men kolla PicBasic-manualen så ser du exakt hur du ska göra.

Annars så vet jag inte.

EDIT: Från manualen:

Kod: Markera allt

	' Set LCD Data port
	DEFINE LCD_DREG	PORTB
	' Set starting Data bit (0 or 4) if 4-bit bus
	DEFINE LCD_DBIT	4
	' Set LCD Register Select port
	DEFINE LCD_RSREG	PORTB
	' Set LCD Register Select bit
	DEFINE LCD_RSBIT	1
	' Set LCD Enable port
	DEFINE LCD_EREG	PORTB
	' Set LCD Enable bit
	DEFINE LCD_EBIT	0
	' Set LCD bus size (4 or 8 bits)
	DEFINE LCD_BITS	4
	' Set number of lines on LCD
	DEFINE LCD_LINES	2
	' Set command delay time in us
	DEFINE LCD_COMMANDUS	2000
	' Set data delay time in us
	DEFINE LCD_DATAUS	50

Postat: 7 mars 2005, 13:12:16
av Mutiaz
Ja det är PicBasicPro jag kör.. Jag ska testa det när jag kommer hem..

Postat: 8 mars 2005, 14:52:41
av Mutiaz
På 16F877 måste man sätta några pinnar på nått digitalt tjaffs. Då skriver jag ADCON= 7

Är det inte något liknande jag måste skriva till P16C84?

Postat: 8 mars 2005, 15:01:29
av Icecap
ADCON finns inte på 16x84......

Postat: 8 mars 2005, 15:04:53
av Mutiaz
Nej det vet jag.. Men finns det inte något motsvarande som jag kanske har missat i min kod till P16C84?

Kod: Markera allt

DEFINE	LOADER_USED	1


' Define LCD pins 
DEFINE LCD_DREG  PORTA 
DEFINE LCD_DBIT  0 
DEFINE LCD_RSREG  PORTA 
DEFINE LCD_RSBIT  4 
DEFINE LCD_EREG  PORTB 
DEFINE LCD_EBIT  3 
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50



' Pre-start 
Pause 500                      ' Wait for LCD to wake up 
LCDOut $FE, 1         'Initiate LCD by clearing display 

Pause 500            'Wait for LCD to initiate 

LCDOut $FE, 1
LCDOut "Hej"
Pause 500


End

Edit: Det enda jag ser på LCDn är Svarta rutor fortfarande.

Postat: 8 mars 2005, 18:54:49
av cyr
RS på RA4 är kanske inte så bra, för den är väl open drain på '84... Fast är den inte det på 877 också förrsten? Kommer inte ihåg, men testa en annan pinne iaf är mitt tips.

Postat: 8 mars 2005, 19:00:32
av Icecap
Eller sätt en pull-up motstånd på 10K där.

Postat: 8 mars 2005, 19:14:54
av Mutiaz
Det har jag redan!

Jag kör efter exemplet i PicBasic manualen på sidan 96.
Fast den är gjord till en 2x16 lcd.. den jag har är en 4x20 men det är väl bara att man ändrar lines´en från två till 4?

Postat: 8 mars 2005, 19:25:38
av Jine
Testa och kör med 2 "Lines" bör väl fugera som en 2x20 då?

Postat: 8 mars 2005, 19:26:42
av Mutiaz
Jo men det funkar ändå inte..
Problemet är ju att det bara blir svarta rutor

Postat: 8 mars 2005, 19:40:27
av Icecap
Om det bara blir svarta rutor brukar kontrasten att vara för kraftig. Sänk den.

Postat: 8 mars 2005, 19:44:13
av Mutiaz
Det har jag testat.. Ingen skildnad..