Hallo zusammen!
Ich habe mich dieses Wochenende mal an mein erstes "größeres"
Hardware-Projekt getraut ("groß" -> mit avr-gcc statt Arduino), ein per
vUSB angebundener LED-Controller.
Gesteuert werden 3 Farbkanäle (R,G,B) mit 8-bit Fast-PWM, die drei
PWM-Pins sind über einen ULN2003A-Chip mit dem LED-Band verbunden. Die
entsprechenden Bits habe ich gemäß Datenblatt[1] wie folgt gesetzt:
1 | // PWM-Pins auf Output schalten
|
2 | DDRB |= (1 << DDB1)|(1 << DDB2)|(1 << DDB3);
|
3 |
|
4 | // PWM-Kanal 1
|
5 | // COM1A1 + COM1B1 => Nicht-invertierendes PWM; WGM10 + WGM12 => fPWM 8-bit; CS10 => kein Prescaler
|
6 | TCCR1A = (1 << WGM10)|(1 << COM1A1)|(1 << COM1B1);
|
7 | TCCR1B = (1 << WGM12)|(1 << CS10);
|
8 |
|
9 | // PWM-Kanal 2
|
10 | // WGM21 + WGM20 => fPWM; COM21 => Nicht-invertierendes PWM; CS20 => kein Prescaler
|
11 | TCCR2 = (1 << WGM21)|(1 << WGM20)|(1 << COM21)|(1 << CS20);
|
Nun haben sich 3 Fragen/Probleme aufgetan, die mir Google leider nur
teilweise beantworten konnte:
1.) Ich bekomme die LEDs nie vollständig ausgeschaltet. Auch wenn ich
OCR1A, OCR1B und OCR2 auf 0 gesetzt habe, "glimmen" die LEDs (alle
Kanäle) immer noch mehr oder weniger leicht vor sich hin. Digital
abschalten kann man fPWM-Pins ja leider nicht mehr. Hat da jemand eine
Idee?
2.) Was bringt der PWM-Vorteiler (den man ja zwischen 1 und 1024 setzen
kann)? Im Internet habe ich nur gelesen, dass der Zähler bei einem hohen
Vorteiler nicht so schnell überlaufen würde, was mir ja einleuchtet,
aber was für einen Nachteil bringt das denn? De facto dürfte das PWM mit
einem geringeren Vorteiler doch "smoother" laufen, weil die Frequenz
doch dann höher ist? Oder habe ich da grundlegend etwas falsch
verstanden?
3.) Kann man den 3. PWM-Pin tatsächlich nur mit maximal 8-bit ansteuern?
Im Datenblatt[1] habe ich jetzt keine entsprechende Konfiguration für
10-bit gefunden, aber ich frage an dieser Stelle doch lieber nochmal
nach, denn 10-bit wären natürlich schon schöner :P.
Ich hoffe, dass die Fragen nicht allzu idiotisch sind und wäre froh wenn
mir jemand helfen kann :).
LG,
alphathinking
[1]
http://www.atmel.com/images/atmel-8159-8-bit-avr-microcontroller-atmega8a_datasheet.pdf