Forum: Mikrocontroller und Digitale Elektronik Zeit abwarten um gleichzeitig zu starten


von Cimbom G. (cimbomgs)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

habe folgendes vor:

Ich will 2 ADC-Ports gleichzeitig starten. 1. Mikrocontroller sendet den 
2. Mikrocontroller ein Befehl zum starten, aber demit der 1. 
Mikrocontroller mit dem 2. Mikrocontroller gleichzeitig starten kann 
muss er bestimmte Zeit abwarten.(siehe Anhang)

Wie kann ich die Zeit bestimmen, was der 1. Mikrocontroller abzuwarten 
hat?

Meine Idee ist ein Timer mit dem Senden zu starten und sobald ich ein 
ACK erhalten habe, wird der Timer gestoppt. Die Zeit wird dann mit 2 
geteilt (Hin+Zurück).

Aber das kann nicht gehen, weil in der Zeit wo 1. Mikrocontroller auf 
ACK wartet, hat ja der 2. Mikrocontroller mit messen begonnen :-(..

Hat jemand eine Idee, wie ich es realisieren könnte?

Mfg
Cimbom

von Matthias L. (Gast)


Lesenswert?

Du schickst den Befehl einfach an den µC2 und zugleich an dich selbst 
;-)

also vielleicht so:

µC1_TxD------------o---------------------RxD_µC2
                   |
    RxD-------------


Jeder µC fängt sozusagen mit Messen an, wenn der Befehl empfangen wird 
;-)

von lontano (Gast)


Lesenswert?

bom-bom-bardiere die beiden MCs mit einem gemeinsamen externen Signal : 
Bom !

von gast (Gast)


Lesenswert?

Meine Frage ist : Wozu dieser Aufwand überhaupt ? Was für ein analog 
Signal soll gemessen werden ? Wieso reicht ein kontinuierliches Wandeln 
zweier Kanäle auf einem µC nicht aus ?

Es gibt natürlich auch µC mit Flash-Adc´s zur gleichzeitigen Erfassung 
mehrerer Känale (z.B. für feldorientierte Motorregelungen). Wie wärs 
damit ?

von Ralph (Gast)


Lesenswert?

Haben die ADC auf beiden µC einen externen Triggereingang ?
Wenn ja dann nutzt diesen, wenn nein, verabschiede dich von der Idee, in 
Software geht das nicht.

von Cimbom G. (cimbomgs)


Lesenswert?

Matthias L. wrote:
> Du schickst den Befehl einfach an den µC2 und zugleich an dich selbst
> ;-)
>
> also vielleicht so:
>
> µC1_TxD------------o---------------------RxD_µC2
>                    |
>     RxD-------------
>
>
> Jeder µC fängt sozusagen mit Messen an, wenn der Befehl empfangen wird
> ;-)

wie soll es gehen, dass ich den Befehn an mich selber schicke? Kannst du 
es mal etwas genauer beschreiben :-)


>bom-bom-bardiere die beiden MCs mit einem gemeinsamen externen Signal :
>Bom !

naja nicht so gut, weil µC1 zusagen hat wann es zu beginnen hat.


>Meine Frage ist : Wozu dieser Aufwand überhaupt ?
ich brauche es zur Abstandsmessung. Beide µC müssen zur gleicherzeit 2 
Messungen starten.

Es muss doch per Software möglich sein wieviele Impulse ich brauche um 
ein Signal zu übertragen oder nicht?!

von Michael K. (mmike)


Lesenswert?

Leg Doch von einem Ausgang von µC1 eine Leitung zu INT0 bei µC1 und µC2. 
Wenn µC1 dann den Ausgang ändert oder hochzieht, oder wie auch immer, 
werden bei beiden "gleichzeitig" die externen Ints ausgelöst ....

von Cimbom G. (cimbomgs)


Lesenswert?

wäre es eine gute Lösung zu sagen, ich sende ein Datum und warte auf die 
Antwort. Wenn ich die Antwort habe stoppe ich die Zeit. µC2 darf noch 
nichts machen.
Ich will mit diesem Schritt nur wissen wie lange es von µC1 zu µC2 
dauert.
Weil ich jetzt weiß wie lange es dauert, sende ich ein Befehl an µC2 und 
lass µC2 für die Hälfte der Zeit was ich gemessen habe abwarten.(weil 
die Zeit die ich gemessen habe für Hin+Zurück war und wenn mein Befehl 
bei µC2 ankommt ist Hälfte der Zeit rum)

