Hallo, ich möchte folgendes mit Hilfe zweier ATmega32M1 realisieren: Controller 1 erzeugt immer wieder drei Impulse die den gleichen zeitlichen Abstand haben. Diese Impulse "sieht" Controller 2 am "Input Capture Pin". Controller 2 soll nun Anhand der gemessenen Abstände der Impulse die Zeitbasis des Controllers 1 erkennen und seinerseits Impulse in einem definierten Abstand zum vorherigen Impuls erzeugen. Andert sich die Taktfrequenz eines Controllers soll es trotzdem für Controller 1 so aussehen, als würden die Impulse con Controller 2 immer zum gleichen Zeitpunkt kommen. _|__|__|________|__|__|______ ... C1 __|__|__|________|__|__|______ ... C2 Habt Ihr eine Idee wie ich es am Besten schaffe? Kann ich den Timer so konfgurieren, daß er "automatisch" den Impuls erzeugt? Vielen Dank! Simon
Simon schrieb: > drei Impulse die den gleichen > zeitlichen Abstand haben. Impuls mit welcher Länge und welchem Abstand? Warum zwei AtMega32?
> Controller 1 erzeugt Impulse > Andert sich die Taktfrequenz ... soll es trotzdem für > Controller 1 so aussehen Verstehe ich nicht. Wer ist hier der Sender und wer ist der Empfänger? Was ist mit den Pulsbreiten, sind die völlig egal? > Impulse von Controller 2 immer zum gleichen Zeitpunkt kommen. Was genau meinst du mit "gleichem Zeitpunkt"? > Kann ich den Timer so konfgurieren, daß > er "automatisch" den Impuls erzeugt? Wer ist "der Impuls?" Timer erzugen regelmäßige Impulse, unabhängig davon, was ein anderer Timer oder µC macht.
Simon schrieb: > Andert sich die Taktfrequenz eines Controllers soll es trotzdem für > Controller 1 so aussehen, als würden die Impulse con Controller 2 immer > zum gleichen Zeitpunkt kommen. versteh ich nicht. Controller 1 erzeugt doch die Impulse - wie soll er da etwas "sehen"?
Route 6. schrieb: > Impuls mit welcher Länge und welchem Abstand? Die Impulse selbst sind ca. 5µs lang, der Abstand ist ca. 60µs. > Warum zwei AtMega32? Die Megas werden in größerem Abstand gebraucht und machen noch eine ganze Menge mehr.
> 5µs Dann sind Mikrocontroller in der AVR Klasse die falsche Wahl, da zu langsam. Lies dich mal ein, wie lange das Aufrufen einer ISR dauert.
Stefan U. schrieb: > > Verstehe ich nicht. Wer ist hier der Sender und wer ist der Empfänger? > Was ist mit den Pulsbreiten, sind die völlig egal? Beide senden und beide Empfangen C1 elektrisch, C2 optisch. > Was genau meinst du mit "gleichem Zeitpunkt"? Gemeint ist der Abstand zum vorherigen Impuls _______|______|_____|_________________ C1 ___________|______|_____|_____________ C2 |-t-| |-t-| |-t-| > Wer ist "der Impuls?" Timer erzugen regelmäßige Impulse, unabhängig > davon, was ein anderer Timer oder µC macht. der Impuls von C2 Peter II schrieb: > versteh ich nicht. Controller 1 erzeugt doch die Impulse - wie soll er > da etwas "sehen"? Beide senden und beide Empfangen C1 sendet elektrisch, C2 sendet optisch.
Stefan U. schrieb: > Lies dich mal ein, wie lange das Aufrufen einer ISR dauert. 3-4 Takte + 2 Takte Sprung als 6Takte. Bei 16Mhz sind das 0,4ns wo siehst du da sein Problem?
Stefan U. schrieb: > Dann sind Mikrocontroller in der AVR Klasse die falsche Wahl, da zu > langsam. > > Lies dich mal ein, wie lange das Aufrufen einer ISR dauert. Impulse kann ich problemlos erzeugen, wenn ich polle kann ich auch einigermaßen exakt die Impulse von C2 erzeugen. Ich habe aber gehofft, daß es mit Hilde des Timers genauer geht.
Simon schrieb: > Beide senden und beide Empfangen C1 sendet elektrisch, C2 sendet > optisch. Gleichzeitig??? Wie geht das?
Route 6. schrieb: > Gleichzeitig??? > Wie geht das? _______ _______ | | --> | | | | _|__|__|____|__|__|____ | | | C1 | | C2 | |_______| __|__|__|____|__|__|___ |________| <--
> Bei 16Mhz sind das 0,4µs wo siehst du da sein Problem?
Die Impulse sind 5µS breit. Da alleine das Aufrufen der ISR schon 3-4
Takte dauert, werden die Zeiten vom Impuls-beginn und Ende schon
alleine dadurch deutlich verzerrt. Vor allem wird es schwierig, da die
Zeit nicht immer genau gleich ist.
Aber, wie genau es sein soll, hat er ja noch gar nicht gesagt. Ich war
voreilig.
Stefan U. schrieb: > Aber, wie genau es sein soll, hat er ja noch gar nicht gesagt. Ich war > voreilig. Ich habe mir den Ablauf wie folgt vorgestellt: - C1 erzeugt den ersten Impuls. (Länge ca. 5µs) SP: - C2 speichert, dank Input Capture, den Timerwert und setzt den Timer auf 0 - C2: Der Timer TOP Wert und der Wert des Timer Compare Registers wird mit angenommenen Werten berechnet (Verzögerung ca. 12µs) - C2: Beim Erreichen des Timer Compare Wertes wird der der Ausgang auf High gesetzt - C2: Beim Erreichen des TOP Wertes wird der Ausgang auf LOW gesetzt - C1 erzeugt den zweiten Impuls (Länge ca. 5µs, etwa 60µs nach erstem Impuls) - goto SP ich hoffe es ist jetzt verständlicher. Vielen Dank für die rege Beteiligung.
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.