Forum: Mikrocontroller und Digitale Elektronik Attiny13 PWM & TimerOverflow


von Tino K. (blumengiesser)


Lesenswert?

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?

von spess53 (Gast)


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

von Tino K. (blumengiesser)


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!

von Daniel M. (erfolgstyp)


Lesenswert?

hast du interrupts mit "sei" aktiviert?
brauchst du wirklich Phase Correct PWM?
und der wert 1 in OCR0A stimmt denk ich mal auch nicht

von spess53 (Gast)


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

von Jasch (Gast)


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

von Tino K. (blumengiesser)


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

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
Noch kein Account? Hier anmelden.