Guten Abend,
ich möchte mit einem Attiny85 eine 12bit RGB-Steuerung realisieren.
Allgemeine Problematik von RGB Steuerungen:
Um möglichst weiche Farbübergänge zu erzeugen sollte die RGB-Steuerung
mit einer möglichst hohen Auflösung arbeiten. Dabei muss aber
gleichzeitig auf die Frequenz des PWM-Signals geachtet werden, dass
diese nicht flimmert.
Außerdem soll die nicht lineare Kennlinie des menschlichen Auges
berücksichtigt werden um so einen linearen Helligkeitsverlauf der Farben
zu erzeugen.
Kurz zu meiem Programm:
Ich möchte den Timer 1 des Attiny85 im asynchronen Modus mit 64Mhz
betreiben um eine möglichst hohe PWM Frequenz zu erreichen. Rechnerisch
ergäbe sich meines Verständnisses nach in meinem Programm eine
PWM-Frequenz von ca. 61Hz (siehe Kommentar). Leider sehe ich ein starkes
Flackern, sodass ich sagen kann die Frequenz liegt bei vllt 10 Hz
(geschätzt). Leider habe ich kein Oszilloskop oder Ähnliches um mir das
erzeugte PWM-Signal anzeigen zu lassen.
Meine Frage:
Wo liegt also mein Fehler? Warum beträgt die PWM-Frequenz nicht meine
errechneten 61Hz?
Mir fallen da mehrere Sachen auf. Zum einen, ich persönlich sehe sogar
bei 150Hz noch Flackern, hab aber gelesen, dass ab 100-120Hz die meisten
Menschen kein Flackern mehr wahrnehmen. Vielleicht sind die 61Hz
insgesamt schon etwas zu wenig.
Aber egal, bei Software von dir passiert folgendes:
Du lässt zwar den Timer mit 64MHz laufen, aber der AVR arbeitet dennoch
mit 8MHz seine Befehle ab. Du hast daher alle 32 Takte einen Overflow
vom Timer und dein AVR kommt da nicht mehr mit die ISR abzuarbeiten und
verschluckt daher entsprechend viele (bei ca. 10Hz würde er eine
abarbeiten und 5 überspringen). Selbst in reinem Assembler würde das
knapp. Der Compiler sichert schlimmstenfalls alle Register und benötigt
dafür alleine 132 Takte.
Die 64MHz bringen nichts, wenn man nur den Timeroverflow ohne die PWM
verwendet. Ist das gleiche, als wenn du den Timer normal bis 31 laufen
lässt (außer, dass es eher auffällt, dass es so nicht geht).
Mark
Vielen Dank!
Jetzt habe ich meinen Denkfehler(nach einigen Tagen nahe der
Verzweifelung) verstanden!
Also kann ich wohl eine höhere Auflösung mit diesem AVR (bei gleichem
Takt) und Soft-PWM nicht erreichen.
Schönen Abend noch!
Man kann den PWM-Ausgang direkt rausschalten, sodaß du also nicht per
Interrupt die LEDs manuell an- und ausschalten musst, was bei der hohen
Frequenz wegen dem Jitter sowieso zu starken Ungenauigkeiten bei der
Helligkeit führen würde. Ich weiss allerdings nicht, wieviel
PWM-Ausgänge der Chip hat, also RGB wird damit dann ggf. nicht gehen,
aber du kannst es ja mal für eine LED ausprobieren. Sollte dann nicht
flackern. Die 100 Hz kannst du per Soundkarte aufnehmen und mit einen
der vielen verfügbaren Soundkarten Oszilloskope analysieren.