Forum: Mikrocontroller und Digitale Elektronik Grafik Display Spalte verschoben


von Georg P. (oki8085)


Angehängte Dateien:

Lesenswert?

hi
weiß jemand woran das liegt, dass im hinteren bereich die Spalten nicht 
stimmen?

von ich (Gast)


Lesenswert?

an deiner Software?!?

von genervter (Gast)


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??

von irgend jemand (Gast)


Lesenswert?

lass mich mal raten? Hmm, der Wind kommt aus Osten, wir haben 5 Grad, 
drausen fliegt n Vogel vorbei? Hmm. Schwierig.
Ich würde sagen: nein, das kann dir niemand sagen!

von Georg P. (oki8085)


Lesenswert?

ja das dachte ich fast schon. :-)

sorry

also das Display hat einen LC7981 drauf.
die Routinen hab ich von der www.frozeneskimo.com


angesteuert wird es mit einem ATMega 16.

von Ernst (Gast)


Lesenswert?

Fehler in Zeile 42.

von Georg P. (oki8085)


Lesenswert?

also das Display hat 192x128 Pixel.


die Ausgabe ist:

g_draw_rectangle(0,0,192,128);
g_draw_string(0,64,"abcdefghijklmnopqrstuvwxyz,1234567890")

von spess53 (Gast)


Lesenswert?

Hi

>g_draw_rectangle(0,0,192,128);

Wenn die Funktion g_draw_rectangle(x1,y1,x2,y2) lautet, ist der obige 
Aufruf falsch. Deine Zeilen gehen von 0..127 und die Spalten von 0..191.

MfG Spess

von Georg P. (oki8085)


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.

von Georg P. (oki8085)


Angehängte Dateien:

Lesenswert?

hier das Bild

von spess53 (Gast)


Lesenswert?

Hi

Dann ist möglicherweise dein Controller falsch initialisiert. Was ist 
denn als Character-Pitch eingestellt? Mache evtl. noch mal ein 
ordentliches Bild.

MfG Spess

von Georg P. (oki8085)


Lesenswert?

#define LCD_CHAR_PITCH_HP_8  0x07

von spess53 (Gast)


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

von Georg P. (oki8085)


Lesenswert?

Hab ich jetzt versucht, bringt aber keine Besserung!

übrigens tritt der Fehler in Spalte 160 auf!

von spess53 (Gast)


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

von Georg P. (oki8085)


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.

von spess53 (Gast)


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

von spess53 (Gast)


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

von G_P (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.