Problem med 4bitars initiering av LCD

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Problem med 4bitars initiering av LCD

Inlägg av JimmyAndersson »

Försöker initiera en HD44780-kompatibel display i 4-bitarsläget.

Strombom gjorde en bra guide för några år sedan, men det är något som inte stämmer. Har testat i ett simuleringsprogram och får samma fel. Själva initieringen går bra, men när jag ska stänga på display och markör så verkar det som om något fattas i initieringen. Initieringen ser ut såhär:

Bitarna är i ordningen D7, D6, D5, D4
0011
0011
0011
0010
0010
1000
0000
1000
0000
0001
0000
0110

Sedan försöker jag stänga på display och blinkande markör med:

0000
1111

Men det verkar som om det fattas en rad i initieringen för det enda som händer är att AC hamnar i CGRAM istället. (När jag skickat de senaste 0000 så motsvarar det istället "Set CGRAM address to 32")

Någon som vet vad som är galet?


edit: Ändrade rubriken. En LED behöver inte initieras..... :lol:
Senast redigerad av JimmyAndersson 10 augusti 2006, 15:02:17, redigerad totalt 1 gång.
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Kolla på sidan 46 här:
http://www.sparkfun.com/datasheets/LCD/HD44780.pdf

Det är den jag har följt tror jag. Jag kan inte komma på vad som är fel.

/Johan
Senast redigerad av strombom 9 augusti 2006, 22:48:40, redigerad totalt 1 gång.
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Timeingen? Kolla så att du inte kör för fort (för korta enable pulser, lägger på komandona för snabbt eller så). Läs databladet och håll dig på säkra sidan.
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

bengt-re:
Det är inga problem med timingen eftersom jag även fått samma resultat med ett simuleringsprogram gjort i Javascript.


strombom:
Tack för länken, det fanns *massor* med info där. Men 'din' initiering ser likadan ut som i PDF'en, så allt verkar vara ok så långt.


Kommandot för att stänga på display och visa blinkande markör ser ut såhär:
00001DCB (D = 1 display on, C = 1 cursor on, B = 1 cursor blinkar.)

Då ska jag väl skicka:
0000
E-pinne
1111
E-pinne

Eller hur? RS är 0 under hela tiden.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Kommentera !!
Så får vi se vad du *tror* att du gör.

Om jag har tolkat det rätt :

> 0011 ; 8-bit
> 0011 ; 8-bit
> 0011 ; 8-bit
> 0010 ; 4-bit !

> 0010 ; Set 2-line och 5x7
> 1000

> 0000 ; Displ off, underline off, curs blink off.
> 1000

> 0000 ; Clear display.
> 0001

> 0000 ; "Increment", display shift off.
> 0110

Sedan försöker jag stänga på display och blinkande markör med:

> 0000 ; disp, curs och blink on.
> 1111

Det är alltså 0110 - 0000 som uppfattas som "Set CGRAM address to 32" ?
Stämmer alla komandon innan i simulatorn ?
Någonstans kommer det ur fas...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Bra LCD guide :
http://www.epemag.wimborne.co.uk/resources.htm
De två PDF'erna...

En annan sak, det *kan* vara bra att veta vad det är för LCD...
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Vad jag *tror* att jag gör? Tja, jag följer det som står i stromboms guide och länk. Så, jag tror att jag gör det som står där..

Men detta ser jag i simuleringsprogrammet:

0011 ; 8 bit mode ON, 1 line, 5*8 font. AC = 0. AC points to DDRAM.
0011 ; 8 bit mode ON, 1 line, 5*8 font.
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.
1000 ; Set DDRAM address to 8.
0000 ; Set DDRAM address to 0.
0001 ; Cursor or display shift command:left, move cursor.
0000 ; Cursor or display shift command:left, move cursor. AC = 79.
0110 ; Set CGRAM address to 38.

