Forum: Mikrocontroller und Digitale Elektronik GLCD Routine verbessern, brauche Hilfe


von Franz (Gast)


Lesenswert?

Guten Morgen,

Ich verwende die GLCD Library von http://en.radzio.dxp.pl/sed1335/

Es gibt allerdings ein kleines Problem beim Bitmap zeichnen, und ich bin 
auf der Suche, nach dem Fehler.
1
void GLCD_Bitmap(unsigned char * bmp, int x, int y, int width, int height)
2
{
3
unsigned int i, j;
4
for(i = 0; i < height ; i++)
5
  {
6
  GLCD_GraphicGoTo(x, y+i);
7
  GLCD_WriteCommand(SED1335_MWRITE);
8
  for(j = 0; j < width/8; j++)
9
    GLCD_WriteData(GLCD_ReadByteFromROMMemory(bmp+j+(40*i)));
10
  }
11
}

So sieht der Aufruf auf.
1
void GLCD_WriteData(unsigned char dataToWrite)
2
{
3
SED1335_DATA_PORT = dataToWrite;
4
SED1335_DATA_DIR = 0xFF;
5
SED1335_CONTROL_PORT &= ~(SED1335_CS | SED1335_A0 | SED1335_WR);
6
asm("nop");
7
SED1335_CONTROL_PORT |= (SED1335_CS | SED1335_A0 | SED1335_WR);
8
}
1
void GLCD_WriteCommand(unsigned char commandToWrite)
2
{
3
SED1335_DATA_PORT = commandToWrite;
4
SED1335_DATA_DIR = 0xFF;
5
SED1335_CONTROL_PORT &= ~(SED1335_CS |SED1335_WR);
6
asm("nop");
7
SED1335_CONTROL_PORT |= (SED1335_CS | SED1335_WR);
8
}

Und so die Funktionen dazu.

Ich hab die Kommandos wie SED1335_MWIRTE etc. mit dem DBL meines Display 
überprüft, stimmt alles.

Hat jemand eine Idee, wieso es nur wirres Zeug anzeigt, wenn die Größe 
des Bitmaps kleiner ist, als das KOMPLETTE Display?

Also 320x240 geht. 8x8 geht nicht.

Danke!

Grüße
Franz

von spess53 (Gast)


Lesenswert?

Hi

>Also 320x240 geht. 8x8 geht nicht.

Und wie sieht das dann aus?

MfG Spess

von Franz (Gast)


Lesenswert?

Hallo!

Man kann etwas erkennen worum es sich handelt, allerdings braucht man 
dafür sehr viel Fantasie, die 8x8 sind aber richtig.

Grüße
Franz

von spess53 (Gast)


Lesenswert?

Hi

>Man kann etwas erkennen worum es sich handelt, allerdings braucht man
>dafür sehr viel Fantasie, die 8x8 sind aber richtig.

Mit der Aussage kann man nicht wirklich etwas anfangen.

Wie erzeugst du die 'Bitmaps'? Also vom Bitmap in eine 
controllerverdauliche Form (Array oder so).

MfG Spess

von Franz (Gast)


Lesenswert?

Mit dem Programm von der selben Seite.

Die Stimmen schon soweit.

Allerdings anderer Ansatz, ich habe es nochmals probiert.

Wenn das Feld 8x 0xFF hat, sollte doch ein 8x8 großes Schwarzes Feld 
auftauchen richtig ?

bei mir taucht ein Strich auf in x Richtung, 8 Breit. In y Richtung 1 
Pixel.

Ich sollte dazusagen, dass ich nicht der einzige bin, bei dem die 
GLCD_Bitmap Funktion von dieser Seite nicht funktioniert.

Gruß
Franz

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Gibts du den auch width und height entsprechend an?
Außerdem solltest du beachten, das die Breite bei dieser Funktion immer 
ein ganzen vielfaches von 8 sein muss!

von A.H. (Gast)


Lesenswert?

Woher soll den der SED wissen, wann ein geschriebenes Byte in eine neue 
Zeile gehört? width sieht er ja nicht. Vermutlich muss also zu Beginn 
jeder Zeile noch irgendetwas gesendet werden, z.B. ein passendes 
GLCD_GraphicGoTo.

von A.H. (Gast)


Lesenswert?

Vergiss das von vorhin, ich habe die äußere Schleife übersehen.

