Hallo an Alle, weiss jemand wie man eine BMP Grafik auf ein Display vom Typ T6963 bekommt? Ein Beispiel z.B. in C wie es funktioniert, das wäre toll.
http://www.mikrocontroller.net/attachment.php/215117/lcdcon_USB.zip Da findest zu einen BMP Dekoder in C. Das ganze auf einem uC zu machen, macht wenig Sinn. Besser am PC in Raw Daten umwandeln.
Das bringt mir auch nicht viel weiter. Ich kann die EXE Datei nicht ausführe. Kein Programm Fenster erscheint bei mir. Ich benötige nur ein Tool womit man die BMP Datei in z.B. ein RAW Datei ablegt. Anschließend benötige ich noch eine C Routine wo dann das ganze auf mein Display ausgibt.
> Ich benötige nur ein Tool womit man die BMP Datei in z.B. ein > RAW Datei ablegt. das kann doch so ziemlich jedes Grafiktool, z. B. Irfan View.
Da ich nicht so der Profi bin, brauche ich dazu noch für den AVR eine Funktion womit man dann das Raw File auf das Display T6963 ausgeben kann.
Professionelle Software Grafik LCD Bibliotheken für den T6963 Controller findest du unter: www.easygui.com www.ramtex.dk Sind leider sehr teuer. Wenn jemand eine günstigere Alternative dazu anbieten kann bin ich auch daran interessiert.
Vor einiger Zeit habe ich mal C-Codes zu diesem Thema gesehen. Ich benötige da eine Funktion PUT_BITMAP in der ich dann die ganzen Werte von der Raw Datei übergebe und anschließend werden diese dann auf das Display ausgegeben.
Fuer den Gameboy-Advance gibt es einige Tools zur Konvertierung und von Bitmaps und auch ein paar Routinen zur Anzeige, mglw. 'was Nuetzliches als Ideengeber dabei. Mit Fontgen (irgendwo auf 8052.com) koennen ebenfalls BMP-Dateien in "C-Arrays" konvertiert werden. Anzeigeroutine ist dann "nur noch" Array durchlaufen und Punkte setzen.
Hi bei Electronic Assembly (ich glaube www.lcd-module.de) habe ich vor einiger Zeit Software zu Konvertierung von Bitmaps in programmtechnisch verwerdbare Formate. Ob C dabei ist kann ich im Moment nicht sagen. MfG HG
Die von dir genannte Software bezieht sich auf "intelligente LCD Module" - siehe Artikel unten. Die weltweit ersten Displays mit eingebauter Intelligenz sind da ! Mit 8 eingebauten Zeichensätzen und mehr als 112 integrierten Grafikfunktionen geben sie einen Einblick in die Grafikprogrammierung von morgen. Ab sofort sind keine Programmierkenntnisse mehr erforderlich, um die Möglichkeiten eines modernen Grafikdisplays voll auszuschöpfen. Die Verwendung diverser Schriftarten- und größen, Linien zeichnen, Bilder platzieren, Bargraph anzeigen, Erstellen von Pulldown Menus, um nur einige der hier integrierten Befehle zu nennen, all das gelingt mühelos und schnell. Die Anbindung erfolgt flexibel über eine der 3 eingebauten Schnittstellen RS-232, SPI und I²C-Bus. Die Versorgungsspannung liegt bei +5V. Die Displays gibt es in blau-weiß und schwarz-weiß (FSTN). Alle sind für einen Betriebstemperaturbereich von -20..+70°C ausgelegt; Temperaturkompensation inklusiv. Optional sind die Displays der EA eDIP240-7 Serie auch mit analogem Touchpanel lieferbar. Trotz integriertem Touchkontroller und voller Softwareunterstützung ist der Aufpreis mit nur 10.- EUR gering. Über das Touchpanel lassen sich Eingaben tätigen, Bildschirme ändern, Analogwerte einstellen, Menus öffnen, oder aber auch x-beliebige Werte über die serielle Schnittstelle senden. Dadurch können sehr einfach externe Geräte gesteuert werden. Im EEPROM-Speicher können komplette Befehlsabläufe und Bilder ablegt oder auch die integrierten Fonts geändert und erweitert werden. Die Displays besitzen auf einer Fläche von 4,5" (96x61mm) eine Auflösung von 240x128 Punkten. Mit nur 113x70x10,8mm sind sie extrem kompakt aufgebaut. Die Montage erfolgt kostengünstig durch einfaches Einlöten in eine Platine. Alle im industriellen Umfeld gültigen EMV-Richtlinien werden selbstverständlich voll eingehalten. Ein komplettes Entwicklungstool samt Simulator für Windows ist kostenfrei im Internet verfügbar. Es zeigt schnell die ganze Funktionalität und unterstützt gleichzeitig später die Entwicklung.
Vielleicht so: Mit Paintshop o.ä. das S/W-Bild als *.pbm mit der Option "binär" abspeichern. Schön einfaches Format. Der einfachheithalber sollte das Bild in X-Richtung ein vielfaches von 8 aufweisen. Die Datei enthält nun ein Header, der u.a. X- u. Y-Auflösung angibt. Die Pixeldaten enthalten pro Byte 8 Pixel. Die Bytes sind Zeilenweise von links oben nach recht unten nacheinander abgelegt. Datei mit einem bin2hex-Tool (z.B. winbin.exe von www.ulrichradig.de) umwandeln. Die Datei als *.h umbenennen und folgendes am Anfang einfügen:
1 | #include <inttypes.h> |
2 | #include <avr/pgmspace.h> |
3 | static uint8_t __attribute__ ((progmem)) my_foo_pic[]={ |
4 | /*hier kommen jetzt die Bilddaten...*/
|
Ganz unten nicht vergessen:
1 | /*...letzte Zeile Bilddaten*/
|
2 | }; |
Zum Bild zeichnen aus dem Header die X- u. Y- Auflösung ermitteln. Aufbau Header siehe google (ist einfach der Header)
1 | void main(){ |
2 | /* ...init_something etc... */
|
3 | draw_pic(my_foo_pic, 17, 3); /*Bildquelle, X-Ausgabepos., |
4 | Y-Ausgabepos.*/
|
5 | }
|
6 | |
7 | void draw_pic(uint8_t* pdata, uint8_t x_pos, uint8_t y_pos){ |
8 | uint8_t x_size; |
9 | uint8_t y_size; |
10 | uint8_t x_count; |
11 | uint8_t y_count; |
12 | |
13 | x_size = /* x-Auflösung aus Header ermitteln...*/ |
14 | y_size = /* y-Auflösung aus Header ermitteln...*/ |
15 | |
16 | pdata= /* nach Header zeigen -> wo Pixeldaten beginnen... */ |
17 | |
18 | for(y_count=y_pos; y_count<(y_size+y_pos); y_count++){ |
19 | for(x_count=x_pos; x_count<(x_size+x_pos); x_count+=8){ |
20 | set_byte(x_count, y_count, pgm_read_byte(pdate++)); |
21 | }
|
22 | }
|
23 | |
24 | }
|
Anmerkung zu set_byte: Deine LCD-schreibe-Funktion; Gibt an X-Y-Position 8 Pixel horizontal aus. Bei Display>256Pixel(X||Y) uint16_t Variablen verwenden.
Anmerkung: Im 1. Codefenster <u> bzw. </u> ist falsch. Muß ein unterstrich sein. Hat die Formatierungsroutine verwurschtelt...
>Mit Paintshop o.ä. das S/W-Bild als *.pbm mit der Option "binär"
abspeichern. Schön einfaches Format.
Das geht mit BMP genauso:
Der Header besteht aus 62Bytes bei einem SW Bild und der Rest sind
reine Bilddaten. Allerdings steht das Bild auf dem Kopf, also vorher
das Bild auf den kopf stellen.
Und die Bildbreite wird auf 4Byte aufgerundet:
Ist das Bild z.B. 240 Pixel = 30Byte breit, werden 32 gespeichert.
Hei ich danke euch! Meine Funktion für Pixel setzen lautet so: void LCD_PutPixel(unsigned char x, unsigned char y, unsigned char Set) { unsigned int XY; unsigned char bitByte; XY=0x0000; XY=XY+(y*22); XY=XY+(x/6); out(0x24, XY & 0x00FF, XY>>8); bitByte=5-(x % 6); if (0 != Set) { bitByte |= 0xF8; } else { bitByte|=0xF0; } out(bitByte, 0, 0); //0b1111SXXX , s is set/reset, xxx is bit number xxx //(Each memorybyte i six graphics bits (pixels)) } Wie bekomme ich es hin, das ich z.B. 8 Pixel gleichzeitig ausgeben kann? Dies beötige ich doch dafür oder?
Das ist ganz einfach: Das Byte ans LCD senden, und den Befehl 0xC0 hinterher. Mehr muss man nicht tun.
Außer man betreibt das Display mit 6*8 Font. Dann werden nur die unteren 6 Bits einer Bytes ausgewertet. Da muß man dann ein wenig rechnen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.