weil da r > 0 steht.... da is die 0 nich dabei...
ich habe eine PWM für eine LEDDimmung geproggt, aber warum geht die LED nicht ganz aus ?
ein Code Schnipsel, ich seh den Fehler im Moment nicht
#define r_max 32
uint8_t r=0;
void timer_init(void)
{ TCCR1A = (1<<WGM10);
TCCR1A |= (1<<COM1A1)|(1<<COM1B1);
TCCR1B = (1<<CS11)|(1<<CS10);
}
void rot(uint8_t rt)
{OCR1BL = rt;}
void dim_r_dn(void)
{ for(r=r_max; r>0; r--)
{ rot(r); wait_ms(warte); }
rot(0);
}
mich stört das programmtechnisch völlig unnötige "rot(0);" damit die LED aus ist, mit nur runterzählen for(r>0) r--; gehts eben nicht auf NULL bzw. geht die LED nicht aus
weil da r > 0 steht.... da is die 0 nich dabei...
Mir ist aber auch schon öfter aufgefallen, das die PWMs nicht ganz bis auf null regeln. Ich hab zum beispiel 2 Motoren, die ich über PWM regele, und wenn ich OCR0=0; ORC2=0; eingebe, höre ich immer ein brummen der Motoren, anders als wenn ich einfach die Ausgänge 0 setze.
Konnte mir das auch noch nicht erklähren...
MfG Jan
Habe Mut, dich deines eigenen Verstandes zu bedienen.
PWM hat immer einen Fehler bei Stellwert eins, wenn es nicht der Center-Aligned-Modus ist. Einfach mal im Datenblatt nachlesen, da wird das genau beschrieben.
HTH
Carsten
Lesezeichen