combie:
Zudem ist der FreeRunningMode und damit auch das ADIF nur wirklich interessant, wenn du auch Interrupts nutzen möchtest.
Willst du aber nicht.Warum eigentlich nicht?
Ja warum nicht? Weil's leider nicht geht. Ich versuch's mal zu erklären:
Ich betreibe mit dem Arduino eine Matrix von 8 mal 8 RGB-LEDs. Da muss ich für jede der 8 Zeilen 24 Bit in ein Schiebregister takten, und zu einem genau definierten Zeitpunkt (möglichst auf die Microsekunde genau) freischalten. Wenn einzelne Farben der 8 Felder (also einzelne der 24 LEDs einer Zeile) unterschiedliche Helligkeiten haben, muss ich die 24 Bit mehrmals erneut durchtakten und wieder zu jeweils einem genau definierten Zeitpunkt freischalten, damit jede LED genau so lange leuchtet, wie es der gewünschten Helligkeit entspricht.
Das war soweit nun erst der Vorgang für eine einzelne Zeile. Das alles darf aber nur etwa eine Millisekunde dauern, denn es gibt ja 7 weitere Zeilen, und in weniger als 10 Millisekunden muss alles durch sein, so dass die Bildwiederholfrequenz für das gesamte LED-Feld (alle 8 * 8 * 3 LEDs) über 100 Hz liegt, so dass nichts flimmert.
Das funktioniert soweit auch alles wunderbar, und im beschriebenen Ablauf ist auch immer wieder kurz Zeit für andere Aufgaben übrig, aber ich kann da nicht jedes mal, wenn ich einen Messwert brauche, auf den ADC warten, und ich kann den Ablauf auch nicht durch einen Interrupt unterbrechen lassen, wenn gerade vom Zeitpunkt her ein Helligkeitswert erreicht ist und die nächsten 24 Bit freigeschaltet werden müssen. Ich verwende da Zeiteinheiten von 4 Microsekunden, die ich genau treffen muss. Das würde mit einem Interrupt, der da immer wieder dazwischenkommt nie funktionieren, sondern würde dann völlig unregelmäßig flimmern.