PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere µCs an UART?



jörn
03.02.2005, 21:56
Moin,

kann an eigentlich mehrere µCs über die UART-Schnittstelle miteinander verbinden, so gewissermaßen als Bus?

Gruß,

Jörn

stegr
03.02.2005, 22:04
Klar kannst du das, aber du solltest dir dann ein sinnvolles Antikollisionsverfahren überlegen...

Normalerweise nimmt man für diese Sachen I²C, da dies genau dafür entwickelt wurde...

MfG
Stefan

thewulf00
04.02.2005, 06:48
Du könntest eine Art Reihenschaltung realisieren:
Der TxD vom RS232 geht an den RxD des ersten µC, der TxD des ersten Mikrocontrollers geht an den RxD des zweiten Mikrocontrollers usw.
Und der TxD des letzten Mikrocontrollers geht an den RxD vom RS232.
Damit hättest Du eine Art Ring und müsstest Dir keine Sorgen um Kollisionen machen.
Aber es ist ein Mehraufwand auf Sofwareseite.
Immer, wenn der erste Mikrokontroller ein Byte empfängt, muss er es, sofern es nicht für ihn ist, weiterleiten. Also musst Du noch Adressen einführen.
Vorschlag: Nimm drei nacheinander gesendete Byte: ZielAdresse_Daten_QuellAdresse (oder andere Reihenfolge). Dann weiß der PC immer, mit wem er redet.

Dann funktioniert das so: Der PC sendet drei Byte. Der erste Mikrokontroller empfängt alle drei und speichert sie zwischen (Bspw. in drei Register, oder direkt in den RAM), dann schaut er auf die ZielAdresse. Wenn diese nicht seine ist, also das "Paket" nicht für ihn ist, dann schickt er alle drei Bytes weiter.
Die Adresse eines jeden Mikros kannst du ja dann separat im EEPROM einstellen, falls zwei oder mehr dasselbe Programm erhalten sollen.

Dann kannst Du noch so Spielchen machen, wie einen Broadcast. Wenn die Zieladresse 0xFF ist, dann soll das Paket für jeden bestimmt sein.
Oder wenn ein Controller ein "Paket" erhält, der Absender er selbst ist, dann braucht er es nicht weiterschicken, da es dann (wie auch immer) im Kreis läuft.

Mann könnte auch eine dynamische Adressvergabe einbauen, wäre gar nicht so schwer.

Nach dem Start schickt der PC ein Paket an alle (0xFF) mit Daten 0xFF (oder irgendwas) und Absender PC (0x00). Dann weißt der Mikrocontroller, der das Paket als erstes erhält, dass er es NICHT weiterleiten soll, sondern er Controller Nummer EINS ist (Absender plus eins). Dann schickt Mikrocontroller EINS dasselbe Paket mit Absender EINS. Dann weiß Mikrocontroller ZWEI, dass er Nummer ZWEI ist.
uswusf. Zu guter Letzt bekommt dann der PC ein Paket, wo die Absenderadresse die Zahl der Controller darstellt, die im Bus hängen.

Viele Grüße,
wulfi

PicNick
04.02.2005, 06:57
Variante wäre noch "token ring" , hat aber auch seine Feinheiten.
mfg robert

thewulf00
04.02.2005, 08:30
Das, was ich oben beschrieben habe, ist ja ein Ringbussystem, nur dass eben kein Token vergeben wird.
Aber man müsste sich einig sein, ob die µC von sich aus senden dürfen, dann bräuchte man evtl. einen (aber ich denke, es geht auch ohne, da der Aufwand größer wäre als der Nutzen).

Das wird auch ohne ganz gut funktionieren.

Viele Grüße,
wulfi

04.02.2005, 09:33
Für's Erste geht's ja so. Aber früher oder später willst du mehr als ein Byte senden (shorts, floats), und bevor du schaust, definierst Du Dir Frames mit allem, was dazugehört.
Is ja nix Böses, macht auch Spaß, aber, wie gesagt, Du tritts eine Lawine los. mfg robert