Forum: Mikrocontroller und Digitale Elektronik XMega 192A3U / Frage zu Counter Type 2


von Markus M. (adrock)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von Markus M. (adrock)


Lesenswert?

...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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Komisch...

von Basti (Gast)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>     TCC2.CTRLA = TC_CLKSEL_DIV1_gc;       // Start timer

Timer ist laut dieser Zeile an - ohne den Rest des Codes zu kennen.

von Basti (Gast)


Lesenswert?

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

von unl34shed (Gast)


Lesenswert?

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.

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

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

von Markus M. (adrock)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Markus M. schrieb:
> Beim 256A3U gibt es ein riesiges Errata zur
> E-Rev.,

Wo?

von Markus M. (adrock)


Lesenswert?

...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.

Markus

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von Markus M. (adrock)


Lesenswert?

...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

von Markus M. (adrock)


Lesenswert?

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

von Zedd (Gast)


Lesenswert?

Ich seh aber bei Reichelt keinen Xmega192A3U Typen, nur den ohne U... 
bist du dir sicher das du weißt was du da tust?

von Markus M. (adrock)


Lesenswert?

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 :-)

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Die A3U-XMEGAs gibt es bei CSD und die sind - bis auf die 
USB-Schnittstelle - drop-in kompatibel.

von Zedd=Basti (Gast)


Lesenswert?

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...

von Zedd=Basti (Gast)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

He Basti, er hat den falschen Controller erwischt, kann man nichts 
machen.

von Markus M. (adrock)


Lesenswert?

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

von stromflo (Gast)


Lesenswert?

Guten Abend Markus,

beim folgenden Link gibt es ein Mikrocontrollermodul mit 256A3U.

http://re.reworld.eu/de/produkte/x3dil/index.htm

Vielleicht hilft dir das weiter.

Gruß Flo

von Markus M. (adrock)


Lesenswert?

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

von Markus M. (adrock)


Lesenswert?

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

von stromflo (Gast)


Lesenswert?

Guten Abend Markus,

hast du es mit dem Timer im SPLITMODE hingebracht?

Gruß Flo

von Markus M. (adrock)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.