Fel position på 4 raders lcd

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
Samman
Inlägg: 133
Blev medlem: 7 februari 2007, 10:37:21
Ort: Ängelholm

Fel position på 4 raders lcd

Inlägg av Samman »

Sitter och knåpar med en 4x16 alfanumrerisk lcd. Allt fungerar bra..förrutom att när jag försöker att skriva på rad 3 & 4 så hoppar texten automatiskt in och startar på segment 5.

Kan det vara för att jag kör den i 4 bitars läge kanske?
Det är en HD44780 LCD

Så det blir ca så här..
Test test test
Test test test
Test test
Test test

Jag har kollat koden hundra gånger men kan inte hitta att det skulle vara något fel i den då de två första raderna fungerar fint.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Fixa din fråga så att den blir komplett så kanske det går att svara också !
T.ex det viktigaste, vilka adresser använder du som start på varje rad ?
Ditt exempel blir jag inte klok på heller, vad menar du med "ca så här" ??
Samman
Inlägg: 133
Blev medlem: 7 februari 2007, 10:37:21
Ort: Ängelholm

Inlägg av Samman »

Hm, Textformateringen blev fel.

Koden är skriven i microC, tyckte att det var enklast då jag har förträngt all assembler.

Det visar sig att problemet verkar ligga i microC, Sökte runt på nätet igår och såg att flera som använder microC har samma problem med 4 raders lcd.

Kommandot ser ut så här
Lcd_Out(1,3, "Texten");, Texten skriv ut på rad 1, kolum 3

men om jag kör

Lcd_Out(3,1, "Texten");, skall texten hamna på rad 3, kolum 1, men istället så hamnar texten automatiskt på rad 3 och kolum 5.

Men som du sa Sodjan, adresserna.. De blev fel vi kompileringen, Lite knep och knåp fixade till det...

Och Wisp'en gör det hela mycket enklare att sitta och labba...Den är helt enkelt underbar...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, så det verkar som om MikroC har fel start-adresser till de olika
raderna hårdkodade i sina runtime libbar.

> Lite knep och knåp fixade till det...

Vilka knep och knåp ?
Samman
Inlägg: 133
Blev medlem: 7 februari 2007, 10:37:21
Ort: Ängelholm

Inlägg av Samman »

Att manuellt ange position på lcd'n
128 + 16 = 144, alltså positionen för första tecknet på rad tre är 144.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, ja. visst...

Men då kör du alltså något annat än Lcd_Out !?
Samman
Inlägg: 133
Blev medlem: 7 februari 2007, 10:37:21
Ort: Ängelholm

Inlägg av Samman »

Jepp,

Lcd_CMD(144); // Rad 3, Position 1
Lcd_Out_CP("Texten"); // Skriver ut texten på aktuell position
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Om jag inte minns helt fel rakt ur huvet, så är adresseringen helt annorlunda på rad 3-4 jämfört med 1-2 på en vanlig HD44780-kontrolller. Det är kanske så att MikroBasic-funktionen egentligen bara är gjord för och testad på LCD med max två rader. Då skulle man kunna få lustiga fenomen när man kör tre eller fyra rader.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> så är adresseringen helt annorlunda på rad 3-4 jämfört med 1-2 på en vanlig HD44780-kontrolller.

Annorlunda vet jag inte, det är bara att hålla reda på start-adresser för pos 1 på varje rad.
Och sedan addera positionen på raden så får man rätt teckenadress.

> Det är kanske så att MikroBasic-funktionen egentligen bara är gjord för och testad på LCD med max två rader.

Då ska den inte acceptera syntaxen "Lcd_Out(3,x, "xxx");" utan ge ett felmeddelande istället.
*Om* den accepterar 3 eller 4 som "rad-parameter", så ska den också hantera det rätt...
Väldigt osannolikt att de inte skulle ha testat på en 4-raders LCD.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Vad jag menade var just att adresseringen skiljer sig åt. Rad 3-4 hanteras som en förlängning av rad 1-2 och rad 3 kommer före rad 2 i displayminnet. Det gör att det inte går att hantera raderna som en enkel multiplikation för att få displayadressen. Så länge man har två rader så funkar det utmärkt.

4-radiga displayer var inte så vanliga tidigare även om det fanns. Så om rutinerna inte är uppdaterade så _skulle_ det kunna vara så. Sedan håller jag med om att det egentligen inte skall acceptera parametern isåfall. Å andra sidan skulle massor av saker vara inkompatibla med framtida varianter på produkter isåfall.

Vad jag menar är att om man t.ex skrev en LCD-drivrutin när det bara fanns 1/2-radiga displayer. För att hantera framtida kommande så "chansar" man lite och hanterar rad 3 på samma sätt som rad 2, d.v.s det som känns mest sannolikt för en kommande produkt. Då skulle den automatisk bli kompatibel även med fler rader. Därför tror jag det är ofta det inte läggs in den typen av spärrar. I det här fallet hade det ju då ändå inte fungerat eftersom man adresserar rad 3/4 annorlunda.

Vad är det för modell på LCD:n?

Tittar man i databladet för några 4x20 eller 4x16 LCD:er så ser man att rad 3 börjar på adress 20. Frågan är om det kan tänkas finnas 16x4 LCD:er där rad 3 börjar direkt efter rad 1 istället, d.v.s på adress 16. Om displayen är gjord på detta sättet och drivrutinerna förväntar sig adress 20, så får man precis det här resultatet. Kollas lämpligen i databladet.
Samman
Inlägg: 133
Blev medlem: 7 februari 2007, 10:37:21
Ort: Ängelholm

Inlägg av Samman »

Fick på Jobbet 10 st 14x16 samt 3 st 4x40 lcd:er, men tyvärr så står där inget.. Så jag kan inte finna datablad på dem, det enda jag vet är att de är HD44780 kompatibla..
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

**4x40** !!??
Det skulle du ha kunnat sagt lite tidigare... :-)

En HD44780 controler har max *80* teckenpositioner.

En 4 x 40 display (som alltså har *160* tecken) har *dubbla*
HD44780 controlers. Alltså i princip två sammanbyggda 2x40
LCD'er.

Jag skulle förvänta mig en adressering som en 2x40 LCD på
rad 3 och 4. Men databladet har naturligtsvis svaret på det.
Eller så testar man helt enkelt...
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Lugn sodjan! :fransman: :)

Han skrev faktiskt i första inlägget att det är en 4x16 han jobbar med. Annars har du naturligtvis helt rätt i att den stora är väldigt annorlunda.

Samman> Finns det inga beteckningar på displayen?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK... :-)

> Fick på Jobbet 10 st 14x16 samt 3 st 4x40 lcd:er,...

> den stora är väldigt annorlunda....

14x16 är också ganska stort... :-)
Jag antog att det var 4x40 modulen det handlare om eftersom
det tidigare talades om just en *4* raders modul...
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Eller så menar han 4x16 och inte 14x16 ? :roll: Finns det sånna stora?

//Daniel A
Skriv svar