Sida 2 av 3

Postat: 10 augusti 2006, 14:55:18
av björn
Exakt vad menar du med "stänger på"?
Efter strombons initiering skall displayen vara på, oavsett vad man kallar det tror jag :)

OT : Varför heter tråden : "Problem med 4bitars initiering av LED"?

EDIT: Det ska tydligen vara ett 't' i efter...

Postat: 10 augusti 2006, 15:01:27
av JimmyAndersson
"OT : Vafrör heter tråden : "Problem med 4bitars initiering av LED "? "

Host.. eh, det undrar jag också. Ska ändra. :)

Då kontrar jag med: Varför har du döpt om Strombom? :D
"Efer strombons initierineng"
Sedan saknas det ett 't' i ordet 'efter'. 'Initiering' har fått en extra bokstav. :wink:


"Exakt vad menar du med "stänger på"?"

Undrade just när den frågan skulle komma. :)
För att kunna se något på displayen så måste man skicka 00001000 där 1an betyder "Display ON".

Postat: 10 augusti 2006, 18:49:29
av sodjan
"Stänga av" resp "sätta på" är nog det de flesta säger... :-)

Ditt simulerins prog verkar konstigt.
Efter ditt första "4 bit mode ON" så är ju *ALLA* komandon
dubbla nibbles.

Så det här :

0011 ; 8 bit mode ON, 1 line, 5*8 font.
0010 ; 4 bit mode ON, 1 line, 5*8 font.
0010 ; 4 bit mode ON, 1 line, 5*8 font.
1000 ; Set DDRAM address to 8.
0000 ; Set DDRAM address to 0.

Borde vara :

0011 ; 8 bit mode ON, 1 line, 5*8 font. (igentligen '00111111' p.g.a intern pullup på D0-D3.)

0010 ; 4 bit mode ON, 1 line, 5*8 font. (igentligen '00101111' och härefter är allt dubbel-nibble !)

0010 ; 4 bit mode ON, 1 line, 5*8 font.
1000 ; Set DDRAM address to 8. (Vad menar de med detta ???)

Det ser ut som om simuleringsprogrammet inte förstår att andra nibblen
bara är andra jhalvan av kommandot.

Postat: 10 augusti 2006, 19:26:13
av björn
JimmyAndersson skrev: Då kontrar jag med: Varför har du döpt om Strombom? :D
"Efer strombons initierineng"
Det tänker jag inte berätta :ajabaja: :?
JimmyAndersson skrev: Sedan saknas det ett 't' i ordet 'efter'. 'Initiering' har fått en extra bokstav. :wink:
Editerat 8)

Jag kan iallafall inte se några fel i din initering :)

Postat: 10 augusti 2006, 19:41:17
av JimmyAndersson
sodjan:
Det skulle kunna förklara varför jag inte förstår vad simuleringsprogrammet menar. Men resten av programmet fungerar, så det kanske bara är kommentarerna om vad det gör som är lite ..fel.


Jag testade nyss att koppla in en rad DIP-switchar med pullupp-motstånd direkt till LCD'n, dvs ingen PIC-krets inblandad. Då fungerade mina initieringsrader fint. Dvs:

0011
0011
0011
0010 - 4bitars-läge
1010 - 2 rader, 5x8-font.
0000 - Första 4 bitarna till:
1111 - Stänger på display och markör som blinkar.

Tyvärr glömde jag testa era initieringsrader innan jag rensade labbplattan.

Men hur som helst så fungerar LCD'n utan PIC-kretsen. Då ligger problemet i koden eller sladdarna mellan PIC och LCD. Dags att felsöka igen. :)


Stänga av och sätta på. Det är nog dialektalt. Här stänger vi allt, oavsett om det är av eller på. "Öh, stäng på tv'n". :D

edit: Fast i england säger man ju faktiskt "Turn on the radio", dvs "vrid på radion". Okay, in what direction do you want me to turn it? :)

edit 2: Nähepp, det var varken sladdarna eller labbplattan. Har bytt båda. Kör med 10ms paus mellan varje initierings-rad (och e-signal) i koden.
Det som händer är att jag får olika många svarta fyrkanter på översta raden. Ibland är de 2st, ibland 5st. Resten av displayen är tom. Det ser ut på LCD'n som den initierats rätt, bortsett från fyrkanterna. Om den inte initierats rätt så hade ju hela översta raden varit svart.

