Tx der UART von zwei controller zusammenhaengen

Gast #1093271
Folgendes.. ich betreibe einen hauptkontroller (atmega8), der an zwei 
andere atmega8 daten per uart sendet. Je nach befehl schicken dann die 
anderen zwei controller daten an den hauptkontroller (es ist jeweils nur 
ein kontroller, der daten an den hauptkontroller sendet). Er aktiviert 
dann kurzzeitig seinen Transmitter, sendet die daten und deaktiviert 
dann wieder den transmitter. wenn der transmitter deaktiviert ist wird 
auch gleichzeitig der port auf eingang geschaltet und der pullup 
deaktiviert. Das ganze funktioniert aber nicht so richtig. wenn nur ein 
kontroller am receive des hauptkontrollers haengt funktioniert alles 
wunderbar. hat jemand einen tipp, wie man das ganze realisieren könnte?

danke eund lg
Gast #1093287
eigentlich müsste es so funktionieren....
Bist du sicher, dass das zeitlich alles hinhaut, d.h. wartest du 
wirklich, bis das letzte Byte incl. Stopbit wirklich raus ist? reies 
Senderegister bedeutet nicht, das das Kram auch raus ist.

Ich würde es hardwaremässig entkoppeln, je eine Diode von Tx zu Rx, 
pullup am Empfänger.
Gast #1093291
Hallo,

wie wärs denn mit einer Dataforward Architektur? Controller 1 sendet 
Daten an Controller 2. Dazu ist Controller 1 Tx mit Controller 2 Rx 
verbunden. Controller 2 sendet alle Daten, die ihn nix angehen an 
Controller 3 weiter. Dazu ist Controller 2 Tx mit Controller 3 Rx 
verbunden. Über diesen Weg kann Controller 2 auch von sich aus Daten an 
Controller 3 senden. Controller 3 kann auch Daten an Controller 1 
senden, dazu muss COntroller 3 Tx an Controller 1 Rx angeschlossen 
werden. Jeder Prozessor schickt die Daten einfach weiter, wenn sie nicht 
für ihn bestimmt waren. So kann jeder mit jedem kommunizieren.

Wie willst du sonst sicherstellen, dass nicht zwei gleichzeitig senden 
und sich damit stören?

Grüße,

Peter
Gast #1093296
ja ich warte immer ab, bis das transmission complete flag anzeigt, dass 
die uebertragung beendet ist.
wenn nur ein kontroller dranhaengt funktionietr ja alles. Dass der 
pullup des eingang immer deaktiviert werden muss ist schon korrekt oder? 
(falls nicht gesendet wird)
Gast #1093312
Hallo,

was nützt es dem einen Controller, wenn er weiß, dass er mit seiner 
eigenen Übertragung fertig ist? Genau diese Information braucht doch der 
andere! Die beiden Controller müssen untereinander ausmachen, wann wer 
senden darf.

Pullups müssen aus sein.

Peter
Gast #1093315
es ist folgendermasse..

Der hauptcontroller weiss genau , wenn daten erwartet werden und waretet 
dann bis zb. 8 byte angekommen sind (es werden einfach die interrupts 
der UART gezaehlt )
Gast #1093553
Das bedeutet, es reagiert immer nur einer der slaves auf den 
Hauptcontroller und der wartet mit dem Ansprechen des nicht sendenden 
Controllers bis der sendende fertig ist?

Das sollte schon gehen, du musst halt nur sicherstellen, dass wirklich 
niemals gleichzeitig gesendet wird. Wenn Unsinn ankommt, ist das aber 
wahrscheinlich der Fall.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.