Aber wenn die Bitmap einfach als zusammenhängendes Array im Speicher 
liegt, dann geht die Zeile
1
GLCD_WriteData(GLCD_ReadByteFromROMMemory(bmp+j+(40*i)));

implizit und inkorrekt von 40*8 = 320 Pixel aus. Die 40 muss also an die 
tatsächliche Breite angepasst werden.

von spess53 (Gast)


Lesenswert?

Hi

>bei mir taucht ein Strich auf in x Richtung, 8 Breit. In y Richtung 1
>Pixel.

Und was passiert bei einer z.B. 16x8 Grafik.

Meine Kenntnisse von C sind eher rudimentär. Vielleicht kommt diese 
Zeile

  for(j = 0; j < width/8; j++)

nicht mit j=1 klar. Kannst du mal den zugehörigen Assemblercode de 
Routine 'GLCD_Bitmap(...' posten.

>Ich sollte dazusagen, dass ich nicht der einzige bin, bei dem die
>GLCD_Bitmap Funktion von dieser Seite nicht funktioniert.

Die kann auch nur mit 'Bitmaps' deren Breite ein Vielfaches von 8 ist 
vernünftig klarkommen.

MfG Spess

von Franz (Gast)


Lesenswert?

Danke für die Zahlreichen Antworten.

Also ich verwende natürlich nur Grafiken die ein vielfaches von 8 Breit 
sind.

Inwiefern muss ich bei mir die 40 anpassen?

Sollte es bei mir einfach 1 sein oder ?

Ich werde nochmals was ausprobieren, ich melde mich nochmal

Grüße
Franz

von Franz (Gast)


Lesenswert?

Hallo nochmal!

Also tatsächlich funktioniert es mit 1 statt 40.

Das heißt statt 40 mach ich:

width/8   ?

Danke

Franz

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Franz schrieb:
> Das heißt statt 40 mach ich:
> width/8   ?

Probiere's doch einfach mal aus! Programmieren hat auch was mit selber 
machen zu tun (wozu man durchaus mal etwas ausprobieren darf)!

von Franz (Gast)


Lesenswert?

Natürlich probiere ich es auch aus, es funktioniert leider nicht. Ich 
teste auch weiter, nur um nicht den Anschein zu erwecken ich tue nichts 
-.-

Grüße
Franz

von Max (Gast)


Lesenswert?

Mach doch lieber mal ein foto statt das problem nur vage zu 
umschreiben....

von Franz (Gast)


Lesenswert?

Hallo!

Ok es funktioniert mit Width/8

Danke euch!

Außerdem muss man beim erstellen der Bitmaps aufpassen, dass es Vertikal 
orientiert ist.

Ist das Controller ( SED1335 ) abhängig ?
Ich weiß, dass es Programmtechnisch auch veränderbar wäre, aber nur so 
als Frage.

Danke euch!

Grüße
Franz

von ich (Gast)


Lesenswert?

nein

von spess53 (Gast)


Lesenswert?

Hi

>Außerdem muss man beim erstellen der Bitmaps aufpassen, dass es Vertikal
>orientiert ist.

Wenn ich beim Überfliegen des Datenblatts des SED1335 nichts übersehen 
habe, ist der horizontal orientiert.

>Ist das Controller ( SED1335 ) abhängig ?
>Ich weiß, dass es Programmtechnisch auch veränderbar wäre, aber nur so
>als Frage.

Ja.

MfG Spess

von Franz (Gast)


Lesenswert?

Auf alle Fälle muss ich Vertikal anklicken, da sonst sonst eben um 90° 
gedreht angezeigt wird, wenn ich Horizontal anklicke.

Grüße
Franz

von Franz (Gast)


Lesenswert?

Hätte allerdings gleich noch eine Frage undzwar, bei einem 1-D Feld ist 
es klar zb.

char Feld[]={ 0x00,0x23,0x34,....... }

Aber kann ich ein 2 Dimensionales Feld auch so direkt beschreiben? Wenn 
ja, wie kann ich die 2. Dimension ansprechen?

Es geht darum, dass ich 6 verschiedene Bilder speichern möchte und das 
direkt mit.

Bild[][1] oder so aufrufen möchte, was ja eigentlich funktionieren 
sollte oder?

Danke euch

Grüße
Franz

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.