XMega128 Bootloader mit LCD

OP #1575120
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
1
const unsigned char TABLE5[240] PROGMEM =
2
                 {0x00,0x00,0x00,0x00,0x00,  // 20 space       ASCII table
3
                  0x00,0x00,0x5f,0x00,0x00,  // 21 !
4
                  ...
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
OP #1581740
Lesenswert?
• ▲
▼
Hi,

danke schon mal für die Antwort.

Meine Schreibroutine sieht so aus:
1
// **************************************************************************
2
/*! \brief Writes a singel character to the LCD
3
 *
4
 *  This function takes the BCD code for the character and writes the corresponding 
5
 *  pixels to the LCD
6
 *
7
 *  \param character  BCD code for the character to display
8
 */ 
9
// **************************************************************************
10
void LCD_table_to_lcd(unsigned char character)   // extract ascii from tables & write to LCD
11
   {
12
   unsigned char position, row, data;
13

14
   if (character<0x20)
15
      return;
16

17
   if (character == '°')
18
      {
19
      LCD_write_Data(0x00);
20
      LCD_write_Data(0x02);
21
      LCD_write_Data(0x05);
22
      LCD_write_Data(0x02);
23
      LCD_write_Data(0x00);
24
      LCD_write_Data(0x00);
25
      return;
26
      }
27

28
   if (character>0x7f)
29
      return;
30

31
   for (row=0; row<5; row++) 
32
      {    // 5 bytes
33
  
34
      if (character<0x50)                          // use TABLE5
35
         {
36
         position=(((character&0xff)-0x20)*5);
37
         //data=pgm_read_byte(&TABLE5[(position+row)]);
38
         data=pgm_read_byte_far((uint32_t)(&TABLE5[(position+row)]));
39
         }
40
      else if (character>0x4f)                     // use TABLE6
41
         {
42
         position=(((character&0xff)-0x50)*5);
43
         //data=pgm_read_byte(&TABLE6[(position+row)]);
44
         data=pgm_read_byte_far((uint32_t)(&TABLE6[(position+row)]));
45
         }
46
    
47
     LCD_write_Data(data);                    // send data to Display
48

49
      }
50

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

53
   }

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
Angehängte Dateien:

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.