Forum: Mikrocontroller und Digitale Elektronik Xmega pulse with capture


von Wanninger (Gast)


Lesenswert?

Hallo Leute,

ich habe leider ein problem mit einer Messroutine:

Baustein: Xmega 32 E5
Signal: Rechteck fmax 500kHz
Messung: Periodendauer

Signal ist per Eventsystem auf einen Timer der auf
"Frequency and Pulse Width Capture of an External Signal"

konfiguriert ist geleitet, der Timer läuft mit 32 MHz und
zählt bis 0xFFFF

Mit dieser Konfiguration erhalte ich ohne jeglicher
CPU Belastung automatisch die Periodendauer und die Ontime
des Signals im CCA und CCB Register was auch soweit funktioniert, 
demnach sollte bei einem 1kHz Rechteck
31897 timerticks als Ergebnis erhalten, was ich sporadisch auch bekomme, 
bei Wiederholmessung pendeln die Werte im Register zwischen +-10 und 
+-40%, egal ob ich jetzt mit 1kHz oder z.B. 500KHz messe, bei 
Wiederholmessungen pendeln die Werte immer um den gleichen Prozentsatz 
was mache ich hier nur falsch???

Danke für eure Unterstützung!!!

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


Lesenswert?

Zeig mal Deinen Code, der Fehler wird dort zu finden sein. Ich nutze den 
gleichen Controller in einer Modellbahnanwendung, da werden die Pulse 
einwandfrei und mit ±1LSB gemessen.

von Alexxx (Gast)


Lesenswert?

>> demnach sollte bei einem 1kHz Rechteck
31897 timerticks als Ergebnis erhalten...

Wie kommst du auf die komische Zahl?
Bei einer System- und Timerfrequenz von 32MHz solltest du für die 
Periodendauer natürlich den Wert 32000 erhalten!

von Wanninger (Gast)


Lesenswert?

Ja das ist richtig, er müsste bei 32 MHz und 1kHz
auf ca. 32000 zählen, ich hab oben den Zählwert verwendet
der bei etwas über einem kHz rauskommt, da ich nicht genau 1 kHz
gemessen hatte, ----> Code kann ich heut abend reinstellen, ich mach 
aber bis dato
nur das Hardwaresetting für den Timer und das Eventsystem, 
Softwareseitig pfuscht da noch nichts rein.

Die Werte der Register CCA und CCB überprüfe ich bis jetzt noch mit der 
IO View im Atmel Studio,
das bedeutet, ich lass den Programmfluss normal laufen und drücke dann 
auf Break um die Registerwerte zu sichten.

---> kann es sein das der Timer ein Capture macht wenn ich auf Break 
drücke?
Das würde meine Messabweichungen von bis zu 50% erklären.

von Ingo L. (corrtexx)


Lesenswert?

Wanninger schrieb:
> kann es sein das der Timer ein Capture macht wenn ich auf Break
> drücke?
Eher nicht, aber er hält vermutlich den Timer an! Kannst du nicht die 
Werte per RS232 raushauen? Debugger sind Fluch und Segen.

von Alexxx (Gast)


Lesenswert?

> kann es sein das der Timer ein Capture macht wenn ich auf Break
> drücke?
Ist möglich, dass das Eventsystem im Debug-Break aktiv bleibt, die Timer 
werden definitiv angehalten.
Du könntest auch einfach die CCx-Werte in einer (evtl. ISR-)Routine in 
eine Variable kopieren und die anschauen.
ODER
es stimmt mit deinem Frequenzsignal etwas nicht (Masse/Pegel??)

von Wanninger (Gast)


Lesenswert?

Ich werde die Registerinhalte per ISR abrufen und kontrollieren,
ich hoffe dies ist auch die Ursache meiner Messfehler.

Danke für eure Unterstützung!!!

von Mitlesa (Gast)


Lesenswert?

Warum hat noch niemand nach der Beschaltung bzw. Einspeisung
des Signals gefragt?

Ist die schrottig dann hilft die ganz Software nix.

von Wanninger (Gast)


Lesenswert?

Das Signal hab ich natürlich als erstes kontrolliert...
Daran liegt es leider nicht.

Wird jetzt dann gleich wie oben beschrieben nachschauen.

von Mitlesa (Gast)


Lesenswert?

Wanninger schrieb:
> Das Signal hab ich natürlich als erstes kontrolliert...
> Daran liegt es leider nicht.

Ich sprach auch von der Einspeisung, nicht vom Signal selbst.

von Wanninger (Gast)


Lesenswert?

Hallo,

momentan hab ich noch probleme mit dem Usart, muss mich erst in alles 
einarbeiten.

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.