Tomato schrieb:
> Fallen direkt zwei Punkte hintereinander runter verschwindet beim
> Übergang von der oberen in die untere Matrix einer der Punkte (der
> obere).
> Also die letzte Zeile der oberen Matrix wird nicht mehr angezeigt,
> sobald die obere Zeile der unteren Matrix angesprochen wird.
>
> xo sind die Variablen für die obere Matrix und xu die Variablen für die
> untere Matrix.
Naja, bei Namen wie x01, xo2 etc. schreit das gerade nach einem Array.
Auch deine Platzierung der Matrixfülllogik in der ISR ist nicht
sinnvoll. Für einen Test mag das OK sein, für weitere
Softwareentwicklung eher nicht. Deine ganzen volatile Definitionen der
Variablen sind sinnlos, denn diese werden hier nur in der ISR benutzt,
nicht im Hauptprogramm. Deine "fallenden Punkte" kann man einfacher und
übersichtlicher prgrammieren. Wenn man eine Bitversciebung erreichen
will, schreibt man das meist auch so hin, auch wenn ein *2 logisch das
Gleiche bewirkt. Deine Logik deiner fallenden Punkte über 2 verteilte
Bytes hab ich jetzt nicht im Detail geprüft, wo da der Fehler liegt. Das
Problem kann man aber vereinfachen, indem man einfach 16 Bit für deine
LED-Matrix benutzt. Upps, das hast du ja schon, aber die oberen 16 Bit
sind immer ungenutzt. Warum? Siehe Anhang.
Man kann es mit der Modularität und den Unterfunktionen auch
übertreiben. So einfache Initialisierungen schreibt man einfach so hin
und gut, da braucht es keine Funktion.
Man sollte sinnvolle, aussagekräftige Variablennamen benutzen, "var"
sagt gar nix.
Beim multiplexen einer LED-Matrix sollte man folgende Reihenfolge
einhalten, um Geisterbilder zu vermeinden.
aktuelle Spalte ausschalten
neues Spaltenmuster berechnen und ausgeben
neue Spalte einschalten
Durch diese kleine Pause von wenigen us vermeidet man Nachleuchten des
Musters einer Spalte in der nächsten.