Geht es um die Beschreibung des MS BMP-Formats?
https://www.roboternetz.de/phpBB2/ze...=247149#247149
Günstig ist auf jeden Fall, wenn sie bmp nicht komprimiert ist.
Oder willst du nicht selber implementieren und nur suchst ne fix-fertig-Lösung?
hallo zusammen!
ich versuche schon seit einiger zeit mein AVR dazu zu bewegen bmps aufs display auszugeben.
habe die bmp in ein array-feld umgewandelt und mit verschiedenen libs versucht auszugeben. leider ohne erfolg.
1. könnt ihr eine von den zig libs die es gibt besonders empfehlen?
2. wie sieht so eine ausgabefunktion von so einem array aus?
wäre super wenn ihr mir etwas helfen könntet!!
viele grüße
manu
Geht es um die Beschreibung des MS BMP-Formats?
https://www.roboternetz.de/phpBB2/ze...=247149#247149
Günstig ist auf jeden Fall, wenn sie bmp nicht komprimiert ist.
Oder willst du nicht selber implementieren und nur suchst ne fix-fertig-Lösung?
Disclaimer: none. Sue me.
hi sprinter,
danke für deine antwort!
ich habe das bmp mit einem tool/converter in einen c-header umgewandelt, leider weiß ich jetzt nicht mit welcher lib oder welche funktion ich das bild/header auf das glcd bekomme?
hast du sowas schon mal gemacht?
viele grüße
manu
Nö, teilweise arbeite ich dann direkt auf der Datei (bmp) und lasse die dann anzeigen, wenn ich spezielle Grafiken erzeuge.
Was du ja wohl schon hast, ist einen Pixel zu malen. Falls nicht, kümmer dich um diese Basics bevor du ein komplettes Bild pinseln willst. Das ist eigentlich alles, was du brauchst...
Das bmp als C-Header zu haben ist nicht so toll, das würde ja bedeuten, daß du entweder die Grafik hart ins Programm reincompilierst oder aber zur Laufzeit den C-Header interpretieren musst.
Zweiteres ist zu vermeisen, ersteres evtl dann angebracht, wenn es sich um immer gleiche Bildchen wie feste Icons handelt, aber ineffizient ist das auch.
Am besten ist, wenn du die bmp irgendwoher binär beziehst (SPI, UART, I2C, Flash, EEPROM, XRAM, ...). Zuerst liest du die Kopfdaten ein (bmih, bmfh) und danach die eigentlichen Bilddaten (Palette + Pixel). Dabei brauchst du das Bild nicht komplett einzulesen, sondern kannst ja pixelweise einlesen/aufs GLCD ausgeben und brauchst den Wust von Daten nicht im µC (zwischen)zuspeichern, wofür der Platz eh nicht reichen würde.
Disclaimer: none. Sue me.
hallo,
hab jetzt noch mal die glcd-libs von avrlibs hergenommen.
darin gibts eine funktion die heißt:
leider weiß ich nicht was "u08 grCharIdx" sein soll...Code:void glcdWriteCharGr(u08 grCharIdx) { u08 idx; u08 grLength; u08 grStartIdx = 0; // get starting index of graphic bitmap for(idx=0; idx<grCharIdx; idx++) { // add this graphic's length to the startIdx // to get the startIdx of the next one grStartIdx += pgm_read_byte(FontGr+grStartIdx); } grLength = pgm_read_byte(FontGr+grStartIdx); // write the lines of the desired graphic to the display for(idx=0; idx<grLength; idx++) { // write the line glcdDataWrite(pgm_read_byte(FontGr+(grStartIdx+1)+idx)); } }
eine grafik die dabei ist, sieht so aus:
würd mich über weitere hilfe sehr freuen!!Code:#ifndef FONTGR_H #define FONTGR_H #ifndef WIN32 // AVR specific includes #include <avr/pgmspace.h> #endif static unsigned char __attribute__ ((progmem)) FontGr[] = { // format is one character per line: // length, byte array[length] 0x0B,0x3E,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x3C,0x00,// 0. Folder Icon 0x06,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF // 1. Solid 6x8 block }; #endif
viele grüße,
manu
Sorry, da kann ich auch nicht helfen wenn das Zeug nicht gscheit dokumentiert ist...
Disclaimer: none. Sue me.
aaalso,
ich hab gerade n Projekt, bei dem ich die Daten einer Kamera
mit dem AVR einlese in EDO-RAM zwischenspeichere und diese dann
probeweise auf n GLCD schreibe.
Der Haken bei der Geschichte ist die Ansteuerung des GLCD.
Hab da schon verschiedene verwendet und jedes wollte seine
eigene Ansteuerung, nen Treiber könnte man sagen.
Ohne zu wissen welches GLCd du hast kann man Dir nur
schwerlich helfen.
Vor den Erfolg haben die Götter den Schweiß gesetzt
hallo Vitis!
schön das sich doch noch jemand gefunden hat, der sich damit auskennt!
also ich habe ein glcd mit 2 ks0108 controllern. ich nutze derzeit die libs von avrlib. texte, striche, kreise, rechtecke zeichnen funktioniert alles, aber eine grafik ausgeben habe ich noch hinbekommen....
meines erachtens ist die funktion für das ausgeben einer grafik dafür zuständig?
void glcdWriteCharGr(u08 grCharIdx)
leider weiß ich nicht was "u08 grCharIdx" sein soll.
wie gibts du die grafiken aus?
viele grüße,
manu
2x KS, das sind dann irgendwas um die 64 x 128, richtig?
ich ab gar keine Highlevelbefehle verwendet, sondern hab
eben die Grafik bit für bit zusammengesetzt.
Der Haken ist, dass 8Bit also 1 Byte immer geschrieben wird
und damit eben 8 Pixels gesetzt werden.
Du hast dann 2 Optionen, du schreibst immer eine Zeile durch,
gehst dann zurück zum ausgangspunkt, liest dann wieder die
bytes zurück und setzt die nächsten Linienpunkte, bis dann die
Page wieder durch ist, dann wechsel zur nächsten Page usw. usw.
zu beachten ist, dass Du in der Mitte des Displays eben den CS
wechseln musst ... ist etwas knifflig, aber geht.
Die andere Variante ist, das Du im RAM die Zeilen durchspringst
um das Byte zusammenzusetzen, das spart das rücklesen, ist
dadurch schneller ...
aber mal was Anderes, wo speicherst du die Displaydaten zwischen?
Aber erwarte nicht zu viel von der Graphik, es geht nur
1-Bit, also über Schwellenwert Bit setzen, darunter Bit löschen, also
den Grafikdot versteht sich.
mal schaun, ich schick später mal Bilder nach wie das bei mir aussieht.
Vor den Erfolg haben die Götter den Schweiß gesetzt
ja das display ist 128x64.
habs jetzt endlich geschafft mal die beispiel grafik auszugeben!
musste glcdWriteCharGr(1024); schreiben
leider wars das auch schon. andere grafiken mag er nicht, so wie diese hier:Code:static unsigned char __attribute__ ((progmem)) FontGr[] = { // format is one character per line: // length, byte array[length] 0x0B,0x3E,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x3C,0x00,// 0. Folder Icon 0x06,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF // 1. Solid 6x8 block };
jemand noch ne idee dazu? warum geht die erste und die zweite nicht?Code:static unsigned char __attribute__ ((progmem)) grafik[] = { 0x42,0x4D,0xBE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x28,0x00, 0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00, 0x00,0x00,0x80,0x00,0x00,0x00,0xC4,0x09,0x00,0x00,0xC4,0x09,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,0xDF,0x7F, 0xFF,0xFF,0xBF,0xBF,0xFF,0xFF,0xB1,0xBF,0xFF,0xFF,0xB1,0xBF,0xFF,0xFF,0xBF,0xBF, 0xFF,0xFF,0xDF,0x7F,0xFF,0xFF,0xEE,0xFF,0xFF,0xFF,0xEE,0xFF,0xFF,0xFF,0xEE,0xFF, 0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,0xEE,0xFF,0xFF,0xFF,0xEE,0xFF,0xFF,0xFF,0xEE,0xFF, 0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,0xEE,0xFF,0xFF,0xFF,0xEE,0xFF,0xFC,0x1F,0xEE,0xFF, 0xF8,0x1F,0xE0,0xFF,0xF3,0xFF,0xEE,0xFF,0xF3,0xFF,0xEE,0xFF,0xF3,0xFF,0xEE,0xFF, 0xF3,0xFF,0xE0,0xF0,0x33,0xFF,0xEE,0xF0,0x33,0xFF,0xEE,0xF3,0x33,0xFF,0xEE,0xF3, 0x38,0x1F,0xF1,0xF0,0x3C,0x1F,0xFF,0xF0,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00 };
viele grüße
manu
Lesezeichen