www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Grafik Display Spalte verschoben


Autor: Georg Pirzer (oki8085)
Datum:
Angehängte Dateien:

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

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
an deiner Software?!?

Autor: genervter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: irgend jemand (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Georg Pirzer (oki8085)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ernst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehler in Zeile 42.

Autor: Georg Pirzer (oki8085)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also das Display hat 192x128 Pixel.


die Ausgabe ist:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg Pirzer (oki8085)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Georg Pirzer (oki8085)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier das Bild

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg Pirzer (oki8085)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define LCD_CHAR_PITCH_HP_8  0x07

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg Pirzer (oki8085)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich jetzt versucht, bringt aber keine Besserung!

übrigens tritt der Fehler in Spalte 160 auf!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg Pirzer (oki8085)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: G_P (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.