Fast PWM zählt nicht bis ICR1

Gast #1608991
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
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 #1609035
Hans L. schrieb:
> Uhr zählt munter über ICR1 drüber

Dann zeig bitte mal ein vollständiges Minimalbeispiel. Woran merkst Du, 
dass er zu weit zählt?
Gast #1609153
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.