Hi,
ich habe hier einen XMega192A3U und möchte zur PWM-Generierung den
Counter 0 als Type 2 (SPLITMODE) verwenden.
Soweit so gut, er zählt, aber er gibt mir im Studio 6 Simulator den Wert
für den Compare-Output nicht auf dem OUT Portpin (C0) aus.
Hier mal der Testcode:
1
PORTC.DIR=0xff;
2
PORTC.PIN0CTRL=PORT_INVEN_bm;// Invert output
3
4
// Init timer stuff
5
6
TCC2.CTRLE=TC_BYTEM_SPLITMODE_gc;
7
TCC2.CTRLB=TC2_LCMPAEN_bm;
8
TCC2.CTRLC=0;
9
TCC2.LPER=WS_CNT_TOTAL;
10
TCC2.LCMPA=WS_CNT_HIGH;
11
TCC2.CTRLA=TC_CLKSEL_DIV1_gc;// Start timer
Im I/O view sehe ich, wie er zählt und auch im Register TCC2.CTRLC das
LCMPA Bit setzt bzw. löscht. Aber wenn ich mir die Port-Bits anzeige,
stehen bei OUT immer alle auf 0. Allerdings sehe ich den wechselnden
Wert bei IN.
Ist das normal? Ich meine das war bei den ATmegas anders...
Danke & Gruß
Markus
Traue keinem Simulator, den Du nicht selbst geschrieben hast. Flashe
doch den Code und häng einen LA an die Pins, dann siehst Du doch, ob sie
toggeln. Es sind ja ausser den Timereinstellungen auch noch
Porteinstellungen für die korrekte Funktion verantwortlich.
...auch in der Hardware funktioniert es nicht.
Ich kann den Port ganz normal als Ausgang verwenden und mit PORTC.OUT
beliebige Werte auch für den Pin ausgeben, der eigentlich für den LCMPA
sein sollte.
Also wird irgendwie die alternative Funktion nicht auf den Port
geschaltet.
Grüße
Markus
Ist der Clock vom Timer angeschalten?
Ich glaub Standard ist "an", aber die ASF Lib schaltet die
sinnvollerweise in der sysclk_init alle erstmal aus...
Grüße
Basti
hä? Nein, ich mein ob der Systemclock auf den Timer durchgeschalten ist.
Sonst läuft da nix... zum Stromsparen kann man ja bei den XMegas die
ganzen Clocks von den Modulen abkoppeln...
Meist in dem Register zu finden ;)
PR.PRGEN
Was schreibst du denn in CTRLB?
[c] TCC2.CTRLB = TC2_LCMPAEN_bm; [\c]
*Finde nichts zu der LCMPAEN_bm
Bzw. spzieller, welche Waveform benutzt du?
Im Normal Mode kommt nichts raus.
Hallo,
frag mal bei Atmel nach, das könnte ein Bug sein.
Die PWM Einheiten wurden in den letzten Controller Versionen noch nach
gebessert. Aber es wurden noch nicht alle Bugs behoben.
Bsp. siehe hier:
http://www.jtronics.de/forum/viewtopic.php?rb_v=viewtopic&f=6&t=3
Hi,
also ASF benutze ich garnicht. Auch die Clockinit mache ich zu Fuß (will
ja was lernen :-). Lt. Doku ist ja per Default die CPU-Frequenz an die
anderen Einheiten durchgeschaltet solange nichts anderes konfiguriert
ist.
TC2_LCMPAEN wird in der Doku komischerweise TC2_LCMPENA genannt. Aber im
Include ist es eben so wie beschrieben.
Ja, an einen Bug hatte ich auch schon gedacht. Ich habe einen 192A3U in
der E Revision (von Reichelt). Bei dem gibt es kein Errata zur
E-Revision ("not sampled"). Beim 256A3U gibt es ein riesiges Errata zur
E-Rev., allerdings ist dort nichts von diesem Effekt beschrieben.
Na ich kann ja mal Atmel fragen...
Grüße
Markus
Markus M. schrieb:> ...stimmt das Errata war für den Controller ohne "U", also nur den> 192A3. Ob das auch für den "AU" anwendbar ist, weiß ich natürlich nicht.
Nein. Soweit ich weiss, sind die AxU-Typen bis auf eine Kleinigkeit im
AWEX fehlerfrei.
...das wäre ja zu schön :-) Na mal schauen...
Habe jetzt nochmal mit TC0 probiert... also das im Simulator der Status
der alternativen Portfunktion "CMPA" bei IN erscheint ist da genauso,
stört mich jetzt nicht wirklich.
Werde nachher mal den Source aus der Appnote ausprobieren um ein
grundsätzliches Problem auszuschließen...
Grüße
Markus
Grummel... meine aktuellen Ergebnisse:
- Verwende ich TCC0 funktioniert es sowohl im Simulator als auch auf dem
µC.
- Verwende ich TCC2 (SPLITMODE) funktioniert es im Simulator, aber nicht
auf dem µC.
Der Controller scheint alle Schreibzugriffe auf die TCC2 Register (die
letztendlich einigen TCC0 Registern entsprechen, jedoch mit leicht
anderer Funktion) nach dem Aktivieren des SPLITMODE zu ignorieren. Er
zählt nichtmal.
Grüße
Markus
DANKE.
Grrr... Atmel mit ihrem verf***ten Namensschema. ich habe wohl
wahrhaftig einen Controller 192A3-AU vor mir und keinen 192A3U-AU. Und
der ohne U unterstützt natürlich den Timer 2 garnicht.
Auch super, dass man das beim Lesen der Device-ID nicht unterscheiden
kann.
Problem gelöst, Patient tot :-)
Es gibt bei dem U Typ ein Counter 2, den es bei dem ohne USB nicht gibt.
>ich habe hier einen XMega192A3U und möchte zur PWM-Generierung den>Counter 0 als Type 2 (SPLITMODE) verwenden.
Dann meintest du wohl auch Counter 2 im Splitmode...
Hm, sehr verwirrend... im U Datasheet ist der Counter 2 extra behandelt.
Aber in der Beschreibung steht, dass er nur "existiert", wenn Counter 0
auf Splitmode gesetzt ist... vielleicht solltest du das mal bei counter
0 probieren...
A timer/counter 2 is realized when a timer/counter 0 is set in split
mode. It is a system of two eight-bit
timer/counters, each with four compare channels.
und
The timer/counter 2 is set back to timer/counter 0 by setting it in
normal mode; hence, one timer/counter can exist only as
either type 0 or type 2.
Is schon verwirrend... aber die unterschiede scheinen nur in den
Menüpunkten im Datenblatt zu existieren... sollte wie Knut schon sagte,
trotzdem Funktionieren...
Würde aber diesmal die Splitmode bei Counter 0 ansetzen!
Grüße
Basti
Jepp, ich werde jetzt nochmal den Timer 0 im Bytemode ausprobieren :-)
Hintergrund ist:
Ich möchte die Werte zur PWM-Generierung über DMA in das
Compare-Register schreiben. Wenn ich den Counter im normalen Modus
verwende, muss ich immer zwei Bytes per DMA übertragen, auch wenn das
obere Byte immer 0 ist.
Das wäre dann ziemliche Platzverschwendung im SRAM.
Tja, mit dem falschen Controllertyp ist mir fast peinlich, und vor allem
ärgerlich, da ich ihn nämlich im "dead bug style" Kopfüber auf mein
Board geklebt habe und die Beinchen einzeln mit Fädeldraht angeschlossen
sind :-)
Da sind wir schon beim zweiten Punkt: Gibt es irgendwo so fertige kleine
Boards a la Arduino mit dem xmega192a3u (oder von mir aus 256a3u)?
Ansonsten müsste man sowas mal in Angriff nehmen... leider habe ich
wenig Übung was Eagle oder Kicad angeht, aber nochmal tue ich mir das
mit dem Fädeldraht nicht an...
Grüße
Markus
Cool... genau das habe ich gesucht und hätte ich sonst selbst nachgebaut
:-)
Ein einfaches Board ohne viel Schnickschnack...
Gut, 10 EUR für die Platine sind kein Schnäppchen...
Danke für den Link!
Grüße
Markus
BTW... habe jetzt erstmal mit dem Counter 0 im BYTEMODE weitergemacht
auf dem 192A3... scheint so zu funktionieren wie ich es mir vorstelle,
mal sehen...
Grüße
Markus
Hi,
nein, da ich nur einen 192A3 Controller hatte (keinen 192A3-U wie
gedacht) habe ich den Splitmode verworfen und erstmal nicht weiter
untersucht...
Grüße
Markus