Hallo Janiiix,
Ja, das löst du mit einer zweidimensionalen Tabelle, die du am besten im Flash Memory anlegst.
Du hast eine 8x8 Matrix, also 8 Zeilen und 8 Spalten. Es ist jeweils immer nur eine Zeile (Z1..8) aktiv (multiplexen),
Spalten (S1..8) können beliebige aktiv sein. Für Zeilen benötigst du Treiber, für die Spalten eventuell auch, dann
wenn der maximale Strom den zulässigen Portpin-Strom, den maximalen Strom eines Ports oder wenn die Summe aller
Ströme den maximalen Strom des Mikrocontrollers überschreitet.
Ich gehe aber eigentlich davon aus, dass dir die Ansteuerung via Multiplex klar ist, da du dir ja sicher etwas bei dem Design
der Schaltung gedacht hast. Mich wundert es, dass du erst die Hardware (Schaltung) soweit fertig gemacht hast, bevor du weißt, wie du die Software löst.
Eine Tabelle könnte so aussehen ...
Code:
#include <avr/pgmspace.h>
const uint8_t MeineTabelle[ANZAHL_ZEICHEN][8] PROGMEM =
{
{0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000}, // Zeichen 1
{0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000}, // Zeichen 2
{0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000,0b00000000},
//...
}
Die Werte holst du dir so ...
Code:
uint8_t zeile = pgm_read_byte(&MeineTabelle[zeichen_index][zeilen_index]);
// zeilen_index = 0..7
// zeichen_index = 0..(ANZAHL_ZEICHEN-1)
Ausgeben würde ich es in einem Timerinterrupt (Overflow oder eleganter Compare). Die Periodendauer würde ich möglichst groß wählen, aber noch so klein, dass man multiplexen nicht wahrnimmt.
Vielleicht hilft dir dies schon mal weiter.
Dirk