Fast PWM zählt nicht bis ICR1

Gast #1608991
Lesenswert?

Hallo Leute,

ich möchte eine FAST PWM erzeugen und dazu die beiden Kanäle des Timer1 
an meinem MEGA8515 benutzen.

Komischerweise zählt der Timer nicht im fast Modus sondern im 
phasenkorrekten Modus bis 1FF und dann wieder runter auf 0. Ich möchte 
aber den TOP durch ICR1 festlegen und habe deshalb PWM Modus 14 wie 
folgt konfiguriert:

...
1
 TCCR1A |= (1<<COM1A1)|(1<<COM1B1)|(1<<COM1A0)|(1<<COM1B0)| //Set OC1A/OC1B on Compare Match, clear OC1A/OC1B at TOP
2
           (1<<WGM13)|(1<<WGM12)|(1<<WGM11);        // Fast PWM with TOP : ICR1
3
 ICR1 = 0x00FF;
4
 OCR1A = 0x0001;
5
 OCR1B = 0x000F;
6
 TCCR1B  |= (1<<CS10);
...

Warum zählt der Timer nicht bis 0xFF?
Gast #1609024
Lesenswert?

1
TCCR1A |=   (1<<COM1A1)|(1<<COM1B1)|(1<<COM1A0)|(1<<COM1B0)|1<<WGM11);            
2
ICR1 = 0x00FF;
3
OCR1A = 0x0001;
4
OCR1B = 0x000F;
5
TCCR1B  |= (1<<CS10)|(1<<WGM13)|(1<<WGM12);

macht keinen Unterschied. Uhr zählt munter über ICR1 drüber
Gast #1609153
Lesenswert?

Das

> Wie ist der Zählerstand wenn die AnweisungTCCR1B  |= 
(1<<CS10)|(1<<WGM13)|(1<<WGM12);
> ausgeführt wird?

 habe ich nicht ohne tieferen Grund gefragt:

Siehe Datenblatt, S. 112

"...there is a risk that the new ICR1 value written is lower than the 
current value of TCNT1.
The result will then be that the counter will miss the Compare Match at 
the TOP value.
The counter will then have to count to the MAX value (0xFFFF) and wrap 
around starting
at 0x0000 before the Compare Match can occur."

Die hier weggelassen Einschränkung am Anfang des Satzes mag ncht allein 
ausschlaggebend sein, wenn der Timer, etwas von vorherigen Experimenten 
noch auf einem anderen Zählerstand seht als nach dem Reset.
Gast #1609273
Lesenswert?

Grrrr schrieb:
> Wie ist der Zählerstand wenn die AnweisungTCCR1B  |= 
(1<<CS10)|(1<<WGM13)|(1<<WGM12);
>
>
>
>
>
> ausgeführt wird?


es ist doch manchmal zum Mäusemelken!
jetzt geht das Ganze wieder nicht.. grrr..

Im AVR Studio zählt er immer wieder von 0 bis 0x1FF und wieder zurück.. 
über mehrere Perioden.

Der Zähler ist vorm Starten 0.

Komisch ist weiterhin, dass ich nicht bis auf OCR1A/B=0 runterdimmen 
kann. Ein ganz kleines bisschen leuchtet die LED immernoch.

Auch komisch ist, dass ICR1 wohl vom uc wahrgenommen wird als obergrenze 
für den Timer, da sich bei Änderungen die Helligkeit von OCR1A/B 
mitändert. Im AVR Studio wird beim Timer jedoch IMMER nur bis 1FF 
gezählt (in nicht FAST PWM Methode).

Bin ratlos.
#1609282
Lesenswert?

Hans L. schrieb:

> Komisch ist weiterhin, dass ich nicht bis auf OCR1A/B=0 runterdimmen
> kann. Ein ganz kleines bisschen leuchtet die LED immernoch.

Das ist normal und aus der hardwareseitigen Arbeitsweise der PWM 
bedingt. Bei 0 musst du eben den Timer ganz abschalten.

> mitändert. Im AVR Studio wird beim Timer jedoch IMMER nur bis 1FF
> gezählt (in nicht FAST PWM Methode).

Der Simulator im AVR-Studio hat so seine Macken. Hast du schon gesucht, 
ob es sich dabei nicht um einen dokumentierten Fehler handelt?
Gast #1609295
Lesenswert?

Hans L. schrieb:
> über mehrere Perioden.

Das ist eindeutig nicht wie im Datenblatt beschrieben.

Es gibt übrigens seit einiger Zeit zwei Simulatoren. Ich weiss 
allerdings nicht ob beide den Mega8515 unterstützen. Solltest Du mal 
nachschauen. (Projekteinstellungen)
Gast #1609314
Lesenswert?

Karl heinz Buchegger schrieb:
> Hast du schon gesucht,
>
> ob es sich dabei nicht um einen dokumentierten Fehler handelt?

Nein. Habe ich nicht. Scheint aber einfach ein Fehler zu sein.

Grrrr schrieb:
> Es gibt übrigens seit einiger Zeit zwei Simulatoren. Ich weiss
>
> allerdings nicht ob beide den Mega8515 unterstützen.

Der Simulator2 unterstützt den 8515 nicht.

Wie kann man denn richtig debuggen? Das ist total nervig. Vor allem, 
wenn die Projekte mal ein wenig größer werden.

Kann man mit den Hardware Debuggern GENAU das sehen was in der HARDWARE 
passiert und dann mit den gesamten Informationen wie im AVR Studio; nur 
ebn richtig?
Gast #1609335
Lesenswert?

Hans L. schrieb:
> Kann man mit den Hardware Debuggern GENAU das sehen was in der HARDWARE
> passiert und dann mit den gesamten Informationen wie im AVR Studio; nur
> ebn richtig?

Ob die Timerwerte etwa mit einem MKII korrekt gelesen werden können, 
weiss ich leider nicht. Sorry. Probier es mal selbst.

Es ist aber mit hoher Wahrscheinlichkeit davon auszugehen, das der uC 
korrekt geht. D.h. Poor-Mans-Debugging mit printf oder Pin-Toggle falls 
Du kein MKII hast.

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