Forum: Mikrocontroller und Digitale Elektronik Hardware PWM


von martin (Gast)


Lesenswert?

Hi

Ich möchte eine Hardware PWM generieren, also Pin toggeln ohne 
Interrupt.
Ich verwende einen ATTiny44.
Das Problem ist, dass OC1B(PinA5) nicht automatisch toggelt.
Wenn ich über TIMSK1 |= (1<<OCIE1B); das Interrupt freischalte dann 
springt er in die ISR --> ISR (TIM1_COMPB_vect) .
Aber das muss doch auch automatisch gehen?
Hab ich bei den Registern was falsch gesetzt.

TCCR1A |= (1 << COM1B0); // Toggle OC1B on Compare Match
TCNT1 = 0;               // Counter auf 0 stellen
OCR1A=62500;
TCCR1B |= ((1<<WGM12)|(1<<CS11));   // Teiler 8, CTC Mode

Gruß Martin

von spess53 (Gast)


Lesenswert?

Hi

>Ich möchte eine Hardware PWM generieren, also Pin toggeln ohne...

Und warum dann das:

>TCCR1B |= ((1<<WGM12)|(1<<CS11));   // Teiler 8, CTC Mode

MfG Spess

von martin (Gast)


Lesenswert?

Und warum dann das:

>TCCR1B |= ((1<<WGM12)|(1<<CS11));   // Teiler 8, CTC Mode

Mit WGM12 stelle ich doch den CTC Mode ein.
Was soll daran falsch sein, oder kann ich mit dem CTC Mode nicht das 
OC1B toggeln lassen?

von spess53 (Gast)


Lesenswert?

Hi

>Was soll daran falsch sein, oder kann ich mit dem CTC Mode nicht das
>OC1B toggeln lassen?

Was denn nun? PWM oder CTC?

>oder kann ich mit dem CTC Mode nicht das OC1B toggeln lassen?

Nein. Nur mit OC1A. Siehe 'Table 12-5. Waveform Generation Modes'

MfG Spess

von martin (Gast)


Lesenswert?

In Table 12-2 steht --> Toggle OC1A/OC1B on Compare Match.
Wenn ich also OCR1A einen Werte gebe, müsste doch bei einem Compare des 
Timerwertes das OC1B toggeln.
Oder muss ich jetzt auf FastPWM zurückgreifen, ich möchte ja nur eine 
LED blinken lassen?

Gruß Martin

von spess53 (Gast)


Lesenswert?

Hi

>In Table 12-2 steht --> Toggle OC1A/OC1B on Compare Match.

Richtig. Aber nur bei OC1A wird bei CTC auch der Timer zurückgesetzt. 
Ist dein OC1A-Pin schon belegt, oder was hindert dich daran die LED an 
PA6 zu hängen?

>Oder muss ich jetzt auf FastPWM zurückgreifen, ich möchte ja nur eine
>LED blinken lassen?

Es gibt mehrere Möglichkeiten. Du kannst auch CTC mit dem ICR1 machen 
und im TIM1_CAPT-Interrupt ein Pin togglen. Beim ATTiny44 geht das recht 
einfach: Einfach eine 1 in das entsprechende PIN-Register schreiben.

MfG Spess

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.