mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fast PWM zählt nicht bis ICR1


Autor: Hans L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:

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

Warum zählt der Timer nicht bis 0xFF?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TCCR1A |= (1<<COM1A1)|(1<<COM1B1)|(1<<COM1A0)|(1<<COM1B0)
          (1<<WGM13)|(1<<WGM12)|(1<<WGM11);

Bei den WGM Bits muss man aufpassen. Die sind meistens auf 2 Register 
verteilt. So auch beim Mega8515. WGM13 und WGM12 sind in TCCR1B

Autor: Hans L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TCCR1A |=   (1<<COM1A1)|(1<<COM1B1)|(1<<COM1A0)|(1<<COM1B0)|1<<WGM11);            
ICR1 = 0x00FF;
OCR1A = 0x0001;
OCR1B = 0x000F;
TCCR1B  |= (1<<CS10)|(1<<WGM13)|(1<<WGM12);

macht keinen Unterschied. Uhr zählt munter über ICR1 drüber

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu spät. :-(

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Hans L. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Im AVR Studio!

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Brrr: Bildformate!

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

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Hans L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich weiß zwar nicht warum und weshalb aber nach einem neustart gings.. 
-.-

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Hans L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.