Hallo, wenn ich das Datenblatt des dsPIC30F6014 richtig verstehe, dann können entweder die oberen, oder die unteren 16-Bits eines 32-Bit Timers (Timer 2 und 3 kaskadiert) durch ein Capture-Event in den FIFO-Puffer (ICxBUF) gecaptured werden? – Abhängig von Bit ICTMR im Register ICxCON. Wie ist es nun möglich alle 32-Bits zu capturen? Meine erste Idee hierzu: Das Capture-Event auf 2 Input-Capture-Eingänge gleichzeitig zu legen, die unteren 16-Bits dann mit dem ersten Capture-Input und die oberen 16-Bits mit dem zweiten Capture-Input sichern. Ist das der richtige Weg, oder geht’s auch einfacher/anders? Gruß Chris
... niemand 'ne Idee? Im Microchip-Forum finde ich auch nichts was mir weiter hilft. [http://ww1.microchip.com/downloads/en/devicedoc/70117e.pdf]
Chris D. schrieb: > Das Capture-Event auf 2 Input-Capture-Eingänge gleichzeitig zu legen, > die unteren 16-Bits dann mit dem ersten Capture-Input und die oberen > 16-Bits mit dem zweiten Capture-Input sichern Mmmh mal überlegen. wenn ich 2 Pins habe die prinzipiell immer unterschiedliche Schaltschwellen haben, also nie exakt gleichzeitig schalten; Wie kann ich mir dann ohne externe Synchronisation der Pins (mit demselben Takt der intern für die Synchronisation des CCP-Signals verwendet wird) sicher sein daß die CCP-Units mit derselben Taktflanke die Timerwerte sichern. Bei einem Low-Wert des CCP von -1 .. +1 werde ich mir nie sicher sein ob der High Wert jetzt eins mehr oder eins weniger haben muß. Wenn ich dagegen den Low-Timer bei Überlauf einen Timerinterrupt generieren lasse in dem ich den High-Wert inkrementiere, kann ich dem CCP-Wert immer den richtigen High-Wert zuordnen. (Werte < 0 erhalten den Wert vor dem Interrupt, Werte >= 0 erhalten den High-Wert nach dem Interrupt). Nebeneffekt: ich spare einen Prozessor-Pin, 2 D-Flip-Flops und eine Bohrung in den Chip wo ich den internen Takt abgreife. Gruß Anja
Hallo Anja, die selben Bedenken der taktversetzten Sicherung der Timerwerte bei Verwendung von 2 Input-Capture-Eingängen habe ich auch. Solange das Trigger-Ereignis nicht unmittelbar am Überlaufpunkt des Low-Timers auftritt, ist das ganze auch kein Problem - was aber wenn doch? Die dsPIC-Eingänge haben zwar alle einen Schmitt Trigger, aber das heißt ja noch lange nicht das die Schaltschwellen der Trigger exakt gleich arbeiten. Ein entsprechend flankenflaches Trigger-Signal begünstigt dann die versetzte Sicherung noch. Im Gegenzug müsste aber ein schneller, den Input-Capture-Eingängen vorgeschalteter, Schmitt Trigger das Problem mindern/lösen? Deinen Ansatz mit dem Interrupt-Timer finde ich nicht schlecht - behalte ich im Hinterkopf. Ich warte jetzt aber erst mal ab was, der Microchip-Support dazu zu sagen hat... wenn er denn was sagt?! PS: Jetzt weiß ich auch wovon der Begriff "Aufbohren" abgeleitet wurde. :-O Gruß Chris
Chris D. schrieb: > Ich warte jetzt aber erst mal ab was, der > Microchip-Support dazu zu sagen hat... wenn er denn was sagt?! Ich habe gute Erfahrungen mit dem Microchip-Support. Allerdings war meine Frage auch nicht so technisch komplex. Gruß Anja
Answer (Vom Microchip Support) Your understanding is correct concerning the ICTMR bit description. You would need to configure (2) separate ICx channels identically except one for timer2 the other for timer3. Connect both ICx pins together to the same input signal. Hm… da macht man sich immer n'Kopf für nix und wieder nix. Ich mach trotzdem mal nen Schmitt Trigger vor die beiden Input-Capture-Eingänge und teste das ganze ausgiebig am Überlaufpunkt des Low-Timers. Aber froh bin ich schon, wenn das Ganze so funzt - brauch ich doch keine extra Berechnungen anstellen und den Timer 2 Interrupt bin ich auch los :-) Gruß Chris
Bei anderen µCs (z.B. 8 Bit AVRs) ist es keine größeres Problem ein 16 Bit input Capture per Software auf höhere Auflösung zu erweitern. Zwischen 2 Überläufen eines 16 Bit Timers hat man genügend Zeit die höheren Bits hochzuzählen und Grenzfälle abzufangen. Die Lösung mit 2 ICP Eingängen und externer Synycronisation ist schon recht aufwendig. Ohne externe Syscronisation ist es halt nicht zuverlässig, oder man müßte die Grenzfälle noch einmal in Software testen. Dann könnte man aber auch gleich die Softwarelösung von oben nehmen - der Aufwand ist fast der gleiche.
Hallo Ulrich, die externe synchronisation hält sich ja in Grenzen. Microchip schreibt ja das Capture-Event auf zwei IC-Eingänge gleichzeitig zu legen. Wenn ich da einen extra Schmitt Trigger spendiere und das ganze danach zuversichtlich läuft, hab ich doch keinen Mehraufwand auf Softwareseite. Gruß Chris
Nur ein Schmidttriger wird keine Zuverlässige Syncronisation geben. Das kann zu 99% funktionieren, aber halt nie 100 prozentig. Da braucht man schon ein oder 2 Flipflops, die syncron zum Prozessor Takt die Daten übenehmen. Wenn der Takt direkt von außen kommt, hält sich der Aufwand in Grenzen. Bei einem internen Taktvervielfacher wird es schon schwieriger - entweder ein PLL oder einen schnellen Quarz und dann erst Teilen. Wenn man keine genauen Daten hat, muß man ggf. noch die Phase abgleichen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.