1-Bit Bitmap? Schwarz-Weiss oder Graustufen?
Graustufen geht so:
uint8_t bitmap[400][300] PROGMEM = {{255, 0, 134, 30..}, {242, 4...} ...}
Zu beachten: http://www.mikrocontroller.net/artic...er_.28Flash.29
Grüsse, Stefan
Moin,
Für mein Projekt brauche ich ein Bild mit einer Größe von über 2 KByte hardgecodet in einem ATmega32. Da ich momentan versuche, von Bascom auf C umzusteigen, bin ich noch ein vergleichsweise unbeschriebens Blatt in der Hinsicht und bräuchte etwas Hilfe. In den 1 KBybte großen EEPROM passt die Grafik natürlich nicht, daher müsste es direkt im Quelltext stehen...
Das Format dürfte relativ irrelevant sein, es handelt sich um eine umkodierte 1-Bit Bitmap in binärer Form, also von 0 bis 255 sind alle Zeichen enthalten. Die Daten werden dann per RS232 an einen speziellen Grafik-IC weitergeschickt, der ein Grafik-LCD ansteuert.
Wie könnte man dieses Bild speichern (und eventuell blockweise über RS232 übertragen)?
Gruß und ein schönes Wochenende
Trabukh
1-Bit Bitmap? Schwarz-Weiss oder Graustufen?
Graustufen geht so:
uint8_t bitmap[400][300] PROGMEM = {{255, 0, 134, 30..}, {242, 4...} ...}
Zu beachten: http://www.mikrocontroller.net/artic...er_.28Flash.29
Grüsse, Stefan
Hmm, danke schonmal für die schnelle Antwort.
Allerdings ist es nocht nicht ganz das, was ich suche, kommt dem aber schon recht nahe.
Es handelt sich um ein Schwarz-Weiß-Bild (-> 1 Bit), allerdings ist hierbei anzumerken, dass ich schon eine spezielle Kodierung dafür habe und somit das Format in Bezug auf das Problem unwichtig wird.
Deinem Link folgend habe ich mal ein C-Programm mehr "zusammenkopiert" als wirklich geschrieben:
Wäre mein Vorhaben so in etwa möglich? Die passende Schaltung habe ich leider nicht zur Hand und muss mich auch noch ein paar mehr Tage gedulden, aber es schadet sicherlich nicht, sich schonmal mit der Theorie zu befassen...Code:#include <avr/io.h> #include <stdint.h> #include <avr/pgmspace.h> // Das Bild (Array-Größe: 2864 Bytes) const uint8_t picLogo[] PROGMEM = { 220, 100, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 1, 255, 255, 255, 255, 255, 240, ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., } int main(void) { // UART TX einschalten, Asynchron 8N1 UCSRB |= (1<<TXEN); UCSRC |= (1<<URSEL)|(3<<UCSZ0); //Baudrate einstellen, 9600 UBRRH = UBRR_VAL >> 8; UBRRL = UBRR_VAL & 0xFF; // Initialisierung des Display-ICs uart_send('U'); uart_send(9); uart_send(14); // Ausgabe des Bildes for(int i=1; i<2864; i++){ uart_send(pgm_read_byte(&picLogo[i])); } } // Einfache Funktion zum Senden einzelner Bytes int uart_send(unsigned char c) { while (!(UCSRA & (1<<UDRE))) {} UDR = c; return 0; }
So in etwa wär's möglich, ja.
Solltest aber bei der Schleife
for(int i=1; i<2864; i++)
eher bei 0 anfangen
Grüsse, Stefan
Super, danke dir
Die 1 ist mir schon fast peinlich...![]()
Lesezeichen