Atmega8 - Kein Interrupt/PWM

Gast #2482395
Lesenswert?

Einen schönen guten Abend zusammen,

habe ein Problem das ich selber nicht so ganz verstehe, vielleicht kann 
mir dabei jemand helfen.
Es geht dabei um die erzeugung eines PWM Signals mit dem Timer 1 am 
atmega8.

Code:

DDRB = 0xff;
sei();
TIMSK = (1<<TOIE1);

ICR1 = 400;
OCR1B = 150;
TCCR1A = (1<<COM1B1) | (1<<WGM11);
TCCR1B = (1<<WGM13) | (1<<WGM12)  | (1<<CS10);

Dieser erzeugt mir kein PWM bzw. es wird nicht einmal ein Overflow 
(TOV1) ausgelöst wenn der Zähler (TCNT1) den Wert in ICR1 erreicht. ICR1 
wurde jedoch als TOP durch das Fast-PWM festgelegt.

Kann in dem Code jemand einen Fehler entdecken?

Danke schon mal im Voraus.

Mfg
#2482437
Lesenswert?

Eichi schrieb:
> Kann in dem Code jemand einen Fehler entdecken?

Datasheet:
1
The ICR1 Register can only be written when using a Waveform Generation mode that utilizes
2
the ICR1 Register for defining the counter’s TOP value. In these cases the Waveform Generation
3
mode (WGM13:0) bits must be set before the TOP value can be written to the ICR1
4
Register.
Gast #2488198
Lesenswert?

hey,

vielen Dank für die Hilfe.
Habe nun mal das Programm nach euren Hilfen hin abgeändert.
Das Programm sieht soweit so aus:
1
DDRB = 0xff;
2
sei();
3
TCCR1A = (1<<COM1B1) | (1<<WGM11);
4
TCCR1B = (1<<WGM13) | (1<<WGM12)  | (1<<CS10);  
5
ICR1 = 0x190;   
6
OCR1B = 0xc8;
7
TIMSK = (1<<TOIE1);

Am Ausgang OC1B passiert aber leider immer noch nichts d.h. dieser ist 
weiterhin dauerhaft low.
Befinden sich in dem Code noch Fehler zur Erzeugung des PWM (mein Blick 
reicht leider nicht mehr aus)? Wenn nicht, kann ich diesen nämlich als 
Fehlerquelle ausschließen.

Danke für die Hilfen.

Mfg

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