Forum: Compiler & IDEs ASCII auf Dot-Matrix


von Thomas (Gast)


Lesenswert?

Hallo,

kann mir jemand erklären, warum das 5x7-Display nur Mist anzeigt?
In dem meinem Beispiel sollte jetzt eigentlich ein Ausrufezeichen 
kommen!
1
static uint8_t spalte=0;
2
volatile uint16_t zeichen=5;
3
4
const uint8_t characters[] PROGMEM = { \
5
0x00,0x00,0x00,0x00,0x00, // Leerzeichen
6
0x00,0x00,0x5F,0x00,0x00, // Ausrufezeichen
7
0x00,0x03,0x00,0x03,0x00,
8
9
...
10
11
ISR(TIMER0_OVF_vect) {
12
 PORTC &= ~( 1 << spalte );  // Spalte aus
13
 spalte++;
14
 if (spalte==5) spalte=0;
15
 PORTD = (characters[zeichen+spalte])^0x7F;
16
 PORTC |= ( 1 << spalte );  // nächste Spalte ein
17
 TCNT0 = 142; // 200Hz Anzeigenfrequenz
18
}

Irgendwie scheinen sich "zeichen" und "spalte" nicht zu addieren?
Ich hoffe der Codeschnipsel ist soweit verständlich: ein 5x7 
spaltenweise gemuxt.
Ich steh hier irgendwie auf dem Schlauch ...

Danke
Thomas

von Karl H. (kbuchegg)


Lesenswert?

> const uint8_t characters[] PROGMEM

Dein Zeichensatz liegt im Flash

> characters[zeichen+spalte]

Du greifst darauf zu, als ob es im SRAM liegen würde.

-> pgm_readbyte benutzen

von Thomas (Gast)


Lesenswert?

und da saß ich jetzt schon Stunden davor ...

PORTD = (pgm_read_byte(&characters[zeichen+spalte]))^0x7F;

Vielen Dank!

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
Noch kein Account? Hier anmelden.