Postat: 10 augusti 2006, 20:44:25
av sodjan
Kör med 1 sek mellan varje 4-bitars värde, så kan du
definitvt utesluta timing problem. En LCD kan köras
hur långsamt som helst. Eller endå mer, så hinner du
mäta linjerna med en DVM. Eller koppla på LEDs så
att du "ser" kommunikationen.

Jag tror också att du bör vänta mer än 10 ms innan
*första* kommando (om LCDn får ain spänning
samtidigt som PICen). Eller prova att göra en manuell
reset av PICen med spänningen på (så att LCDn har
säkert avslutat sin POST).

Det jag kan säga med 100% säkerhet är att
"sodjan-displayen" fungerar alldeles utmärkt ! :-)

Postat: 10 augusti 2006, 21:56:45
av JimmyAndersson
Jodå, jag har använt "sodjan-displayen" till flera andra projekt. Mycket trevlig display! :)

Jag väntar 50ms innan första LCD-kommandot. Testade även att reseta PICen, men det blev ingen skillnad.

Men: Jag har fått det att fungera nu. Det är en sak jag inte fattar, men det kommer i slutet av inlägget. Såhär gjorde jag:

Först kopplade jag på LEDs och ökade till 1 sek mellan varje 4-bitars värde. Jodå, Lysdioderna visar precis vad de ska, men jag ser ingen blinkande markör på LCD'n. Bara svarta rutor och lite konstiga tecken som varierar från gång till gång.

Sedan provade jag att lägga in samma initiering som ni skrivt, och som jag inte fått att fungera någon gång tidigare. (Testade 4bitars-initieringen från strombom's guide första gången för ett halvår sedan.) Nu testade jag alltså igen och i slutet på initieringen skrev jag in: 0000 och 1111.

Då fungerar det. Hm?? Jag fattar nada:

'Min' initiering (som jag skrev tidigare) fungerar i simulatorn och när jag knappar in den för hand med en DIP-switch. Den fungerar däremot inte när PICen levererar raderna till LCD'n. I båda fallen har jag 0000 och 1111 i slutet av initieringen. Har även provat utan.

'Stromboms' initiering fungerar inte i simulatorn eller när jag knappar in den för hand. Den fungerar nu däremot när PIC'en får skicka den till LCD'n. I båda fallen har jag 0000 och 1111 i slutet av initieringen. Har även provat utan.

Någon som har en aning om vad det kan bero på?
Tja, jag är bara glad att det fungerar. Men jag såg ut som en fågelholk när jag såg en blinkande markör på LCD'n. :D

Postat: 10 augusti 2006, 22:23:18
av sodjan
Det är lite förvirrande när du hela tiden pratar om 4-bitar.
*alla* komandon är 8 bitar, oavsett om man kör över dom
som 1x8 eller 2x4 bitar till LCD'n.

Om du bara har en vattentät rutin som delar en byte och
skiver det som 2x4 bitar, så är det enklare att tala om 8-bitars
kommandon i fortsättningen (eftersom det är så det är dokumenterat
och det är så som LCDn "tolkar" det...).

Hur som helst, när det gäller den sekvens som du körde manuelt :

1> 0011
2> 0011
3> 0011
4> 0010 - 4bitars-läge
5> 1010 - 2 rader, 5x8-font.
6> 0000 - Första 4 bitarna till:
7> 1111 - Stänger på display och markör som blinkar.

Rad 1-3 är i 8-bitars mode (där alltså D0-3 är '1111').

Rad 4 är *också* i 8-bitars mode, alltså '00101111'. De kommandon som kommer *efter* är i 4-bitars mode.

Rad 5 är *första* halvan av det *första* kommandot i 4-bitars mode, inte *andra* halvan av kommandot på rad 4 !

Rad 6 är *andra* halvan av kommandot på rad 5

o.s.v.

Rätt utseende bör vara :

1> 0011
2> 0011
3> 0011
4> 0010 - 4bitars-läge
x> 0010 - 4bitars-läge
5> 1010 - 2 rader, 5x8-font.
6> 0000 - Första 4 bitarna till:
7> 1111 - Stänger på display och markör som blinkar.

Notera raden märkt "x".
Den raden är första halvan av första kommandot i 4-bitars mode.
Och då är resten i "fas".

Sen såg jag en sak i ett tidigare inlägg :

> Men vad skickas egentligen vid en initiering?
> När man skickar de första raderna, dvs:
> 0011
> 0011
> 0011
> så är den ju i 8bitars-läget. Skickar man då egentligen:
> 00110000
> 00110000
> 00110000
> eller?
> Men de raderna finns inte i datablad, guider, lcd1.pdf eller lcd2.pdf.

Nja, *om* D0-3 är "open" på modulen så hålls de uppe med en pullup.
Alltså :

> 00111111
> 00111111
> 00111111

> Men de raderna finns inte i datablad, guider, lcd1.pdf eller lcd2.pdf.

Visst gör de det !
Table 2 i pdf1 rad "Function set! ! Och det oavsett om det är '00110000' eller '00111111'...

Postat: 10 augusti 2006, 22:36:07
av JimmyAndersson
Utbrister ett stort *Aha!* :idea:

Där skrev du ett matnyttigt inlägg, minst sagt! Detta har jag undrat över sedan jag startade tråden. :D

Nu förstår jag även Table 2 i pdf'en.


Tack! :)
Bra idé med att göra en rutin som delar en byte.