0000 ; Set CGRAM address to 32. AC = 32. AC points to CGRAM.
1111 ; Set DDRAM address to 127.

Vet inte om det stämmer eller om programmet visar all info.

edit: lcd1.pdf och lcd2.pdf har jag redan kollat.
Displayen är en Sharp LM16A211. Har sett att den brukar kallas "sodjan-displayen" på forumet. :)
Har även kollat det databladet förstås.

edit 2:
"Det är alltså 0110 - 0000 som uppfattas som "Set CGRAM address to 32" ?"
Det verkar så.
"Stämmer alla komandon innan i simulatorn ?"
Det var bl.a det jag ville ha hjälp med. I inläggen ser ni exakt vad jag skickat på D-pinnarna.


edit 3:
Ska man alltid dela upp D-bitarna när man kör i 4bitars-läget? Dvs om kommandot för att stänga på skärmen mm (som jag skrivit tidigare) är 0001111. Ska man då först skicka 0000 och sedan 1111 ?

Simuleringsprogrammet
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Fortsätter i ett nytt 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.
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Enl. databladet på min hemsida:
4-bit initiering.
Vänta 15ms eller mer efter spänningspåslag.
0011 till adress 0
Vänta 4,1ms eller mer.
0011 till adress 0
Vänta 100µs eller mer.
0011 till adress 0
Från och med nu kan man kolla Busy-flaggan vid behov.
0010 till adress 0
Nu är den i 4-bits läge!
0010 ; Set storlek, rader osv
NF**
osv.....
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

0011
0011
0011
0010
0010
0000
1000
0000
1000
0000
0001
0000
0110

det verkar funka för mig :)
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

De raderna ser bekanta ut. Tror jag lärt mig dem utantill nu. :)

Men stänger det även på displayen (Dvs Display=ON) hos dig?
Det gör det inte hos mig, varken i simuleringsprogrammet eller i verkligheten.

Däremot visade pdf-filen på Icecap's sajt några saker jag inte sett hos mina andra fem guider/datablad. Så detta fungerar:

0011
0011
0011
0010 - 4bitars-läge
1010 - 2 rader, 5x8-font.
0000 - "Invalid command" men det måste vara med för annars fungerar inte:
1111 - Stänger på display och markör som blinkar.

Det fungerar i simuleringen iallafall. Ni får gärna testa det i 'verkligheten'. :)


Som jag frågat några gånger tidigare:
Ska man alltid dela upp D-bitarna när man kör i 4bitars-läget? Dvs om kommandot för att stänga på skärmen mm (som jag skrivit tidigare) är 0001111. Ska man då först skicka 0000 och sedan 1111 ?
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Det är MSB först, sedan LSB, just som du skriver:
00001111 skrivs
0000 ; Först
1111 ; Sen

Kom ihåg timingen under initialiseringen, den är mycket viktig!
T.e. tar en Clear-Screen längre tid att utföra än "vanliga" kommandon...
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Aha, men då har jag nog koll på läget.
Ska ha koll på timingen.

Tack för hjälpen! :)


edit: Nähepp, i den verkliga världen framför labbplattan så blinkar inte markören. LCD'n initieras rätt däremot. (Båda raderna har samma kontrast.) Har testat att skriva ut lite text på LCD'n men den syns inte.

Fungerar stromboms kod för er? Utför den någon Display = ON? Blinkar markören?
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag initierar alltid utan blinkande markör.....

Markören behövs inte för att skriva till modulet, det är mer en användare-grej om man ska knappa in värden siffer för siffer.
Användarvisningsbild
JimmyAndersson
Inlägg: 26578
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Jag brukar också göra så, men med risk för att verka tjatig :oops: (jag har frågat om detta fem gånger nu) så undrar jag:

Stänger t.ex stromboms 4bit-initiering på displayen, eller initieras den bara?
Det som jag haft problem med sedan första inlägget är att jag inte lyckas stänga på displayen efter initieringen.
Skriv svar