-         

Ergebnis 1 bis 5 von 5

Thema: S/W-Bitmap im AVR hardcoden

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.05.2004
    Ort
    Detmold
    Alter
    30
    Beiträge
    557

    S/W-Bitmap im AVR hardcoden

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.01.2007
    Beiträge
    134
    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

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.05.2004
    Ort
    Detmold
    Alter
    30
    Beiträge
    557
    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:

    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;
    }
    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...

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.01.2007
    Beiträge
    134
    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

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.05.2004
    Ort
    Detmold
    Alter
    30
    Beiträge
    557
    Super, danke dir
    Die 1 ist mir schon fast peinlich...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •