www.mikrocontroller.net

Forum: Compiler & IDEs XMega128 Bootloader mit LCD


Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

ich versuche mich gerade an einem Bootloader für den XMega128.
Bisher läuft auch alles und ich kann den Chip via AVROS flashen. Jetzt 
würde ich gerne (ich habe ja 8k Bootflash) noch eine einfache 
unterstützung für mein LCD mit einbauen.

Initialisieren klappt ohne Probleme und auch einzelne Pixel kann ich 
setzen, sobald ich aber Buchstaben schreiben will klappt nichts mehr.
Die Buchstaben sind in einer Tablle nach dem Muster
const unsigned char TABLE5[240] PROGMEM =
                 {0x00,0x00,0x00,0x00,0x00,  // 20 space       ASCII table
                  0x00,0x00,0x5f,0x00,0x00,  // 21 !
                  ...
abgelegt. eine entsprechende Routine liest die 5 Werte zu jedem Zeichen 
aus und soll sie an das LCD schicken.

Das Problem ist, denke ich mal, der Speicherort der Tabelle. Denn auf 
dem Display kommt immer nur 0xFF an. Ich weiß nur leider nicht wie ich 
das ganze für den Bootloader richtig konfigurieren muß.
In der normalen Application funktioniert das ohne Probleme.

Gruß Mike

Autor: Werner B. (werner-b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da der Text jenseits der 64KB Marke liegt musst du das RAMPZ Register 
erst auf 1 setzen und mit ELPM lesen, dann sollte etwas mehr passieren. 
Aber so komplett ohne MAP File bzw. Listing ist das von meiner Seite ein 
Stöbern im Nebel.

Autor: Mike R. (thesealion)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

danke schon mal für die Antwort.

Meine Schreibroutine sieht so aus:
// **************************************************************************
/*! \brief Writes a singel character to the LCD
 *
 *  This function takes the BCD code for the character and writes the corresponding 
 *  pixels to the LCD
 *
 *  \param character  BCD code for the character to display
 */ 
// **************************************************************************
void LCD_table_to_lcd(unsigned char character)   // extract ascii from tables & write to LCD
   {
   unsigned char position, row, data;

   if (character<0x20)
      return;

   if (character == '°')
      {
      LCD_write_Data(0x00);
      LCD_write_Data(0x02);
      LCD_write_Data(0x05);
      LCD_write_Data(0x02);
      LCD_write_Data(0x00);
      LCD_write_Data(0x00);
      return;
      }

   if (character>0x7f)
      return;

   for (row=0; row<5; row++) 
      {    // 5 bytes
  
      if (character<0x50)                          // use TABLE5
         {
         position=(((character&0xff)-0x20)*5);
         //data=pgm_read_byte(&TABLE5[(position+row)]);
         data=pgm_read_byte_far((uint32_t)(&TABLE5[(position+row)]));
         }
      else if (character>0x4f)                     // use TABLE6
         {
         position=(((character&0xff)-0x50)*5);
         //data=pgm_read_byte(&TABLE6[(position+row)]);
         data=pgm_read_byte_far((uint32_t)(&TABLE6[(position+row)]));
         }
    
     LCD_write_Data(data);                    // send data to Display

      }

   LCD_write_Data(0x00);                      //  1 byte (always blank)

   }

Wie gesagt, wenn ich die Funktionen in der normalen Application nutze 
funktionieren sie.
Ich habe scheinbar ein Problem den richtigen Pointer zu ermitteln oder 
beim auslesen der Daten aus dem Flash lese ich nicht die Stelle, die ich 
erwarte.

Gruß Mike

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.