PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kleineres Problem mit PWM



jar
30.10.2007, 17:02
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

goara
03.11.2007, 17:23
weil da r > 0 steht.... da is die 0 nich dabei...

Spongebob85
03.11.2007, 17:49
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

schnasemann
04.11.2007, 13:51
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