Jan S. schrieb:
> Das leichte leuchten von einigen umliegenden LEDs ist jetzt so gut wie
> weg. warum das immer noch teilweise entsteht ist mir noch nicht wirklich
> klar.
Weil du hier
1 | ISR(TIMER0_COMP_vect) //Interruptfrequency: 4MHz
|
2 | {
|
3 | MUXPORT = zeile;
|
4 |
|
5 | PORTC = matrix[zeile];
|
6 | PORTA = (matrix[zeile]>>8);
|
durch die Zuweisung an MUXPORT die aktuelle Belegung von PORTC und PORTA
kurzzeitig bereits an die nächste Zeile ausgibst. Du änderst zwar danach
gleich PORTC und PORTA auf das, was in dieser Zeile angezeigt werden
soll, aber ein paar µs lang leuchtet da das Muster aus der
vorhergehenden Zeile. Und das reicht. Man kann tatsächlich derartig
kurze Zeiten sehen!
Du musst also dafür sorgen, dass zu diesem Zeitpunkt, an dem du die
nächste zeile aktivierst, garantiert nix mehr leuchtet
> Keine Zeile leuchten lassen tue ich einfach indem ich für die zeilen die
> Spalten-Bits auf null setze.
D.h. wenn du an PORTA bzw. PORTC 0 ausgibst, leuchtet nix?
Dann ist klar, wie der Beginn der ISR aussehen muss
1 | ISR(TIMER0_COMP_vect) //Interruptfrequency: 4MHz
|
2 | {
|
3 | PORTC = 0;
|
4 | PORTA = 0;
|
5 |
|
6 | MUXPORT = zeile;
|
7 | PORTC = matrix[zeile];
|
8 | PORTA = (matrix[zeile]>>8);
|
9 | ...
|
WEnn du jetzt am MUXPORT umstellst, leuchtet garantiert nichts mehr. Und
damit kann es dann auch kein Geisterleuchten mehr geben.