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