Forum: Mikrocontroller und Digitale Elektronik Adressvergabeverfahren im Bussystem


von Joshua (jjauer)


Lesenswert?

Hallo zusammen,

ich bin gerade dabei ein eigenes Master-Slave-Verfahren zu 
Konzeptionierung:

Zunächst einmal ein paar Infos:
IC Master: TI AM2431
IC Slave: TI MCU280039C
Bustopologie: Alle Slaves parallel am Bus, lineare Verbindung zwischen 
den Slaves über GPIOs
Pegel: RS485

Jetzt stehe ich vor der Frage, wie ich es schaffe, den Busteilnehmern 
eine eindeutige Adresse zuzuweisen.
Wichtig ist zu erwähnen dass ich keine interne Schnittstelle mehr zur 
Verfügung habe (kein SPI, I2C, UART) und mir nur max. 2 GPIOs pro Slave 
zur Verfügung stehen.

Ich hatte schon die Idee, mithilfe von verschieden einstellbaren 
Frequenzen im GPIO Signal und einer Frequenzmessung und Wertetabelle im 
Speicher dann die passende Adresse zuzuordnen und für den nächsten 
Teilnehmer dann die Frequenz anzupassen usw.

Fällt jemand eine bessere Idee dazu ein? Oder gibt es eine andere 
Möglichkeit, eine Kommunikation über ein Kabel herzustellen? Schonmal 
vielen Dank.
LG Joshua

von (prx) A. K. (prx)


Lesenswert?

Daisy Chain der beiden I/Os beim Powerup, als Enable-In und -Out?

von Peter D. (peda)


Lesenswert?

Joshua schrieb:
> IC Slave: TI MCU280039C

Das Ding heißt aber TMS320F280039C.

Beide haben doch CAN, da würde ich nen Teufel tun und was anderes nehmen 
als CAN.
Man kann seine Lebenszeit auch sinnvoller verschwenden, als sich 
umständlich Protokolle selber zusammen zu schmieden. Es wird eh nicht 
zuverlässig laufen und Du wirst irgendwann aufgeben.

Diese großen Boliden haben oft eine einmalige Seriennummer, darüber kann 
man prima die Adressierung aushandeln.

Bei kleinen  MCs (ATtiny) habe ich schon 2 Widerstände an einem ADC-Pin 
zur Adressierung verwendet. 32 Slaves sind mit 1% Widerständen möglich.

: Bearbeitet durch User
von TestX (Gast)


Lesenswert?

CAN oder LIN sind hierbei deine Freunde…Spar dir die Lebenszeit und nimm 
direkt etwas erprobtes und vor allem zuverlässiges!

Aus deiner Beschreibung wird man auch nicht wirklich schlau. Hast du ein 
blockschaltbild, Entfernungen der Geräte untereinander sowie benötigte 
Baudrate ?

Ansonsten ist der Tipp von prx Gold wert. Alternativ kann man auch für 
erste Initialisierung mit einem langen random Delay arbeiten solange 
sich die Controller über ihre Firmware eindeutig in Funktion 
identifizieren lassen (wobei man dann hier auch einfach die Adressen 
direkt vergeben kann)

Letztendlich ein paar mehr Details bitte

von (prx) A. K. (prx)


Lesenswert?

Man kann diese Daisy Chain auch mit Reset als Input betreiben und 
benötigt nur einen Output Pin. Der Master kann dann jederzeit den Bus 
resetten und die Initialisierung wiederholen.

Wenn der Output vom Letzten wieder beim Master landet, erkennt er 
darüber ein Hotplug Event.

: Bearbeitet durch User
von Joshua (jjauer)


Lesenswert?

TestX schrieb:
> Aus deiner Beschreibung wird man auch nicht wirklich schlau. Hast du ein
> blockschaltbild, Entfernungen der Geräte untereinander sowie benötigte
> Baudrate ?

Die Entfernungen zwischen den Geräten beträgt maximal 15-20cm, eher 
weniger. Ich habe vor, eine relativ hohe Baudrate von 2MBit/s zu fahren.

(prx) A. K. schrieb:
> Man kann diese Daisy Chain auch mit Reset als Input betreiben und
> benötigt nur einen Output Pin. Der Master kann dann jederzeit den Bus
> resetten und die Initialisierung wiederholen.

Wenn ich dich hier richtig verstanden habe, ist die Idee, dass man die 
Slaves nacheinander enabled und dann mit der zugewiesenen 
Adressinformation als Datenstrom über den RS485-Bus versorgt?
Falls ja, ist das dann möglich, dass ich diese Nachricht ohne 
Adressierung an den Slave schicken kann (er hat im ersten Moment ja noch 
keine Adresse)? Und wie läuft das dann beim Nächsten Slave ab? Der 
vorhergehende Slave ist dann ja ebenfalls enabled, allerdings mit 
Adresse?

von (prx) A. K. (prx)


Lesenswert?

Joshua schrieb:
> Wenn ich dich hier richtig verstanden habe, ist die Idee, dass man die
> Slaves nacheinander enabled und dann mit der zugewiesenen
> Adressinformation als Datenstrom über den RS485-Bus versorgt?

Ich bezog mich zunächst nur auf die Frage zur Adressvergabe eines 
bestehenden Busses irgendeiner Art, mit den beiden Pins als zusätzlichem 
Element. Mehr stand ja nicht drin, die Info "Pegel=RS485" bringt keine 
nützliche Information. Oder diesen diese beiden Pins gleichzeitig auch 
zur Datenkommunikation?

von (prx) A. K. (prx)


Lesenswert?

Joshua schrieb:
> Falls ja, ist das dann möglich, dass ich diese Nachricht ohne
> Adressierung an den Slave schicken kann (er hat im ersten Moment ja noch
> keine Adresse)? Und wie läuft das dann beim Nächsten Slave ab? Der
> vorhergehende Slave ist dann ja ebenfalls enabled, allerdings mit
> Adresse?

Anfangs ist nach diesem Schema jeder Slave disabled, oder auch direkt im 
Reset, wenn man Reset als Enable-In nutzt, ggf mit Pulldown/up.

Der Master gibt nun den ersten Slave frei, und der reagiert auf eine 
Standard-Adresse. Über das Datenprotokoll vergibt ihm der Master die 
neue Adresse. Anschliessen wird ihm über diese neue Adresse mitgeteilt, 
dass er die Standadresse ignorieren und sein Enable-Out freigeben soll. 
Damit ist er durch, der nächste in der Kette ist enabled und die 
Prozedur wiederholt sich bei ihm.

Das Enable-Out des letzten Slaves landet beim Master, und der weiss nun, 
dass alle durch sind. Alternativ kriegt er das auch per Timeout beim 
Zugriff auf die Standardadresse mit.

In der Reset-Variante gehen bei einer Unterbrechung die Slaves unterhalb 
davon automatisch in Reset und der Eingang vom Master kriegt das mit. 
Der kann dann wiederholt die gesamte Kette zurücksetzen und neu 
Initialisieren, bis sie wieder vollständig funktioniert.

: Bearbeitet durch User
von Joshua (jjauer)


Lesenswert?

Ah, ja das macht Sinn, mit diesem Grundgedanken kann ich weiterarbeiten.
Vielen Dank :)

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.