Drakkheen:
2. 10 als Intervall ist viel zu lang das flimmert wie verrückt. Bei 1 geht es gerade so aber ist eindeutig sichtbar...
const byte interval = 1; // quasi die Zeilenfrequenz
Die Zeilenfrequenz muss höher werden.
Verwende micros() anstelle von millis().
Daher wird Multiplexing gerne an spezielle Hardware wie MAX7219 ausgelagert.
Drakkheen:
der zwar einwandfrei funktioniert, den ich in der Arduino Referenz nicht einmal gefunden habe.
Die Arduino Referenz deckt nur einen Teil der Sprache ab. Hauptsächlich geht es da natürlich um die Arduino API und ansonsten grundlegendste Sprachelemente. C++ kann aber viel mehr
Dieses Konstrukt gibt es seit C++11 und nennt sich "range based for loop". In anderen Sprachen wird es oft "for each" genannt. Für alle Elemente in einer Ansammlung mache das hier. Das kann man durchaus zu den Grundlagen zählen.
Und "auto" erlaubt es einfach dem Compiler selbst den passenden Datentyp automatisch auszuwählen. So stimmt es immer mit dem Datentyp des Arrays ein. Bei primitiven Datentypen ist das vielleicht weniger wichtig, aber den Vorteil sieht man wenn man mit System-Bibliotheken und/oder Templates arbeitet.
C++11 hat generell viele Sachen eingeführt die das Programmieren komfortabler machen und die Sprache wesentlich konsistenter gemacht. Aber das meiste ist eher für etwas fortgeschrittenere Benutzer relevant
Drakkheen:
...
2. 10 als Intervall ist viel zu lang das flimmert wie verrückt. Bei 1 geht es gerade so aber ist eindeutig sichtbar...
const byte interval = 1; // quasi die Zeilenfrequenz
Die Zeilenfrequenz muss höher werden.
...
Arbeite mit delayMicroseconds(). Das Codeschnipselchen zum Zeigen einer Zeile meiner 5x5-Matrix sieht so aus:
Was für LEDs habt Ihr verbaut? Das Flimmern ist sehr viel geringer, wenn die Matrix aus roten LEDs besteht. Andersfarbige LEDs sind da viel problematischer.
nö keine Delays!
das muss auch ohne gehen.
Wenn du mit 10 Millis ein flimmern siehst, dann hats noch was ... lad mal deinen Sketch hoch mit allen deinen Änderungen die du gemacht hast.
In der Theorie sollte alle 10 Millisekunden etwas geändert werden,
"Dunkel" ist es nur von
digitalWrite(zeile[a], 0);
bis
digitalWrite(zeile[a], 1);
hast schon mal das Gegenteil probiert, und den Intervall ERHÖHT also eher rauf auf 40 millis oder 100 millis? theoretisch sollten eigentlich die 40 nicht mehr sichtbar sein ... das 100 (=0,1 sec) flackern würde ich verstehen.
noiasca:
nö keine Delays!
das muss auch ohne gehen.
Wenn du mit 10 Millis ein flimmern siehst, dann hats noch was ... lad mal deinen Sketch hoch mit allen deinen Änderungen die du gemacht hast.
Du musst bedenken, dass es bei 10 Millis pro Zeile 50 Millisekunden für die ganze Matrix dauert - d.h. lediglich 20 Hz „Bildwiederholfrequenz“. Dass das flimmert, unterschreibe ich.
aber wenn er schreibt das es bei 1ms pro Zeile = dann ist das trotzdem in gut 5ms erledigt = 200Hz das willst noch sehen?
ad hoc könnte man es auch mit interval 0 probieren dann gibts de facto bei jedem Aufruf ein update.
Rechnerisch versteh' ich es aber nicht (die 10 schon, die 1 nicht).
200 Hz sind wohl auch bei weißen LEDs flimmerfrei. Bei roten nehme ich so ab 70 Hz kein Flimmern mehr wahr.
Falls sich jemand fragt, warum man bei lediglich 25/50 Hz bei alten Röhrenglotzen kaum Flimmern gesehen hat: So eine Röhre leuchtet nach - LEDs nicht. Dass man bei roten LEDs Flimmern deutlich weniger wahrnimmt, habe ich nur durch Zufall „herausgefunden“. Das hängt anscheinend mit den Sinneszellen im Auge zusammen - Rotlicht beeinflusst auch die Nachtsicht weniger als andere Farben. Aber das ist Bio ... also nichts für hier.
hab jetzt nur jeweils "eine" Zeilen-LED, ohne Transe nur mit Vorwiderständen alles SMD direkt an den Pins:
rot
orange
gelb
grün
blau
rot bis grün ... flackern wird wahrnehmbar ab 4ms ("50Hz")
nur die Blaue - bei der merkt man es ab machnmal schon bei 3ms ("66Hz")
ja also genau, das was ich erwarten würde.
Aber bei 1 - seh ich klein Flackern.
Wenn ich mir den Schaltplan vom TO anschaue:
eigentlich sourced er bis zu 5 LEDs von einem Pin, und groundet über den Transe.
Würde ich genau umgekehrt machen.
Kanns ein Stromproblem Ausgangseitig sein?
Oder macht der Atmega keinen Unterschied ob ground oder source?
TO:
welche LEDs verwendest du genau? Bitte Datenblatt
und ein Echtbild von deinem Aufbau.
Wem die Wiederholfrequenz zu niedrig ist, der sollte auch mal dran denken, die langsamen digitalWrite() Aufrufe durch direkte Portzugriffe zu ersetzen.
denken tu ich laufend drann, ab wenns bei mir nicht flackert warum solls schneller werden... ^^
Außerdem warte ich noch auf einen Erfahrungsbericht mit 0.
P.S.: eigentlich hätte ich sogar die nächste Version für ganze Worte, aber wenn die Infos vom TO so tröpferlweise kommen, dann bremst das halt das Vorankommen...
noiasca:
P.S.: eigentlich hätte ich sogar die nächste Version für ganze Worte,
Ich habe mehrere Programme auf meinem Stapel mit der Bemerkung "unveröffentlicht", weil das Thema plötzlich abbrach. Ich tröste mich dann mit dem Gedanken, daß ich ja nun weiß, wie es geht :
OT: so in etwa ist es auch bei mir. Der Unterschied ist nur, dass ich selber nie ein händisches Multiplexing machen würde. Charlieplexing ist ja mal interessant, aber Multiplexing? Schon gar nicht prozedural. Somit ist das ganze ja nur für den TO entstanden und dann ist es halt schon ein wenig schad' wenn sich das zieht wie ein Strudelteig.
noiasca:
OT: so in etwa ist es auch bei mir. Der Unterschied ist nur, dass ich selber nie ein händisches Multiplexing machen würde. Charlieplexing ist ja mal interessant, aber Multiplexing? Schon gar nicht prozedural. Somit ist das ganze ja nur für den TO entstanden und dann ist es halt schon ein wenig schad' wenn sich das zieht wie ein Strudelteig.
Sorry dass ich nicht 24/7 hier reinsehen kann. Ich bekomme die Verständigungen von den Posts, aber die Zeit fehlt.
Wie gesagt es sollte ein SCHULPROJEKT für Anfänger sein und nicht ein verkaufsfertiges Produkt das auf dem neuesten Stand der Software ist.
EINFACH verständlich und nicht 100% perfektioniert.
Wenn ich 4-14 mit einer Schleife auf OUTPUT setze ist das für die SCHÜLER verständlich auch wenn es manchen hier hochkommt - sorry.
Drakkheen:
Sorry dass ich nicht 24/7 hier reinsehen kann. Ich bekomme die Verständigungen von den Posts, aber die Zeit fehlt.
Wie gesagt es sollte ein SCHULPROJEKT für Anfänger sein und nicht ein verkaufsfertiges Produkt das auf dem neuesten Stand der Software ist.
EINFACH verständlich und nicht 100% perfektioniert.
Wenn ich 4-14 mit einer Schleife auf OUTPUT setze ist das für die SCHÜLER verständlich auch wenn es manchen hier hochkommt - sorry.
Ja, hier geht's manchmal ziemlich wild zu Als Schüler dachte ich immer, Lehrer legen nachmittags die Beine hoch. Ist das etwa wirklich nicht so?! Bei „einfach“ und „verständlich“ fiel mir ein, dass das eines der Ziele ist, die ich beim Sabbeln im Kopf habe.