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

Je moet de LCD wel laten weten dat je het 4-bits protocol gebruikt. Zat info op internet (ik heb het even niet paraat).

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%)]

Ik gebruik MikroBasic Pro, met dezelfde LCD routines.
Die werken standaard met 16x2 en 4x20 displays zonder verdere instellingen...

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.

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

Heb je D0...D3 wel aan Gnd gelegd? Bij sommige displaycontrollers is dat verplicht...

nu doet het display niets meer :)

Dan zou ik alle verbindingen toch maar eens goed nakijken, want er zit vast wat verkeerd...