Attiny13 PWM & TimerOverflow

Gast #2241195
Lesenswert?

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
OP #2241540
Lesenswert?

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!
Gast #2241560
Lesenswert?

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
Gast #2241646
Lesenswert?

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. ;-)
OP #2241659
Lesenswert?

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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren