Hallo, ich möchte mit dem Arduino Mega (ATmega 2560) 3 Triggersignale erzeugen (mit bis zu 1µs Auflösung; TTL). Dazu benutze ich 2 16-bit Timer und die Output-Compare-Register (jeweils 3). Der erste Timer setzt mir die Startzeiten und der zweite Timer die Endzeiten. Die Frequenz des Triggersignals stelle ich im CTC-Mode über das Input Capture Register ein. Je nach Frequenzbereich verwende ich entsprechende Prescaler (8 bzw. 64). Das funktioniert soweit auch schon, aber die beiden Timer sind nicht ganz synchron (0,5µs bzw. 4µs je nach Prescaler). Gibt es eine Möglichkeit in Arduino (bzw. mit den Registern des ATmega), diese gleichzeitig zu reseten oder zumindest eine fixe Phasenverschiebung einzustellen, welche beim Setzen der Output Compare Register berücksichtigt werden kann? Danke im Voraus. Robert
Robert schrieb: > Gibt es eine Möglichkeit in Arduino (bzw. mit den Registern des ATmega), > diese gleichzeitig zu reseten oder zumindest eine fixe > Phasenverschiebung einzustellen, welche beim Setzen der Output Compare > Register berücksichtigt werden kann? Ja. GTCCR – General Timer/Counter Control Register • Bit 0 – PSRSYNC: Prescaler Reset for Synchronous Timer/Counters mfg.
Thomas Eckmann schrieb: > GTCCR – General Timer/Counter Control Register > • Bit 0 – PSRSYNC: Prescaler Reset for Synchronous Timer/Counters Wann setzte ich das PSRSYNC-Bit? Zur Zeit setze ich zuerst den CTC-Mode, dann je nach Frequenzbereich den Prescaler, die Output Compare Register, Input Capture Register, die OCnX auf toggle. Wenn ich jetzt am Ende das PSRSYNC-Bit setze, kann es trotzdem vorkommen, das ich eine Verzögerung von einen Bit habe. lg Robert
Robert schrieb: > Wenn ich jetzt am Ende das PSRSYNC-Bit setze, kann es trotzdem > vorkommen, das ich eine Verzögerung von einen Bit habe. PSRSYNC ist auch nur die halbe Miete. Guck' dir im selben Register das TSM-Bit an. Das sollte das Problem lösen. mfg.
Thomas Eckmann schrieb: > PSRSYNC ist auch nur die halbe Miete. Guck' dir im selben Register das > TSM-Bit an. Das sollte das Problem lösen. Ich habe jetzt am Anfang PSRSYNC und TSM gesetzt, dann die TCNT-Register genullt und nachdem ich alle anderen Register gesetzt habe, abschließend das TSM-Bit gelöscht. Jetzt sind die Timer synchron, aber dafür sind die OCnX Outputs der Timer abwechselnd mal phasenverschoben, mal nicht (die OCnX sind ja auf toggeln eingestellt). Das ist wiederum für die weitere Verarbeitung des Triggers nicht gut. Danke schon mal für die Hilfe bis jetzt. lg Robert
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.