Hallo Forum, gestern sind endlich die Platinen für meine RGB LED Matrix gekommen. Funktionieren nach einem ersten Test auch recht gut. Die Daten werden per Uart in der form übertragen: rotes Bild: 0b00001111 0b00011111 0b11000011 0b01010101 . . . also pro Zeile ein Byte wobei "0" für LED leuchtet und "1" für led leuchtet nicht. ebenso werden hinter her die daten für grün und blau übertragen. Jetzt versuche ich natürlich mehr als nur diese Grundfarben und deren Mischfarben darzustellen. Ich habe mir das so vorgestellt dass ich mehrere rot, grün, und blau bilder hintereinander übertrage und diese nacheinander anzeigen lasse. So erreiche ich eine Art PWM. Problem: ich würde die Daten gerne als hex code übertragen als 256 Farben bild. so bräuchte ich insgesamt 6 RGB Bilder. Das sollte von der Geschwindigkeit her leicht machbar sein. Schwierigkeiten habe ich im umwandeln des hex codes in die binär codes für die einzelnen Bilder. 1. Gibt es eine Standard Farbtabelle für BMP an die sich Paint hält? Also so etwas wie die Standard Web farben nur mit zugehörigen HEX codes, wie sie im BMP gespeichert werden? 2. mal angenommen 0xF3 wäre der wert RGB:6,3,1 zugeordnet. So müsste ich dieses byte in daten folgender art umwandeln: rot: 0b1xxxxxxx; -restliche zeilen 0b1xxxxxxx; -restliche zeilen 0b1xxxxxxx; -restliche zeilen 0b1xxxxxxx; -restliche zeilen 0b1xxxxxxx; -restliche zeilen 0b1xxxxxxx; -restliche zeilen grün: 0b1xxxxxxx; -restliche zeilen 0b1xxxxxxx; -restliche zeilen 0b1xxxxxxx; -restliche zeilen 0b0xxxxxxx; -restliche zeilen 0b0xxxxxxx; -restliche zeilen 0b0xxxxxxx; -restliche zeilen 0b0xxxxxxx; -restliche zeilen 0b0xxxxxxx; -restliche zeilen blau: 0b1xxxxxxx; -restliche zeilen 0b0xxxxxxx; -restliche zeilen 0b0xxxxxxx; -restliche zeilen 0b0xxxxxxx; -restliche zeilen 0b0xxxxxxx; -restliche zeilen 0b0xxxxxxx; -restliche zeilen 0b0xxxxxxx; -restliche zeilen 0b0xxxxxxx; -restliche zeilen und das alles für jedes Pixel einzeln?! Hat hier jemand eine Idee wie man das sinnvoll umsetzen kann. Gerne können auch völlig andere Lösungsvorschläge gemacht werden. Ziel: Übertragen der hex werte eines 8x8 8Bit BMPs und Anzeigen auf der LED Matrix. Hoffe ich konnte mich halbwegs verständlich ausgedrückt. Wäre schön wenn mir jemand weiterhelfen könnte. Zur Hardware: MEGA32 (16MHz), CD4017, ULN2981 R-Netzwerke und FT232 sollte aus irgend einem Grund ein Schaltplan benötigt werden, liefere ich den gerne nach. Danke schonmal.
Jakob B. schrieb: > 8x8 8Bit BMPs Das wird aber eine sehr grobe Blockgrafik. 8x8 Pixel reichen ja gerade eben aus um Buchstaben und Zahlen einigermaßen deutlich darzustellen.
... schrieb: > Das wird aber eine sehr grobe Blockgrafik. 8x8 Pixel reichen ja gerade > > eben aus um Buchstaben und Zahlen einigermaßen deutlich darzustellen. Ist mir bewusst. Das ganze sollen auch mal meherere Module werden, die dann zusammengeschaltet werden. Aber zuerst will ich eines mit 8x8 zum Laufen bringen bevor ich mich weiter vor wage. Hier gehts mir mehr um das Prinzip wie man so etwas am besten/einfachsten umsetzt.
Hallo Jakob, natürlich gibt es einen Standart an den sich alle Programme halten die mit BMPs zu tun haben. Am besten schaust du dir mal den dazugehörigen Wikipediaeintrag an. http://de.wikipedia.org/wiki/Windows_Bitmap Ich habe mir mal ein kleines Java Programm geschrieben, dass ein beliebiges BMP in einen großen C-Array umwandelt, sodass ich dann das BMP auf einem Fabrdisplay darstellen konnte. Hättest du an sowas interesse? Du kannst dir aber auch einfach selber ein kleines C-Programm schreiben, dass das BMP umwandelt und dann über den virtuellen COM Port an deinen uC ausgibt!
Sebastian M. schrieb: > natürlich gibt es einen Standart an den sich alle Programme halten die > > mit BMPs zu tun haben. Am besten schaust du dir mal den dazugehörigen > > Wikipediaeintrag an. > > http://de.wikipedia.org/wiki/Windows_Bitmap Der Artikel ist mir bekannt. Was ich suche ist allerdings eine Tabelle mit den Farben. Also woher weiß ich welche Farbe z.B. 0x00 ist? ich vermute schwarz. Und 0xff vermutlich weiß. aber was ist z.b. 0x45? Kann man das irgendwie herausfinden? oder hat jedes bmp eine eigene Farbtabelle. Irgendwas habe ich da noch nicht so ganz verstanden. Also 24bit BMPs ohne Farbtabelle sind mir klar. Aber mit den 8Bit hab ich noch so meine Probleme Sebastian M. schrieb: > Ich habe mir mal ein kleines Java Programm geschrieben, dass ein > > beliebiges BMP in einen großen C-Array umwandelt, sodass ich dann das > > BMP auf einem Fabrdisplay darstellen konnte. Hättest du an sowas > > interesse? Ich glaube ich habe schon ein ähnliches Programm gefunden. mein Problem ist nicht das Array sondern die Darstellung selbst. Aber danke Sebastian M. schrieb: > Du kannst dir aber auch einfach selber ein kleines C-Programm schreiben, > > dass das BMP umwandelt und dann über den virtuellen COM Port an deinen > > uC ausgibt! Kann ich nicht. Bin leider eine Niete in PC software programmieren. Habe bisher noch nichts gefunden mit dem ich einigermaßen umgehen kann. Minimale Kenntnisse in VBasic. C hab ich probiert. Ging aber nicht weit über einfache "Benzinkostenrechner" oder ähnliches hinaus. Wird noch ein weilchen dauern, bis ich hier was anständiges zusammen bringe.
Jakob B. schrieb: > Also woher weiß ich welche Farbe z.B. 0x00 ist? ich > vermute schwarz. Und 0xff vermutlich weiß. aber was ist z.b. 0x45? Kann > man das irgendwie herausfinden? oder hat jedes bmp eine eigene > Farbtabelle. Irgendwas habe ich da noch nicht so ganz verstanden. Also > 24bit BMPs ohne Farbtabelle sind mir klar. Aber mit den 8Bit hab ich > noch so meine Probleme Also ich habe hier mal ein Programm für mein Farbdisplay ausgegraben. Das Display wird im 16Bit Modus betrieben. Das heißt es stehen 16 Bit zur Darstellung einer Farbe eines Pixels da. Definiert ist das so:
1 | #define RGB(r,g,b) (((r&0xF8)<<8)|((g&0xFC)<<3)|((b&0xF8)>>3)) //5 red | 6 green | 5 blue
|
2 | [c] |
3 | |
4 | Sprich die ersten 5 Pixel stehen für den Rotwert des Pixels, die nächsten 6 für den Grünwert und die restlichen 5 Pixel für den Blauwert. Nimmt der Wert für zum Beispiel den Rotwert sein Maximum an, ist das Maximum an Rot vorhanden, bei dem Rotwert 0 fehlt Rot komplett in der Farbe. Mit diesen 3 Grundfarben kann man sich dann alle anderen Farben mischen. |
5 | |
6 | Bei mir sieht des dann im Code so aus |
7 | [c] |
8 | #define COLOR_WHITE RGB(255,255,255)
|
9 | #define COLOR_BLACK RGB( 0, 0, 0)
|
10 | #define COLOR_RED RGB(255, 0, 0)
|
11 | #define COLOR_GREEN RGB( 0,255, 0)
|
12 | #define COLOR_BLUE RGB( 0, 0,255)
|
13 | #define COLOR_YELLOW RGB(255,255, 0)
|
Suchst du etwa so was? http://www.farb-tabelle.de/de/farbtabelle.htm Hoffe ich konnte dir weiterhelfen mfg sebastian
Jakob B. schrieb: > Was ich suche ist allerdings eine Tabelle > mit den Farben. Also woher weiß ich welche Farbe z.B. 0x00 ist? ich > vermute schwarz. Und 0xff vermutlich weiß. aber was ist z.b. 0x45? Kann > man das irgendwie herausfinden? oder hat jedes bmp eine eigene > Farbtabelle. 8-Bit-BMP-Dateien ("256 Farben") enthalten in der Tat eine Farbpalette. In der Bitmap selber ist statt des Farbwertes der Index in die Farbpalette gespeichert. Die Farbpalette besteht entsprechend aus einer Liste von 256 Farbwerten. http://en.wikipedia.org/wiki/BMP_file_format#Color_Table
Sebastian M. schrieb: > Suchst du etwa so was? > > http://www.farb-tabelle.de/de/farbtabelle.htm Ja, nur ich suche nicht hex werte der form RRGGBB sondern eher was in der richtung OxXX entspricht RRGGBB also nur ein byte dass einer farbe zugeordnet ist. Ähnliches wie in deinem Code habe ich auch vor. Nur mit 1Byte pro pixel. in diesem sollen aber nicht die farben im format RRRGGGBB oder ähnlich stehen sondern soll diesem byte ein wert aus einer tabelle zugeordnet werden. Und genau diesen wert finde ich nicht. Ich dachte bei BMPs mit farbtabelle wird das ähnlich gemacht. ich möchte dann je farbe eben 6 zustände haben, also aus 255,255,0 soll dann eben werden 6,6,0 so komme ich auf insgesamt 256 farben. diese umwandlung wäre nicht das problem nur wie komme ich von 0xXX auf 0xRRGGBB?
Rufus Τ. Firefly schrieb: > 8-Bit-BMP-Dateien ("256 Farben") enthalten in der Tat eine > > Farbpalette. In der Bitmap selber ist statt des Farbwertes der Index in > > die Farbpalette gespeichert. Die Farbpalette besteht entsprechend aus > > einer Liste von 256 Farbwerten. Und genau so eine Tabelle suche ich. Gibt es hier keinen Standard? z.B. Webfarben oder ist die in jedem bmp anders. Oder besser gefragt kann ich eine Standard Tabelle erzwingen? Ich möchte die Tabelle sozusagen direkt auf dem ATMEGA speichern und nur noch die Bilddaten übertragen.
Jakob B. schrieb: > Und genau so eine Tabelle suche ich. Gibt es hier keinen Standard? z.B. > Webfarben oder ist die in jedem bmp anders. Oder besser gefragt kann ich > eine Standard Tabelle erzwingen?Beitrag melden | Bearbeiten | Löschen | Die Tabelle wird normalerweise z.B. vom Bildbearbeitungsprogramm erzeugt, wenn du das Bild mit 256 Farben abspeicherst und heißt Farbpalette. Programme, die über die rudimentären Fähigkeiten von Paint hinausgehen, bieten meist die Möglichkeit die Farbpalette getrennt abzuspeichern oder aus einer Datei zu laden. Diese Palettendatei gibt dir dann die Umsetzung von den 256 Farbindizes in die RGB-Farbwerte. Gruß
Jakob B. schrieb: > Ich möchte die Tabelle sozusagen direkt auf dem ATMEGA speichern und nur > noch die Bilddaten übertragen. Klar geht das. Schau mal in deinem Bildverarbeitungsprogramm zum Thema "Indizierte Farben" nach, bei vielen Kann man z.B. die Palette "Webfarben" wählen oder sich selbst eine Palette anlegen und speichern/laden. Wieviel Farben soll den deine Palette haben? Ich hab mal vor längerer Zeit hier Beitrag "Grafikkonverter Tool für AVR/Mikrocontroller (BMP2C, BMP2ASM, BMP2BASCOM)" ein Programm veröffentlicht, wo du dir selbst ein alette basteln kann und die Grafiken gleich umgerechnet werden.
@Optiker und Läubi .. Danke euch beiden. Das hat mir erst mal geholfen. Werd mich mal mehr in das Thema einarbeiten. Wenn ich dann noch Fragen habe, meld ich mich nochmal. Läubi .. schrieb: > Wieviel Farben soll den deine Palette haben? 216 nach den standard Webfarben. Der rest sollen für steuerbefehle freibleiben. Ich glaube für die Umsetzung der Anzeige ist mir auch schon was besseres eingefallen. Danke an alle, die sich beteiligt haben.
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.