Hallo,
ich versuche grade eine Messung aufzubauen, bekomme jedoch Probleme bezüglich der Timer.
Für die Messung verwende ich ein Atmel XPLAINED Board mit einem XMEGA128A1. Der Prozessor läuft für diese Aufgabe mit dem internen 32 MHz-Takt.
Der XMEGA soll zeitlich getaktet ein Signal mit Hilfe des DACs generieren und parallel ein AD-Wandler mit einer 16-Bit Parallelschnittstelle auslesen. Das Signal soll mit ca. 40 Samples bei 10 kHz ausgegeben werden - damit ergibt sich ein Takt von 2,5 µs für den ersten Timer. Der AD-Wandler soll parallel 800 kSamples aufnehmen, welche alle 1,25 µs mit Hilfe des DMAs ausgelesen werden sollen.
Beides bekomme ich einzeln zum laufen - die Zeiten liegen dann in dem gewünschten Bereich. Für Versuchszwecke gebe ich das Signal als Sinus mit dem DAC aus und anstatt den AD-Wandler auszulesen gebe ich Flanken an einem Port aus (Der AD-Wandler ist Hardwareseitig noch nicht vorhanden) und lasse mir diese auf einem Oszilloskop anzeigen.
Aktiviere ich aber beide Timer, so kommt es mindestens bei einem Timer zu erheblichen Verzögerungen oder der Timer arbeitet deutlich schneller als eingestellt oder gar unregelmäßig.
Ich verwende die 16 Bit Timer TCC0 und TCC1. Für Versuche habe ich das Interrupt leer gelassen und erhalte schon im Simulator (Atmel Studio 6.1) abweichende Zeiten. Auch bei der Ausgabe und dem Einlesen der Spannungen mit dem Oszilloskop sieht es nicht anders aus.
Auch das Spielen mit den Interrupt-Levels der Timer hat mir nicht weiter geholfen. Weiterhin ist mir aufgefallen, dass die Optimierungs-Einstellung im Atmel Studio ebenfalls negativen Einfluss auf die Zeiten hat.
Leider finde ich keinen Ansatzpunkt wo ich nun mit der Fehlersuche weiter vorgehen soll.
Ich hoffe es findet sich wer, der mir einen guten Hinweis geben kann. Ich bin mir bewusst, dass ich bezüglich der Anforderungen an die Schnelligkeit mit dem XMEGA an die Grenzen stoße, bin aber optimistisch, dass ich die Aufgabe mit den funktionierenden Timern lösen kann.
Mein Problem besteht grundsätzlich daraus, zwei 16-Bit Timer so einzustellen, dass diese im µs-Bereich exakt arbeiten ohne sich gegenseitig zu stören.
Gruß Erik
Lesezeichen