GLCD Routine verbessern, brauche Hilfe

Gast #2222142
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
Gast #2222183
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
Gast #2222217
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
Gast #2222242
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.
Gast #2222263
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.
Gast #2222265
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
Gast #2222319
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
Gast #2222432
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
Gast #2222442
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
Gast #2222448
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

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