hellow,
ik heb hier een 4*20 LCD display voor me liggen dat enkel maar rare tekens produceert. (YM2004A)
De LCD wordt aangestuurd door een pic 16f628a geprogrammeerd in mikroC.
Dezelfde setup werkt wel met een lcd display van 2*16 karakters.
bekabeling is al enkele keren nagemeten, dus ik denk niet dat hier het probleem zit.
Hieronder de code die ik gebruik:
// LCD module connections
sbit LCD_RS at RA0_bit;
sbit LCD_EN at RA1_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISA0_bit;
sbit LCD_EN_Direction at TRISA1_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections
// Define Messages
char message1[] = "hello";
void main() {
CMCON |= 7; // Disable Comparators
Lcd_Init(); // Initialize LCD
delay_ms(1000);
Lcd_Cmd(_LCD_CLEAR); // Clear display
delay_ms(500);
Lcd_Out(1,1,message1); // Write message1 in 1st row
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
delay_ms(500);
}
De display geeft nu op lijn 3 enkele 0'en en een underscore weer.
Kan er iemand mij een beetje helpen troubleshooten?
thx
hadv
Just find out what you like and let it kill you
Je moet de LCD wel laten weten dat je het 4-bits protocol gebruikt. Zat info op internet (ik heb het even niet paraat).
K-4U
"We cannot solve our problems with the same thinking we used when we created them." - Albert Einstein
geef je lcd_init() functie eens?
Meestal staat in de datasheet van je display ook de timing van de data en enable lijnen.
Gaat het om een hd44780 display trouwens?
Je kan ook altijd even hier kijken --> http://www.dinceraydin.com/djlcdsim/djlcdsim.html
Dit is een online hd44780 LCD simulator.
Edit.. ik zie nu pas dat je het wel werkend hebt gekregen met een 2x16 display.. In de init-functie moet je het display een byte sturen dat hij 4x20 is.. Hij weet dat niet zelf
[Bericht gewijzigd door K-4U op (22%)]
okey, ik slaag er maar niet in om mijn lcd_init() functie op te roepen of te wijzigen, mijn ervaringen met mikroC zijn dan ook eerder beperkt.
ik heb al alles van timing geprobeerd, dus ik denk niet dat het daar aan ligt.
Het is een KS0066 controller, maar ik dacht dat deze hd44780 compatibel was?
iemand enig idee hoe ik men pic wijsmaak dat er een LCD aanhangt met 4 lijnen?
thx
Ik ben niet echt thuis met PIC's (wel met andere microcontrollers). Ik zie dat je in- en uitgangen over port-A en port-B hebt verdeelt. Is het niet handiger alles op één port te zetten.
Lcd-init() zal op een of andere manier moeten weten over welke port hij moet sturen. Waarschijnlijk is PortB default en hoef je die niet expliciet mee te geven. Gebruik je andere poorten dan moet je dat aangeven.
iemand enig idee hoe ik men pic wijsmaak dat er een LCD aanhangt met 4 lijnen?
Dat hoef je die PIC niet wijs te maken, dat moet je de compiler vertellen, waarschijnlijk door instellen van de juiste variabelen/parameters die je aan functies kunt meegeven.
Ik heb even snel gekeken, op internet is veel te vinden. b.v. deze link geeft een voorgekookt voorbeeld voor een 4-lijns aansturing (ook hier het LCD op portB) http://www.mikroe.com/eng/chapters/view/17/chapter-4-examples/#c4v12
met 4 lijnen bedoelde ik eerder 4 lijnen op het display ipv van 4 datalijnen voor de besturing ervan.
ik vind de LCD_init() file wel terug op mijn pc, maar kan hem niet bewerken.
Het commando dat men pic zegt dat ik werk met een display van 20*4 ben ik ook nog niet tegengekomen.
Ik heb nu alles naar poort B gebracht, maar dat haalt ook weinig uit. vermits het met een ander display wel werkte denk ik niet dat hier het probleem kan liggen.
gr
[Bericht gewijzigd door sdf op (21%)]
Je stuurt anders maar 4 datalijnen aan volgens je source. Maar dat zal wel de standaard voor micro-c zijn.
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
Is er niet een variable waarmee je kunt aangeven wat voor type display aangesloten is? Standaard zal dat wel 2x16 zijn. 4x20 moet anders aangestuurd worden, de compiler moet dit wel weten.
dat antwoord hoopte ik hier ook te vinden, verder ben ik ook nog niet geraakt, ik zoek ondertussen verder.
LCD_clear werkt ook niet, evenals alle andere functies.
de kursor is wel aan het knipperen om mijn LCD, dus ik krijg hem blijkbaar gewoon niet aangestuurd.
[Bericht gewijzigd door sdf op (43%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik gebruik MikroBasic Pro, met dezelfde LCD routines.
Die werken standaard met 16x2 en 4x20 displays zonder verdere instellingen...
K-4U
"We cannot solve our problems with the same thinking we used when we created them." - Albert Einstein
Ik heb nu precies hetzelfde probleem.. Maar bij mij is het ook volgens mij C gerelateerd..
De output die ik ongeveer krijg:
"(pi)V0.2
j(pi)V0.2"
Terwijl er hoort te staan:
"EIR Display
V0.2"
Vind deze mikroC modules erg wazig werken.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Maar bij mij is het ook volgens mij C gerelateerd..
De libraries zijn volgens mij in Pascal geschreven, en gelijk voor de Mikroxxx-Pro compilers.
Je kunt deze file proberen, zelfde voorbeeld in MBPro:
(Als die niet werkt, ligt 't aan het display...)
' * Project name:
program Lcd
' Lcd module connections
dim LCD_RS as sbit at RA0_bit
LCD_EN as sbit at RA1_bit
LCD_D4 as sbit at RB4_bit
LCD_D5 as sbit at RB5_bit
LCD_D6 as sbit at RB6_bit
LCD_D7 as sbit at RB7_bit
LCD_RS_Direction as sbit at TRISA0_bit
LCD_EN_Direction as sbit at TRISA1_bit
LCD_D4_Direction as sbit at TRISB4_bit
LCD_D5_Direction as sbit at TRISB5_bit
LCD_D6_Direction as sbit at TRISB6_bit
LCD_D7_Direction as sbit at TRISB7_bit
' End Lcd module connections
dim txt1 as char[10]
txt2 as char[10]
txt3 as char[10]
txt4 as char[10]
main:
TRISA = 0
TRISB = 0
CMCON = 7 ' Configure AN pins as digital I/O
txt1 = "Regel 1"
txt2 = "Regel 2"
txt3 = "Regel 3"
txt4 = "Regel 4"
Lcd_Init() ' Initialize Lcd
Lcd_Cmd(_LCD_CLEAR) ' Clear display
Lcd_Cmd(_LCD_CURSOR_OFF) ' Cursor off
Lcd_Out(1,4,txt1) ' Write text in 1st row
Lcd_Out(2,6,txt2) ' Write text in 2nd row
Lcd_Out(3,8,txt3) ' Write text in 3rd row
Lcd_Out(4,10,txt4) ' Write text in 4th row
while TRUE ' Endless loop
wend
end.
:02000000EA28EC
:10000600103083120313FD00FD0B072800000800C3
:10001600083083120313FC002330FD00FD0B11286A
:06002600FC0B112808008C
:04002C0000000800C8
:1000300083120313D41B1E2886131F288617541BF4
:100040002328061324280617D41A282886122928BC
:100050008616541A2D2806122E2806162018322825
:10006000051433280510851416208510D4193A2854
:1000700086133B28861754193F2806134028061775
:10008000D418442886124528861654184928061282
:100090004A28061620184E2805144F2805108514E6
:1000A00016208510201C56280B20572803200800F6
:1000B0008312031320105308D400182020140800C2
:1000C000831203134F08013A031D69288030CF00C3
:1000D00080284F08023A031D7028C030CF008028C6
:1000E0004F08033A031D77289430CF0080284F082B
:1000F000043A031D7E28D430CF0080288030CF0002
:100100005003F0004F08F0077008CF007008D400CB
:1001100018202010D2015208510784000008003A2C
:1001200003199A285208510784000008D300582068
:08013000D20A8B2820140800FC
:1001380083160313851005100612861206138613FC
:1001480083128510051086130613861206120B20DB
:100158000B200B20861606168514162085100B20FA
:100168008514162085100B208514162085100B2069
:1001780006128514162085100B208514162085106C
:10018800861286178514162085100B2086130616EE
:1001980085141620851006128514162085100B204C
:1001A80085141620851006168514162085100B2038
:1001B8000612851416208510861706178616061649
:0C01C8008514162085100B202014080060
:1001D4008316031385018601073083129F00523072
:1001E400C4006530C5006730C6006530C7006C3098
:1001F400C8002030C9003130CA00CB015230B900E8
:100204006530BA006730BB006530BC006C30BD009F
:100214002030BE003230BF00C0015230AE00653025
:10022400AF006730B0006530B1006C30B2002030F0
:10023400B3003330B400B5015230A3006530A400DC
:100244006730A5006530A6006C30A7002030A800F8
:100254003430A900AA019C200130D40018200C30AD
:10026400D40018200130CF000430D0004430D10035
:1002740060200230CF000630D0003930D100602039
:100284000330CF000830D0002E30D100602004307D
:10029400CF000A30D0002330D100602050295129EA
:02400E0010217F
:00000001FF
het schijnt allemaal niet te helpen.
het rare is dat hij wel tekens produceert, (vooral veel nullen) maar ze slaan op niets en staan op de verkeerde plaats...
ik zal me maar een ander groot display aanschaffen en hopen dat dit wel werkt.
ook al werkt het niet, toch bedankt voor de inbreng
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
