Grafik Display Spalte verschoben

Gast #2059602
Lesenswert?

hi
weis jemand woran das liegt, dass hier ständig unvollständige Fragen 
gestellt werden und man eine Glaskugel braucht, um nur annähernd zu 
erkennen, um was es geht?

Displaytyp? Beschaltung? Prozessor? Code? usw. ist das denn soo schwer??
OP #2059652
Lesenswert?

Vielen Dank für den Tipp, leider ändert das nichts.

Das Problem tritt mit dem 108 ten Zeilen Dot auf.
Ab da wird irgendwie alles verschoben.
Jetzt besseres Bild
Ausgabe ist jetzt:
g_draw_rectangle(0,0,191,127);
g_draw_string(0,64,"12345678901234567890123456789012");

eine zahl ist 4 Dot breit;
das 107. wird noch richtig dargestellt.
Gast #2059696
Lesenswert?

Hi

Würde ich mal auf 8 stellen. Ich habe das Datenblatt vom LC7981 nur mal 
kurz überflogen. Aber von anderen Controller weiß ich, das sich der 
Character-Pitch auch auf die Grafik auswirkt.

MfG Spess
Gast #2059897
Lesenswert?

Hi

Lt. Datenblatt kann der LC7981 nur Character-Mode oder Grafik-Mode. Aber 
nicht beides gleichzeitig. Da in deinem Bild beides zu sehen ist werden 
die Zeichen wohl per Software erzeugt und der Controller befindet sich 
im Grafik_Mode. Dazu muss Horizotal-Pitch zwingend 8 und die Anzahl der 
Zeichen/Zeile bei deinem  Display 24 sein.

Ist dem so?

MfG Spess
OP #2060016
Lesenswert?

ja das ist völlig richtig was du sagst!
-und ja hab ich auf 0x18 eingestellt (=24)
Die Routinen sind für ein 160x80,
und ich hab es für meins (192x128) abgeändert.



könntest du mal vollgendes anschauen:

void lcd_graphics_move(unsigned short x, unsigned short y) {
  unsigned short pos;

  /* Calculate the raw address in terms of bytes on the screen */
  pos = ((y*LCD_WIDTH)+x)/8;<-----------

  /* Move the cursor to the new address */
  lcd_write_command(LCD_CMD_CURSOR_LA, pos&0xFF);
  lcd_write_command(LCD_CMD_CURSOR_HA, pos>>8);
}


das ist praktisch die Cursor Position.

da wo ich den pfeil hingemacht hab verstehe ich nicht.
Ich kann auch im Datenblatt nicht finden, was im Grafikmodus genau 
geschrieben werden muss.
Gast #2060129
Lesenswert?

Hi

>Die Routinen sind für ein 160x80,
>und ich hab es für meins (192x128) abgeändert.

Anscheinend nicht vollständig:

>übrigens tritt der Fehler in Spalte 160 auf!


>da wo ich den pfeil hingemacht hab verstehe ich nicht.
>Ich kann auch im Datenblatt nicht finden, was im Grafikmodus genau
>geschrieben werden muss.

Das ist die Umrechnung x,y in Pixeln in die Display-RAM-Adresse in Byte.
Ein Byte im Displayram enthält 8 nebeneinander liegende Pixel.

Der LC7981 ist übriges identisch mit dem HD61830 von Hitachi. Könnte 
einen evtl. Suchradius erweitern.

MfG Spess
Gast #2060153
Lesenswert?

Hi

Ich schrieb:

>Dazu muss Horizotal-Pitch zwingend 8 und die Anzahl der
>Zeichen/Zeile bei deinem  Display 24 sein.

Der Befehl 'Set Number of Characters' erwartet (Bytes/Zeile)-1. Also ist 
der richtige Wert 23.

MfG Spess
Gast #2063868
Lesenswert?

Hey vielen Dank für den Tip.
Es stimmt, aber es ist ja auch auf 0x07 eingestellt.


Das Problem jetzt mal konkreter:


-bis zum Pixelbyte 20 stimmt alles(also bis Pixel Nr. 160)
 in den darunterliegenden Zeilen passt es auch bis zu dem Byte

-nur die hinteren 4 Byte passen immer nicht

-und zwar wird Byte 21,22 um 2 Byte nach rechts verschoben, dh diese 
kommen an die Stelle 23,24

-Die Byte 23,24 werden auf Platz 21,22 UND eine Zeile weiter nach unten 
verschoben


Die Cursor Berechnungen in der Software müssten soweit stimmen.

Noch irgendwelche Ideen?

Vielen Dank

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren