Forum: Mikrocontroller und Digitale Elektronik Tx der UART von zwei controller zusammenhaengen


von duron005 (Gast)


Lesenswert?

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

von crazy horse (Gast)


Lesenswert?

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.

von Peter Diener (Gast)


Lesenswert?

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

von duron005 (Gast)


Lesenswert?

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)

von Peter Diener (Gast)


Lesenswert?

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

von duron005 (Gast)


Lesenswert?

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 )

von Peter Diener (Gast)


Lesenswert?

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.

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.