Sobald µC1 ACK erhalten hat beginnt es zu messen. Wenn ACK angekommen 
ist müsste auch die Zeit für µC2 abgelaufen sein. Somit müssten beide 
gleichzeitig mit der Messung starten..

von lontano (Gast)


Lesenswert?

Wenn du mit Standardgeschwindigkeit faehrst, dann geht es bei dir um 
''us'' und nicht um zehntel Sekunden Verspaetung....
Wer misst misst Mist ?

von Cimbom G. (cimbomgs)


Lesenswert?

lontano wrote:
> Wenn du mit Standardgeschwindigkeit faehrst, dann geht es bei dir um
> ''us'' und nicht um zehntel Sekunden Verspaetung....
> Wer misst misst Mist ?

es geht hier auch um µs, sonst wäre es ja kein Problem gewesen :-(

von StinkyWinky (Gast)


Lesenswert?

Falls es zwei identische µCs sind und synchron laufen, kannst Du die 
gewünschte Messzeit in die Zukunft legen. Dann brauchen beide µCs nur zu 
warten, bis die Zeit gekommen ist...

von Cimbom G. (cimbomgs)


Lesenswert?

ja aber ich muss ja auch die Zeit, die ich zum übertragen brauche, mit 
berücksichtigen.

von lontano (Gast)


Lesenswert?

mit dem ersten MC startest du ein externes Monoflop: sein Ausgang 
steuert die 2 ADC Konversionstarteingaenge.

von Cimbom G. (cimbomgs)


Lesenswert?

@ lontano

was ist ein externes Monoflop?

von lontano (Gast)


Lesenswert?

eine monostabile Kippstufe  ZB Cmos Baustein CD4528

von StinkyWinky (Gast)


Lesenswert?

@ Cimbom Gs
> ja aber ich muss ja auch die Zeit, die ich zum übertragen brauche,
> mit berücksichtigen.

Nein eben nicht. Wenn beide µCs die gleiche absolute Zeit haben, kannst 
du z.B. um 13:24 beiden in Ruhe mitteilen, sie sollen um 13:35 eine 
Messung machen.

von Kai G. (runtimeterror)


Lesenswert?

Controller 1 löst bei beiden Controllern einen externen Interrupt aus, 
der wiederum bei beiden "zeitgleich" die Messung startet.

Bei einem AVR hast du damit maximal 2 Takte Versatz. Wenn die synchron 
laufen sind 0 Takte Versatz machbar.

Wir bewegen uns da in Größenordnungen von unter 0,1 µs

Hab ich was übersehen?

von Cimbom G. (cimbomgs)


Lesenswert?

Kai Giebeler wrote:
> Wir bewegen uns da in Größenordnungen von unter 0,1 µs

ich denke, dass das die beste Lösung wäre. Würden wir uns auch in der 
Größenordnung von 0,1µs bewegen, wenn es um 2-3 m Abstand geht?

von Cimbom G. (cimbomgs)


Lesenswert?

StinkyWinky wrote:
> Wenn beide µCs die gleiche absolute Zeit haben, kannst
> du z.B. um 13:24 beiden in Ruhe mitteilen, sie sollen um 13:35 eine
> Messung machen.

naja net so einfach alle 10ms eine Messung zu starten und dann zu sagen 
um wie viel Uhr beide µC zu starten haben..

von Gast (Gast)


Lesenswert?

Wenn Du Dir um die Länge der Signalleitung Sorgen machst - mach beide 
Signalleitungen gleich lang oder schalte mit Licht .. :-)

von Kai G. (runtimeterror)


Lesenswert?

So langsam werde ich doch neugierig, welches analoge Signal zeitlich so 
präzise ausgelesen werden soll...

Ungefähre Laufzeit bei 3m Leitung
3 m / 300000000 m/s = 10 ns

Wird vermutlich noch ein Aufschlag für die Dämpfung drauf kommen, aber 
ich denke, dass sollte passen. Ansonsten wie bereits vorgeschlagen 
einfach die Leitungen gleich lang machen.

Sollte die Verzögerung doch größer sein: einfach den ersten Controller 
einen Takt warten lassen.

von gast (Gast)


Lesenswert?

wie vorher schon erwähnt: machs per Pin-Change-Interrupt.
Am µC1 hast du einen Ausgang und einen Eingang. Am µC2 nur den Eingang.
Wenn jetzt µC1 am Ausgang eine bestimmte Spannung anlegt, wird bei 
beiden der Code für die Wandlung "gleichzeitig" ausgeführt, da ja auf 
den Eingängen die Signale zur "gleichen Zeit" ankommen.
Du löst also mit der Spannung an den Eingängen die Wandlung aus. Mehr 
nicht.

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.