Ich Versuche gerade ein Power LED (weis) zu dimmen aber je dunkler ich sie dimmen will (kleinerer pwm wert = dunkler) desto mehr flackert es. Der Atmega32 (Timer1) wird an 4Mhz betrieben (PWM Pre. = 1). Wie kann ich dieses Problem eliminieren?
#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "pwm.h" void Init_PORT(void) { PORTD = 0x00; DDRD = (1<<PD5); } void Init_PWM(void) { //Timer1, Fast PWM, TCCR1A = (1<<COM1A1) | (1<<WGM11); TCCR1B = (1<<WGM12) | (1<<WGM13) | (1<<CS10); } void Set_PWM(unsigned int value) { OCR1A = value; ICR1 = 0xFFFF; } int main(void) { Init_PORT(); Init_PWM(); while(1) { Set_PWM(x); } return 0; }
Warum setzt du IRC1? Das ist zumindest für eine normale PWM bei fester Frequenz nicht nötig. Dass Du Set_PWM() in einer Endlosschleife stehen hast ist auch nicht gut wenn vor dem Setzen des Registers nicht darauf gewartet wird dass der Timer auf 0 steht. Spring einmal vor der Endlosschleife in die Set_PWM() Funktion und danach nur noch wenn sich der Wert auch ändert. Das gibt sonst ein Durcheinander. Grüße
Tilo schrieb: > Ich Versuche gerade ein Power LED (weis) zu dimmen aber je dunkler ich > sie dimmen will (kleinerer pwm wert = dunkler) desto mehr flackert es. > Der Atmega32 (Timer1) wird an 4Mhz betrieben (PWM Pre. = 1). > > Wie kann ich dieses Problem eliminieren? Indem du keine volle 16 Bit PWM benutzt. Bei 4Mhz kommst du damit auf eine PWM-Frequenz von ~61Hz. Und wenn die Led Dunkel ist, sieht man das bereits. Bruachst du wirklich eine LED mit 65536 verschiedenen Helligkeitswerten?
Nein soviele Werte sieht/unterscheidet man denk ich auch garnicht. Also reicht ein 8Bit PWM. Habt ihr mir ein Beispiel für einen solche Dimmerlampe mit LED. Eiei ist das HEIß.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.