Kurze Frage: Ich will mit einem Attiny13 sowohl PWM als auch Peter Dannegger's Tasten entprellen nutzen. Geht das überhaupt? Der Timer muss doch für PWM anders konfiguriert werden, als für den Overflow Modus? Richtig?
Hi >Der Timer muss >doch für PWM anders konfiguriert werden, als für den Overflow Modus? Es gibt keinen 'Overflow Modus'. Vielleicht meinst du CTC. Aber auch bei PWM wird der Overflow-Interrupt, wenn freigegeben, ausgelöst. MfG Spess
So, ich kann das Datenblatt fast auswendig gelernt aber ich habe es immernoch nicht geschafft den Overflow Interrupt auszulösen. So wird der timer initialisiert: TCCR0A |= (1<<WGM00) | (1<<COM0A1) | (1<<COM0A0); TCCR0B |= (1<<CS01) ; OCR0A = 1; TIMSK0 |= (1<<TOIE0); Der Overflow wird aber nicht ausgelöst. Habe ich etwas falsch gemacht? Danke!
hast du interrupts mit "sei" aktiviert? brauchst du wirklich Phase Correct PWM? und der wert 1 in OCR0A stimmt denk ich mal auch nicht
Hi
>Der Overflow wird aber nicht ausgelöst. Habe ich etwas falsch gemacht?
Wie soll man das aus diesem Codefragment erkennen? Aber bist du sicher,
das du 'Phase Correct PWM' brauchst. Bis jetzt habe ich noch keine
sinnvolle Verwendung dafür gehabt.
MfG Spess
Tino Kühn schrieb: > Kurze Frage: Ich will mit einem Attiny13 sowohl PWM als auch Peter > Dannegger's Tasten entprellen nutzen. Geht das überhaupt? Der Timer muss > doch für PWM anders konfiguriert werden, als für den Overflow Modus? > > Richtig? Ja und nein. PWM-Ausgabe und Overflow sind zwei unabhängige Sachen, Overflow passiert auch bei PWM. Du musst einfach nur alles richtig einstellen und den Interrupt anbinden und der Interrupt kommt. Problem ist eher dass Du bei der Frequenz durch die Anforderungen der PWM-Anwendung evtl. ungünstig gebunden bist. Letztens selber gemacht, funktioniert gut. ;-)
OK, wenn beides gehen sollte, dann bin ich beruhigt. Ich habe auch ein wenig weitergelesen und beim probieren ist mir folgendes aufgefallen: wie schon mal geschrieben wird der Timer des Attiny folgendermaßen aktiviert: TCCR0A |= (1<<WGM00) | (1<<COM0A1) | (1<<COM0A0); //Set OC0A on Compare Match, clear OC0A at TOP and PWM (Phase Correct) 0xFF TOP BOTTOM TCCR0B |= (1<<CS01) ; // prescaler TIMSK0 |= (1<<TOIE0); // Enable Overflow Interrupt wird z.B. PB1 (OC0B) benutzt um zu schauen ob der Interrupt aufgerufen wird dann klappt das nicht. Wird aber PB2 verwendet funktioniert der Interupt aufruf. (vorher wird korrect per PORTB |= (1<<PB2); 0 gesetzt) //Interruptaufruf "Overflow" ISR( TIM0_OVF_vect ) { PORTB &= ~(1<<PB2); } Jetzt wurde doch aber OC0B garnicht aktiviert, COM0B1 & COM0B0 bleiben doch auf 0 und das bedeutet normal operation mode. Wird nach der Timer Initialisierung PORTB &= ~(1<<PB1); aufgerufen, dann leuchtet die LED (die ich rangehängt habe ganz schwach. Eigentlich will ich nur den einen PWM Kanal benutzen...
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.