* fd0@koeln.ccc.de fd0@koeln.ccc.de [2005-09-01 14:03]:
Mich würde speziell das verwendete Programm interessieren. Ich habe den PWM ebenfalls in Software realisiert (alleine schon deshalb weil ich 15 LEDs unabhängig voneinander ansteuern wollte), jedoch mittels des Timers und in C. Das ist noch nicht schnell genug, bei 8MHz kriege ich gerade mal 5bit tauglich hin. Eure Lösung klingt aufwendiger, ich würde jedoch gerne einmal einen Blick auf die relevanten Codeteile werfen.
[...]
Mich wunderte auch etwas die Aussage darüber daß der 16bit-Timer nicht ausreichend sei. Wurde hier der Prescaler übersehen, oder ist er in diesem Fall nicht anwendbar?
Wofuer einen Prescaler? Bei 256 "echten" Farbstufen, also mit einer Gamma-Korrektur von zb. 2, komme ich bei 16 MHz auf die Abstande zwischen zwei Zeitschlitze von 2, 7, 12, 17, 22, 27, usw.
Wir haben einen PWM-Zyklus in 255 nicht-lineare Zeitschlitze aufgeteilt und verwenden den 16bit-Timer, um jeweils pünktlich zum Beginn des nächsten Zeitschlitzes (evtl.) die Output-Pins umzuschalten.
Das Problem der sehr kurzem Abstände im unteren Helligkeitsbereich umgehen wir dadurch, dass diese alle in einem einzigen Interruptaufruf abgearbeitet werden.
Nebenbei hat der Atmega8, wie anscheinend auch der 8535, nur zwei 16bit-PWM-Kanäle, das reicht gerade für RG, RB oder BG, nicht aber für RGB ;)