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
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 ;-)
bom-bom-bardiere die beiden MCs mit einem gemeinsamen externen Signal : Bom !
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 ?
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.
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?!
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 ....
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..
Wenn du mit Standardgeschwindigkeit faehrst, dann geht es bei dir um ''us'' und nicht um zehntel Sekunden Verspaetung.... Wer misst misst Mist ?
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 :-(
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...
ja aber ich muss ja auch die Zeit, die ich zum übertragen brauche, mit berücksichtigen.
mit dem ersten MC startest du ein externes Monoflop: sein Ausgang steuert die 2 ADC Konversionstarteingaenge.
@ 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.
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?
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?
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..
Wenn Du Dir um die Länge der Signalleitung Sorgen machst - mach beide Signalleitungen gleich lang oder schalte mit Licht .. :-)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.