Guten Abend zusammen, Ich brauche eine Anregung "was es sein könnte/ist".. viele LEDs werden per MOSFET (BUZ21) an und aus geschaltet. Im "ein" Zustand sollen die leds gedimmt werden, per PWM. Das Problem: neben der korrekten Funktion flackern die LEDs kurz mit voller Leistung auf, und das periodisch (Absand ca 10-15sec). Also 400ms aus, 60ms an(gedimmt), usw.... , kurz ungedimmt an ... Dazu lösche ich für die "aus" Phase die CSxx bits im TCCR1B. Verwendet wird ein attiny2313. Vielen Dank im Voraus! #ifndef F_CPU #define F_CPU 12000000UL #endif #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define LED PB3 #define sw1 PD2 #define sw2 PD3 int main(void) { DDRD=0x00; PORTD=0xff; DDRB=0xff; PORTB=0x00; //initial timer1 as PWM TCCR1A= (1<<COM1A1)|(1<<WGM11); TCCR1B= (1<<WGM13)|(1<<WGM12)|(1<<CS10); //end initialise PWM ICR1=0x6fff; //top value OCR1A=0x0fff; //default compare value while(1) { TCCR1B &=0b11111000; //turn PWM off PORTB=0x00; _delay_ms(400); TCCR1B= (1<<WGM13)|(1<<WGM12)|(1<<CS10); //turn PWM on _delay_ms(60); } }
zibi dziubek schrieb: > TCCR1B &=0b11111000; //turn PWM off Das schaltet aber nicht die PWM 'off' sondern setzt nur den Prescaler des Timers auf 0 zurück. Der Timer ist deswegen trotzdem noch im PWM Modus und hat die Kontrolle über den Portpin. Daher .... > PORTB=0x00; ... ist das wirkungslos Ich würds ehrlich gesagt gar nicht so machen. Das 'Ausschalten' machst du wahrscheinlich nur deswegen, weil du die LED auch wirklich ausschalten musst und nicht nur auf ganz kleiner PWM Stufe glimmen. Dreh die PWM mit den COM Bits um. Dann kannst du mit dem richtigen PWM-Wert tatsächlich auch aus erreichen. Und dann manipulierst du ausschliesslich nur noch das OCR1A Register um die LEDs ein / aus zu schalten.
Danke für den Tipp, ich werde es jetzt ausprobieren. Jedoch sagt das Datenblatt: siehe Bild.
zibi dziubek schrieb: > Jedoch sagt das Datenblatt: > > > siehe Bild. Was soll mir das jetzt sagen? Sag ich doch: Der Timer ist gestoppt, weil er keinen Prescaler mehr hat. Aber das beeinflusst ja die WGM Bits nicht. Und solange die auf PWM stehen, hat der Timer den Portpin unter Kontrolle. Du hast halt eine PWM, die momentan nicht läuft - aber - du hast nach wie vor einen Timer im PWM Modus!
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.