edit: Nu förstår jag även varför man ska hålla D3 - D0 flytande på LCD'n när man använder 4-bitars interfacet.

Postat: 10 augusti 2006, 22:51:36
av sodjan
Bara lite nyfiken...

> Detta har jag undrat över sedan jag startade tråden.

Vad av det jag skrev ?

> Bra idé med att göra en rutin som delar en byte.

Ja, annars blir det skitjobbigt att skriva den "överliggande" koden.
Dessutom blir koden helt unik för 4-bitarsläget.
Din *applikation* behöver ju inte veta om du kör 8 eller 4 bitar, det kan
"gömmas" i LCD subrutinerna...

> Nu förstår jag även varför man ska hålla D3 - D0 flytande på LCD'n när man
> använder 4-bitars interfacet.

Huvudorsaken är att om man (t.ex när processorn startar upp) inte har
full kontroll over R/W, så kan LCDn hamna i "read" läge, och då driver den
även D0-D3 aktivt. Så man ska inte heller t.ex lägga dom "hårt" till gnd.

Postat: 10 augusti 2006, 23:09:02
av JimmyAndersson
>> Detta har jag undrat över sedan jag startade tråden.

> Vad av det jag skrev ?

Det mesta, men särskillt:
Rad 1-3 är i 8-bitars mode (där alltså D0-3 är '1111').

Rad 4 är *också* i 8-bitars mode, alltså '00101111'. De kommandon som kommer *efter* är i 4-bitars mode.

Rad 5 är *första* halvan av det *första* kommandot i 4-bitars mode, inte *andra* halvan av kommandot på rad 4 !

Rad 6 är *andra* halvan av kommandot på rad 5


Du skrev visserligen om pullup'en på D0-3 tidigare, men nu var det mer ingående beskrivet. Mycket lättare att förstå vad som är första och andra halvan i 4-bitars mode, samt vad som är i 8-bitars mode.


Jag tycker att hela det inlägget skulle passa bra som komplettering till stromboms guide. Sedan är det bara att göra en LCD-FAQ på forumet eller i wikin. :)

Postat: 10 augusti 2006, 23:13:33
av sodjan
OK :-)
Jag är inte helt klar över vad skillnaden var nu när det
fungerade jämfört med den *första* sekvens du visade,
men det kanske inte spelar någon större roll nu...

Postat: 10 augusti 2006, 23:16:38
av JimmyAndersson
Jag är ganska förvirrad över det, men det gör inget. Bara det fungerar.
Nu vet jag iallafall hur initieringen ska göras till nästa gång.

Postat: 10 augusti 2006, 23:41:33
av björn
Jag hade tänkt att skriva något om att datablad trots allt verkar vara snabbaste vägen till att förstå HD44780 displayer (med).
MEN det skiter jag i, kul att det funkar Jimmy :twisted:

Postat: 10 augusti 2006, 23:53:40
av sodjan
Hm... :-)

Och jag har i princip bara läst innantill i samma
dokument (lcd1.pdf) som Jimmy redan har... 8)