Moin, ich bin zur Zeit auf der Suche nach einem Protokoll mit dem ich einen Master und mehrrere Slaves per RS485 verbinden kann. Der Master soll von jedme Slave Daten lesen und an diese schreiben können. Das Problem ist, das nicht immer die gleichen Slaves an den Bus angeschlossen sind sondern das hier auch mal einer dazukommen oder wegfallen kann. Solange sie aber angeschlossen sind (auch wenn der Strom einmal abgestellt wird) müßen sie aber immer wieder die geleiche ID bekommen. Nur wenn es eine Kollision bei den ID gibt sollen die nötigen IDs neu vergeben werden. Wer hat einen Tip für mich, wo ich so ein Protokoll finden kann (selber entwickeln geht zwar auch, ist aber aufwändiger und dauert länger und wenn es schon etwas gibt würde ich ganz gerne nutzen). Gruß Mike
Man könnte die ID per DIP Schalter einstellen... Das wäre mal so das einfachste... Oder wenn dein µC eine Seriennummer hat, nimm doch die...
Beim Brennen der Slaves individuelle 64-Bit-Seriennummer vergeben. Macht Dallas bei den 1-wire-ICs so.
(u.U. blöde frage) nachdem die slaves (sag ja schon der name) sich wohl nicht selbstständig bemerkbar machen können / dürfen woher willst wissen dass ein neuer angeschlossen wurde..
Könnte man so machen wie bei Profibus. Der Master fragt zyklisch alle Adressen nach einer Status Meldung ab. Meldet sich ein Slave auf diese Anfrage, so ist er existend.
ich überschlage das mal für 64bit und 1us pro Slave: 2^64 = 18446744073709551616 mögliche Slaves 18446744073710 Sekunden 30744573462 Minuten 5124095576 Stunden 213503982 Tage 584942 Jahre Also nicht wirklich Praktikabel ;-) Dann lieber in richtung sukzessive approximation. also immer die id teilen bis nur noch einer antwortet ;-) oder sich auf 16bit begrenzen dann dauerts nur: 66ms Mfg Ulrich
Welchen quatsch überlegt ihr da ? Ein uC ohne ID muß die ID null haben, wird auch periodisch abgefragt, und dann seine Seriennummer ausgeben. Sollte er nicht das auf dem Bus lesen, was er sendet, dann timeout. Es bleibt eine Node übrig, und die bekommt dann von einem Master eine neue Addresse zugesand.
>Also nicht wirklich Praktikabel ;-)
Für Geräte mit Seriennummer als Adresse nicht, aber Profibus Slaves
haben Adressen (max 128) die per Dip-Schalter eingestellt werden. Da
geht's dann etwas schneller ;)
sollte es für solche Fälle nicht eine Broadcastfunktion geben mit Der der Master zum identifizieren aller Slaves aufruft?
wenn dann (mehrere) slaves zugleich senden, .. kann man da nicht gleich multimaster machen, scheint gleich "aufwändig" zu sein ?!!?
Es gibt so viele Möglichkeiten :) Sowas wie das DHCP System kommt dem von Mike geforderten ja auch recht nahe.
Mir fällt da die TEI-Vergabeprozedur aus dem ISDN ein, schau mal in die Q.921 (gibt bei ETSI). Volker
>> 584942 Jahre >> Also nicht wirklich Praktikabel ;-) Ja, und die Ingenieure bei Maxim / Dallas sind auch so blöd, dass sie das nicht gemerkt haben. Vielleicht würde ein Blick in eine App-Note ja für Erhellung sorgen. DIP-Adresse! Wer macht denn sowas heutzutage noch? Wenn dann mach einen Taster drauf, mit dem der Slave angelernt wird, sprich er bekommt eine Adresse, die dann im Eeprom abgelegt wird und immer wieder zur Verfügung steht. Der Master hat im Eeprom eine Tabelle, in der alle bisher verwendeten Adressen stehen und die gerade angeschlossenen markiert sind. Wenn ein Slave sich paarmal nicht meldet, wird er als inakiv markiert, aber die ID bleibt in der Liste. Oder der Master sendet immer mal ein Query ohne ID, auf das sich ein neuer Slave meldet. Entweder der Slave hat schon eine ID, dann sendet er diese und der Master aktiviert sie. Der Slave merkt sich, dass er erkannt wurde, um nicht auf weitere Queries zu reagieren. Oder der Slave hat noch keine ID, dann fragt er eine an. Der Master vergibt eine neue ID, trägt sie in die Liste ein und aktiviert sie. Der Slave speichert sie im Eeprom, Rest wie oben.
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.