Forum: Mikrocontroller und Digitale Elektronik Verzögerter Impuls


von Simon (Gast)


Lesenswert?

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

von Route_66 H. (route_66)


Lesenswert?

Simon schrieb:
> drei Impulse die den gleichen
> zeitlichen Abstand haben.

Impuls mit welcher Länge und welchem Abstand?
Warum zwei AtMega32?

von Stefan F. (Gast)


Lesenswert?

> 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.

von Peter II (Gast)


Lesenswert?

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"?

von Simon (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

>  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.

von Simon (Gast)


Lesenswert?

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.

von Peter II (Gast)


Lesenswert?

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?

von Simon (Gast)


Lesenswert?

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.

von Route_66 H. (route_66)


Lesenswert?

Simon schrieb:
> Beide senden und beide Empfangen C1 sendet elektrisch, C2 sendet
> optisch.

Gleichzeitig???
Wie geht das?

von Route_66 H. (route_66)


Lesenswert?

Peter II schrieb:
> 6Takte. Bei 16Mhz sind das 0,4ns

Zauberer!

von Simon (Gast)


Lesenswert?

Route 6. schrieb:
> Gleichzeitig???
> Wie geht das?
_______                               _______
|       |     -->                     |        |
|       |  _|__|__|____|__|__|____    |        |
| C1    |                             | C2     |
|_______|  __|__|__|____|__|__|___    |________|
               <--

von Peter II (Gast)


Lesenswert?

Route 6. schrieb:
>> 6Takte. Bei 16Mhz sind das 0,4ns
>
> Zauberer!

ok, machen wir µs draus

von Stefan F. (Gast)


Lesenswert?

> 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.

von Simon (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.