Forum: Mikrocontroller und Digitale Elektronik RS485 Adressauswahl auf der Platine


von Fabian W. (fabian-w)


Lesenswert?

Hallo zusammen,

ich bin gerade dabei Sensorplatinen für einen RS485 Bus zu designen.
Bei RS485 ist es ja möglich bis zu 32 Teilnehmer anzuschließen und jeder 
Teilnehmer erhält hierfür eine Adresse.

Die Adressen der einzelnen Teilnehmer würde ich gerne direkt auf der 
Platine einstellen können. Ursprünglich habe ich dabei an Lötjumper (5 
Stück für die 32 Möglichkeiten) gedacht.
Allerdings reichen hierfür meine Pins am Mikrocontroller (vermutlich 
Attiny 441/841) nicht aus.

Ich habe schon daran gedacht den ADC zu verwenden und die Adresse über 
einen Spannungsteiler und 5 Widerstände (auch wieder über Lötjumper zu- 
oder abwählbar) einzustellen. Bei einer Parallelschaltung der Widestände 
(E6 Reihe) liegen die Werte zum Teil sehr eng beieinander und ich 
befürchte, das das nicht eindeutig funktioniert.
Oder gibt es hier einen "Trick"?

Oder gibt es noch eine andere elegante Lösung um die Adresse einstellen 
zu können und keine 5 Pins benutzen zu müssen?

Alternativ würde ich die Adresse fest in den EEPROM schreiben (das ist 
dann aber nicht mehr auf der Platin zu sehen) oder muss mir doch noch 
einen größeren Controller suchen.

Vielen Dank und viele Grüße
Fabian

von Veit D. (devil-elec)


Lesenswert?

Hallo,

Du könntest einen I2C Portexpander verwenden, macht nur Platzmäßig 
keinen Sinn, könnte man gleich einen größeren µC verwenden.
Du kannst wie schon gesagt die Adresse ins EEprom schreiben.
Du kannst die Adresse im Programm hinterlegen. Muss nur vorm flashen 
immer die Adresse für jede Platine ändern.
Analog sollte mit 32 noch gehen. Ggf. nochmal filtern. Allerdings sollte 
der Spannungsteiler schon recht genau aufgebaut sein. Darfst nur nicht 
in Spannung umrechnen, nur die ADC Bits behandeln / vergleichen.
Am Einfachsten wäre allerdings, wenn du den ATtiny841 schon lieb 
gewonnen hast einen ATtiny1634 zu verwenden. Ggf. mit DIP-Schalter statt 
Lötjumper solange es der Platz hergibt.

Für RS485 und nur 32 Teilnehmer kannste den MAX487 verwenden. Der hat 
Slewrate bis 250kBaud und ist damit gutmüdiger. Gibts auch von anderen 
Herstellern. Datenblätter und Preise vergleichen.

: Bearbeitet durch User
von mm (Gast)


Lesenswert?

Fabian W. schrieb:
> Bei einer Parallelschaltung der Widestände
> (E6 Reihe) liegen die Werte zum Teil sehr eng beieinander und ich
> befürchte, das das nicht eindeutig funktioniert.

Warum sollten die eng beieinander liegen. Kannst Doch die Spannungen 
gleichmäßig über den Spannungsbereich verteilen. Spannungsteiler aus 
einem Einzelwiderstand und zwei parallelen oder zweimal zwei parallele, 
für die Werte muss man sich halt ein bisschen im Excel spielen. Die 
Auswertung sollte der 8-bit ADC doch wunderbar hinbekommen.

Zur besseren Sichtbarkeit kann man (bei maschineller Bestückung) auch 
einfach irgendwo am Rand eine Reihe Dummy-Widerstände vorsehen, wo je 
nach Variante/Adresse einer/mehrere bestückt ist/sind.

von Ulrich K. (elektromechanikus)


Lesenswert?

Hallo Fabian,

mit einem Jumper und einer LED die Adresse ins EEPROM bringen:

Jumper offen: Software zählt die Adressen durch und lässt die LED 
jeweils kurz aufleuchten. Der Beginn wird durch langes Aufleuchten 
angezeigt.

Jumper schließen: Der aktuelle Zählerstand wird als Adresse ins EEPROM 
geschrieben.

Oder Vergabe der Adresse per Software:
Alle deine Geräte akzeptieren eine "Broadcast" Adresse (z.B.: 0). Mit 
einer Punkt zu Punkt Verbindung kann darüber die Adresse eingestellt 
oder abgefragt werden.

Gruß
Ulrich

PS.: Offensichtlicher Nachteil, die aktuelle Adresse wird nicht auf dem 
Board angezeigt

von Max M. (Gast)


Lesenswert?

Pin1 floating, Low, high
Das gleiche für Pin2 und du hast schon 6 mögliche Adr.
Pin1+2 short + floating, short + high, short + low.
9 Adr über zwei pins.

Wenn Du dann noch verschiedenen Gerätetypen definierst, die in 
unterschiedlichen Adressbereichen liegen, kommst Du ganz schön weit.

Aber Adr über ADC ist auch leicht.
Du must für einen 10bit ADC nur 32 diskrete Werte erkennen.
Das sollte wohl schaffbar sein.

von Fabian W. (fabian-w)


Lesenswert?

Vielen Dank für Eure schnellen Antworten!

Veit D. schrieb:
> Hallo,
>
> Du könntest einen I2C Portexpander verwenden, macht nur Platzmäßig
> keinen Sinn, könnte man gleich einen größeren µC verwenden.

Das habe ich mir auch schon überlegt, aber genau aus dem gleichen Grund 
wieder verworfen.

> Für RS485 und nur 32 Teilnehmer kannste den MAX487 verwenden. Der hat
> Slewrate bis 250kBaud und ist damit gutmüdiger. Gibts auch von anderen
> Herstellern. Datenblätter und Preise vergleichen.

Ich habe mich für den MAX3483 ausgesucht. Der ist auch Slewrate begrenzt 
und arbeitet mit 3,3 V.

Ulrich K. schrieb:
> mit einem Jumper und einer LED die Adresse ins EEPROM bringen:

Das ist auch eine interessante Idee!

> Oder Vergabe der Adresse per Software:
> Alle deine Geräte akzeptieren eine "Broadcast" Adresse (z.B.: 0). Mit
> einer Punkt zu Punkt Verbindung kann darüber die Adresse eingestellt
> oder abgefragt werden.

Punkt zu Punkt möchte ich vermeiden.

mm schrieb:
> Warum sollten die eng beieinander liegen. Kannst Doch die Spannungen
> gleichmäßig über den Spannungsbereich verteilen.

Du hast recht. Ich habe mich irgendwie zu sehr auf die "Standard" Werte 
versteift. Ich werde mal Excel anwerfen, das durchspielen und dann auch 
so umsetzen.

Danke nochmal für die schnelle Hilfe!
Fabian

von Ulrich K. (elektromechanikus)


Lesenswert?

Hallo Fabian,

Punkt zu Punkt Verbindung ist nur zum konfigurieren der Adresse nötig.
Im Betrieb natürlich Multidrop mit der eingestellten Adresse.

Gruß
Ulrich

von Sebastian S. (amateur)


Lesenswert?

Wie viele Pins stehen denn zur Verfügung?
Hast Du 2 Stück über, so könnte ein - du musst ja sowieso an das Gerät - 
Programmieradapter, der über eine serielle Schnittstelle läuft, helfen. 
Die meisten Käfer haben was Serielles.
Einfachstprotokoll mit Komfortfunktion: Anzeigen.
Der Adapter kann dann sogar ein Display und ein paar Tasten enthalten 
oder gleich eine PC-Schnittstelle zur Verfügung stellen. Ist ja dann ein 
externes und nur zum Einstellen nötiges Teil. Die ursprüngliche Platine 
muss dann nur Rx und GND bzw. Tx, Rx und GND – etwas geschützt - zur 
Verfügung stellen.

von mm (Gast)


Lesenswert?

Fabian W. schrieb:
> Du hast recht. Ich habe mich irgendwie zu sehr auf die "Standard" Werte
> versteift. Ich werde mal Excel anwerfen, das durchspielen und dann auch
> so umsetzen.

http://www.gjlay.de/helferlein/spannungsteiler.html
kann da auch ganz gut helfen... ist zwar für E12/E24, aber dafür gibt's 
ja dann die Parallelschaltung.

von Stefan F. (Gast)


Lesenswert?

Ich würde mal hinterfragen, ob du wirklich 32 Busteilnehmer brauchst. 
Für mich klingt das nämlich nach einer typischen AnfängerWollMilchSau.

von Wolfgang (Gast)


Lesenswert?

Fabian W. schrieb:
> Ursprünglich habe ich dabei an Lötjumper (5
> Stück für die 32 Möglichkeiten) gedacht.
> Allerdings reichen hierfür meine Pins am Mikrocontroller (vermutlich
> Attiny 441/841) nicht aus.

Mit einem Pin 32 Adressen per HW festzulegen, wird knapp. Fünf Pins hast 
du nicht frei. So weit - so gut.
Wenn du also die Konfiguration nicht per SW machen willst, wäre es nicht 
unpraktisch, wenn du verraten würdest, wie viele Pins sich für den Zweck 
erübrigen lassen und ob die nur digital können oder auch an einen ADC 
geschaltet werden können.

von DANIEL D. (Gast)


Lesenswert?

Fabian W. schrieb:
> Ulrich K. schrieb:
>
>> mit einem Jumper und einer LED die Adresse ins EEPROM bringen:
>
> Das ist auch eine interessante Idee!

Bei der Firma MEP werden bei den Handmeldern von Brandmeldeanlagen, die 
Bus Adressen auf ähnliche Weise eingestellt. Wenn der Melder keine 
Adresse hat leuchtet eine rote LED dauerhaft. Und dann hat man einen SMD 
Knopf, dort stellt man dann Einer, Zehner und Hundert nacheinander durch 
eine jeweilige Anzahl von Tasten drücken ein. Und am Ende bekommt man 
das Ergebnis einmal vor geblinkt, und kann zum überprüfen mitzählen.

von Hannes (Gast)


Lesenswert?

Fabian W. schrieb:
>> Warum sollten die [Anm.: Widerstandwerte] eng beieinander liegen.
>> Kannst Doch die Spannungen
>> gleichmäßig über den Spannungsbereich verteilen.

> Du hast recht. Ich habe mich irgendwie zu sehr auf die "Standard" Werte
> versteift. Ich werde mal Excel anwerfen, das durchspielen und dann auch
> so umsetzen.

Denk dran, E12 hat (std.) 10% Toleranz, d.h, ein 10k+10% (=11k) und ein 
12k-5% (=10.8k) uberschneiden sich schon. Du musst also schon mal jeden 
2. Wert auslassen. Für 32 unterscheidbare Adressen musst dann 6 Dekaden 
vorhalten. Würde ich mir gut überlegen, v.A. da "im Feld" nicht wirklich 
konfigurierbar (Lötkolben, Entlötpumpe, Widerstandskiste mitschleppen).

Die Jumper-Idee finde ich da besser. Beim Booten kann man ja über eine 
LED (auf dem Jumper-Pin) die Adresse rausmorsen (binär 5bit, 0=kurz, 
1=lang).

just my 2ct

von Xerxes (Gast)


Lesenswert?

>
> Alternativ würde ich die Adresse fest in den EEPROM schreiben (das ist
> dann aber nicht mehr auf der Platin zu sehen) oder muss mir doch noch
> einen größeren Controller suchen.
>
> Vielen Dank und viele Grüße
> Fabian

Ein Taster auf dem Slave. Beim Drücken fragt der Slave beim Master nach 
einer Adresse und bekommt diese zugewiesen. Diese dann einfach im EEPROM 
abspeichern.

von Frank K. (fchk)


Lesenswert?

Wenn Du noch eine Ader frei hast, kannst Du das auch ganz anders machen:

Jeder Slave hat einen Eingang mit Pullup und einen Open Collector/Open 
Drain Ausgang. Alle Slaves sind hintereinander geschaltet, die 
Datenleitungen als terminierter Bus, und der Eingang eines jeden Slaves 
an den Ausgang des vorhergehenden Slaves. Die Ausgänge sind Normal high.

Nach dem Poweron sind alles Slaves passiv. Der Master zieht den Eingang 
des ersten Slaves auf low und sendet ihm seine Adresse. Wenn der erste 
Master konfiguriert ist, setzt er seinen Ausgang auf low. Jetzt kann der 
Master dem zweiten Slave seine Adresse geben usw usw, so lange, bis 
niemand mehr auf eine Konfigurationsanforderung antwortet. Damit ist 
alles dynamisch und automatisch konfiguriert.

fchk

von Pandur S. (jetztnicht)


Lesenswert?

Was spricht dagegen, die Adresse per software zu setzen, resp ins EEPROM 
zu schreiben ?

von Utruiwe (Gast)


Lesenswert?

Wenn ich deine Frage richtig verstehe ist der "Trick" den zu suchst ein 
R2R-Netzwerk.
https://de.wikipedia.org/wiki/R2R-Netzwerk

von Achs (Gast)


Lesenswert?

Ein drehschalter, ok. Ein Speicherchip mit i2c oder onewire, ok. Aber 
Widerstände/lötbrucken ist Bastelei.

Den sensor über rs485 konfigurieren und gut ist. Egal ob per Taster im 
Netz, per Schritt beim kalibrieren oder per Seriennummer manuell. Und 
notfalls mit Filzstift draufschreiben.

von EAF (Gast)


Lesenswert?

Fabian W. schrieb:
> Allerdings reichen hierfür meine Pins am Mikrocontroller (vermutlich
> Attiny 441/841) nicht aus.

Charlieplexing!
?

von (prx) A. K. (prx)


Lesenswert?

Es findet sich oft ein Weg, mehrere eigentlich für andere Zwecke 
genutzten Ausgänge über Dioden an einen einzelnen Eingang zu ziehen. In 
der Startphase kann dann darüber die Adresse definiert werden.

Allerdings ist dieses Verfahren natürlich von der konkreten Schaltung 
abhängig und damit nicht universell definierbar.

: Bearbeitet durch User
von Jobst M. (jobstens-de)


Lesenswert?

Xerxes schrieb:
> Beim Drücken fragt der Slave beim Master

.... cool! :-D
(Der ist dann kein Master mehr ...)

Gruß
Jobst

von Gerhard O. (gerhard_)


Lesenswert?

Ich löste das Problem der Adressenkodierung vor Jahren bei einem 433MHz 
Alarmsystem mit einem Druckknopf und langsam blinkenden LED Anzeige für 
bis zu 20 Sender und die Adresse wurde automatisch im EEPROM des PICs 
hinterlegt. Man könnte hier ähnlich vorgehen.

von Fabian W. (fabian-w)


Lesenswert?

Vielen Dank für Eure vielen Antworten!

Es sind einige interessante Ansätze dabei, auf die ich im ersten Moment 
nicht gekommen wäre.
In habe auch eingesehen, dass es in Hardware in meinem Fall nicht 
wirklich Sinn macht die Adresse einzustellen. Deswegen werde ich die 
Adresse wohl einmal in den EEPROM schreiben und diese dann mit Filzstift 
o.ä. auf die Platine schreiben.

Vielen Dank nochmal an alle!
Fabian

von Hannes (Gast)


Lesenswert?

Gerhard O. schrieb:
> Ich löste das Problem der Adressenkodierung vor Jahren bei einem 433MHz
> Alarmsystem mit einem Druckknopf und langsam blinkenden LED Anzeige für
> bis zu 20 Sender und die Adresse wurde automatisch im EEPROM des PICs
> hinterlegt. Man könnte hier ähnlich vorgehen.

Ich greife hier nochmals die Heart-Beat-LED auf. Kostet eine I/O 
Leitung. Diese LED kann nach Reset die Adresse raus morsen: z.B. 
kurz-lang-kurz-kurz-lang = 01001 = Adr-9.

Wenn man es geschickt anstellt, könnte über den gleichen I/O-Pin 
vielleicht auch noch der Druckknopf/Taster gehen.

just my 2ct

von Helge (Gast)


Lesenswert?

Ich finde die Lösung interessant, die bei Türsprechstellen verwendet 
wird. Da sind normale Widerstände dabei, mit den Ziffern 0-9 bedruckt. 
In einen 8-Pin DIL-Sockel lassen sich 4 davon stecken. Über ADC werden 
daraus 00-99 dekodiert, Busabschluß und eine Sonderfunktion.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Und die läuft über RS485? Welche Werte haben die Widerstände?

von Walter T. (nicolas)


Lesenswert?

Ansonsten böte es sich an, die Adresse über den Bus zu setzen.

Der Slave lauscht auf seiner eingestellten Adresse und einer 
Programmier-Adresse, die bei allen Slaves gleich ist. Letztere wird nur 
dann genutzt, wenn der entsprechende Sensor mit dem Master allein ist.

Dann spart man sich das Gefummel mit Tastern und LEDs und kann die 
Eingabemethoden des Masters nutzen.

Alternative: Per Jumper oder Taster in den "Adresse-Ändern-Modus" 
wechseln.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Abdul K. schrieb:
> Und die läuft über RS485?

Ich glaube du hast ihn missverstanden. Man kann 4 Widerstände stecken. 2 
Davon codieren die Adresse, einer ist der optionale Abschlusswiderstand 
für den Bus und der letzt stellt Sonderfunktionen ein.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

So hatte ich ihn verstanden.

von Helge (Gast)


Lesenswert?

Sprechanlagen haben häufiger sowas ähnliches wie RS485, allerdings mit 
eingekoppelter Versorgungsspannung (24..30V) auf den Datenadern. Wenn 
ich die nächste Anlage mache, kann ich die Widerstände mal messen. 
Glaube 0 war Brücke, ging hoch bis 1M für 9.

von Walter T. (nicolas)


Lesenswert?

Walter T. schrieb:
> Ansonsten böte es sich an, die Adresse über den Bus zu setzen.

Nachtrag: Eigentlich kann man sich die Programmier-Adresse und den 
Programmier-Schalter komplett sparen. Der Adressraum ist ja klein genug, 
dass man den kompletten Adressraum schnell durchscannt hat.

von Fabian W. (fabian-w)


Lesenswert?

Jetzt habe ich zu dem Thema Adressvergabe über den Bus/über den Master 
noch ein paar Fragen.

Soweit ich es verstanden habe gilt in diesem Fall, dass jeder Slave die 
gleiche Programieradresse hat, bzw. über eine (natürlich auch wieder 
einheitliche) Broadcastadresse verfügt. Eine "normale" Adresse ist nicht 
vorhanden, bzw. nur eine voreingestellte, die zufällig oder 
voreingestellt ist.
Dadurch ist ein einzelner Slave ja nicht ansprechbar, denn es fühlen 
sich alle (oder die zumindest die Adressgleichen) Slaves gleichzeit 
angesprochen.

Die Adressvergabe kann dann nur durch einen Tastendruck am Slave oder 
das einzeln nacheinander anstecken der Slaves funktionieren, oder?
Oder wie löst man das normal?

Wenn nacheinander eingesteckt wird, wäre eine Hot-Plug-Fähigkeit 
natürlich von Vorteil. Wäre RS485 mit einem MAX3483 denn Hot-Plug fähig? 
Bzw. unter welchen Voraussetzungen ist da möglich? Hiermit habe ich mich 
noch überhaupt nicht beschäftigt.
Wie gut verkraften denn RJ45 Stecker das Einstecken/Ausstecken, wenn 
eine Bus-Versorgungsspannung (12 V) mitgeführt wird?

von Walter T. (nicolas)


Lesenswert?

Fabian W. schrieb:
> Oder wie löst man das normal?

Normal? Keine Ahnung. Ich habe noch nie ein Gerät mit RS485 gesehen, das 
ich als "normal" bezeichnet hätte. Und keines davon habe ich selbst 
entwickelt. Aber bei anderen Bussen existiert die gleiche Fragestellung, 
wenn man die Adresse selbst vergeben kann.

Fabian W. schrieb:
> Die Adressvergabe kann dann nur durch einen Tastendruck am Slave oder
> das einzeln nacheinander anstecken der Slaves funktionieren, oder?

Das wäre zumindest der naheliegende Ansatz. Irgendwie muss man das 
Gerät, das umprogrammiert werden soll, von den anderen unterscheiden 
können. Und irgendwie sollte man eine einmal gesetzte Adresse auch 
wieder oder ändern können. "Exklusiv auf einem Bus" wäre ein solches 
Unterscheidungsmerkmal. "Eigene Adresse nur zum Umprogrammieren" ein 
anderes. "Meldet einen bestimmten Status zurück" wäre ein mögliches 
drittes. "Der Master listet die Geräte-IDs aller Teilnehmer auf, und 
dann muss man da auswählen" ein Viertes.

Fabian W. schrieb:
> Wie gut verkraften denn RJ45 Stecker das Einstecken/Ausstecken, wenn
> eine Bus-Versorgungsspannung (12 V) mitgeführt wird?

Die Antwort auf diese Frage hängt zu 100% an Deiner (hier nicht 
bekannten) Beschaltung, da RJ45 keinerlei voreilenden/nacheilenden 
Kontakte hat, die helfen würden.

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Fabian W. schrieb:

> Die Adressvergabe kann dann nur durch einen Tastendruck am Slave oder
> das einzeln nacheinander anstecken der Slaves funktionieren, oder?

Ja. Oder wie ich das geschrieben habe, mittels einer zusätzlichen 
Leitung von Slave zu Slave.

Andere Möglichkeit: Jeder Slave hat von sich aus bereits eine eindeutige 
ID. Die kann er durch ein 1-Wire Device oder ein EEPROM mit 
vorprogrammierter Ethernet-Adresse (24AA02E48/E64 oder AT24MAC402/602 
für I2C, 25AA02E48/E64 für SPI) bekommen.

> Wenn nacheinander eingesteckt wird, wäre eine Hot-Plug-Fähigkeit
> natürlich von Vorteil. Wäre RS485 mit einem MAX3483 denn Hot-Plug fähig?

Hotplug ist bei RS485 nicht vorgesehen. Wenn Du den Bus auftrennen 
musst, um ein Device einzuhängen, ist der Bus in der Zwischenzeit tot, 
weil nicht mehr ordentlich terminiert. Bei Twisted Pair Ethernet ist das 
beispielsweise gar kein Problem, weil alle Devices dort mit einem Switch 
sprechen.

> Wie gut verkraften denn RJ45 Stecker das Einstecken/Ausstecken, wenn
> eine Bus-Versorgungsspannung (12 V) mitgeführt wird?

Power Over Ethernet existiert und funktioniert problemlos. Allerdings 
nimmt man dort 48V, um mehr Leistung übertragen zu können. 48V 
Nennspannung ist die höchste Spannung, bei der man sich nicht um 
Berührungsschutz usw kümmern muss. Jedes PoE-Gerät hat daher einen 
DC-DC-Wandler von 48V auf die benötigten internen Spannungen eingebaut.

fchk

von Stefan F. (Gast)


Lesenswert?

Fabian W. schrieb:
> Wenn nacheinander eingesteckt wird, wäre eine Hot-Plug-Fähigkeit
> natürlich von Vorteil.

Dafür ist RS485 nicht vorgesehen, also schlage dir das aus dem Kopf.

Du gibst mir das Gefühl, soviel Universalität wie möglich unterbringen 
zu wollen, ohne dass dafür konkreter Bedarf besteht. Damit machst du es 
nur unnötig kompliziert. Es sind immer die komplizierten Systeme, die 
einem später ärger bereiten.

Wenn dein Mikrocontroller für eine simple Address-Eingabe die jeder 
nachvollziehen kann zu wenig Pins hat, hat nimm einen größeren. Wenn es 
keinen größeren gibt, dann nimm Port Expander.

Dein Hot-Plug fähiges System mit automatischer Address-Zuteilung wurde 
schon lange erfunden und hat sich bewährt: Ethernet. Versuche nicht, 
dieses Rad neu zu erfinden!

von Fabian W. (fabian-w)


Lesenswert?

Hallo Stefan,

keine Sorge, so universell soll und wird es nicht werden ;)
Meine erste Idee war, dass ich die Adressen über die Pins eingebe. Denn 
das schien mir am einfachsten.
Da ich dafür aber keine freien Pins mehr habe, fiel das mit dem 
aktuellen Tiny flach.

Als Hobbybastler ist es aber so, dass man an viele Sachen nicht denkt, 
die für einen Profi zum Standard gehören. Deswegen habe ich mich ans 
Forum gewandt um zu hören wie ein Profi das ganze lösen würde.

Ich habe aber dann schnell (ein-)gesehen, dass es hier für mich keine 
einfache uns sinnvolle Lösung gibt. Deswegen bekommt der Tiny seine 
Adresse in den EEPROM beim ersten Programmieren und die Sache ist 
erledigt. Alternativ nehme ich einen größeren Tiny, aber das ist mir nur 
für die Adresseingabe eigentlich zu schade.

Jetzt kommen aber die vielen Kommentare zur automatischen Adresseingabe 
und meine Neugier ins Spiel :)
Das System dahinter habe ich irgendwie nicht verstanden oder es ist 
wieder recht kompliziert/aufwändig. Daher wollte ich nochmal nachfragen, 
das ganze verstehen und schauen ob meine Überlegungen Sinn machen.

Die Entscheidung ist aber schon gefallen und so Sachen wie Hot-Swap, 
automatische Zuteilung, ... werde ich sicher nicht machen.
Interessant ist es aber schon darüber nachzudenken, Probleme versuchen 
zu verstehen und  diese Probleme (zumindest im Kopf) versuchen zu lösen. 
Das ist für mich nämlich auch ein großer Teil des Hobbys. Selbst wenn 
die Problemlösung dann gar nicht gebraucht oder umgesetzt wird.

Danke, viele Grüße und schon mal ein schönes Wochenende!
Fabian

von A. S. (Gast)


Lesenswert?

Fabian W. schrieb:
> Die Adressvergabe kann dann nur durch einen Tastendruck am Slave oder
> das einzeln nacheinander anstecken der Slaves funktionieren, oder?

Oder bei der Fertigung oder durch Seriennummer oder zufällige 
Verzögerungen, oder oder

> Wenn nacheinander eingesteckt wird, wäre eine Hot-Plug-Fähigkeit
> natürlich von Vorteil. Wäre RS485 mit einem MAX3483 denn Hot-Plug fähig?

Was meinst Du damit?

Notfalls geht halt ein Telegramm kaputt. Das kann immer passieren.

von Stefan F. (Gast)


Lesenswert?

Fabian W. schrieb:
> Alternativ nehme ich einen größeren Tiny, aber das ist mir nur
> für die Adresseingabe eigentlich zu schade.

Was genau ist "zu schade"? Der nächst größere wird wohl kaum so viel 
teurer sein, dass es eine Rolle spielt. Hast du keinen Platz?

Oder sind dir wenig genutzt Pins zu kostbar? Das wäre albern.

Fabian W. schrieb:
> Interessant ist es aber schon darüber nachzudenken,

Auf jeden Fall. Befasse dich mit Ethernet:
- Was mach ein MAC?
- Wie sehen die Signale von 10Base-T aus? Was ist bei 100 MBit und 
Gigabit anders?
- Warum verwendet Ethernet Übertrager? Warum 2 verdrillte Leitungen? 
Warum kann man nicht jede beliebige Kabel verwenden?
- Wo ist der Unterschied zwischen MAC und IP Adresse?
- Wo kommt die IP Adresse her?
- Woher weiß ein Switch, an welchem Port ein Gerät mit einer bestimmten 
Adresse angeschlossen ist? Zählt hier die MAC- oder die IP-Adresse?
- Woher weiß ein Router, über welchen Weg ein Gerät erreichbar ist? 
Zählt hier die MAC- oder die IP-Adresse?
- Was mach das UDP Protokoll? Welche Vor- und Nachteile hat es?
- Was mach das TCP Protokoll? Welche Vor- und Nachteile hat es?
- Was kommt bei WLAN noch dazu? (AP, STA, WPA2, WPS)

Ich empfehle dir das, weil dort viele bewährte Grundlagen zu 
Bus-Systemen kombiniert wurden. Was du sort lernst wird dir auch bei 
anderen Bussen immer wieder begegnen. Und im Mikrocontroller Umfeld ist 
die Anbindung via Ethernet/WLAN längst alltäglich geworden.

von Marco H. (damarco)


Lesenswert?

Dumme Idee... Du kannst zwar 32 Teilnehmer physikalisch betreiben aber 
die wirklich Anzahl der Teilnehmer hängt vom Protokoll ab. In jenes 
Protokoll kann man auch das setzen der Adresse einbauen. Somit ist keine 
Hardware dazu nötig.

Da baut man sich dann eine Art Programmiergerät welches die Adressen 
setzt.

: Bearbeitet durch User
von DANIEL D. (Gast)


Lesenswert?

Also ich würde bedenken dass bei einem Bussystemen welches erweitert 
wird, auch Adressen mitten im Busstrang ausgetauscht werden müssen z.b. 
oder eingefügt, oder entfernt. Man sollte sicherstellen dass dies am 
Ende einwandfrei funktioniert, sonst ist der Bus ziemlich unpraktikabel.

von Eierlegende Wollmilchsau (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Es sind immer die komplizierten Systeme, die
> einem später ärger bereiten.

Da denke ich an so machen Kunden ...

von Bauform B. (bauformb)


Lesenswert?

Walter T. schrieb:
> Fabian W. schrieb:
>> Wie gut verkraften denn RJ45 Stecker das Einstecken/Ausstecken, wenn
>> eine Bus-Versorgungsspannung (12 V) mitgeführt wird?
>
> Die Antwort auf diese Frage hängt zu 100% an Deiner (hier nicht
> bekannten) Beschaltung, da RJ45 keinerlei voreilenden/nacheilenden
> Kontakte hat, die helfen würden.

Generell sind Stecker nicht dafür gedacht, unter Last gesteckt zu 
werden. Allerdings sind 12V noch mal harmloser als 48V, siehe oben. Nur 
mit dem Strom muss man aufpassen, recht viel mehr als 0.5A sind nicht 
drin. Und bei langen Kabeln muss man auch den Spannungsabfall 
berücksichtigen.

Offiziell hat RJ45 vielleicht keinerlei voreilende Kontakte, praktisch 
macht das Schirmblech von Patch-Kabeln mehrere Millimeter vorher 
Kontakt. Natürlich nicht mit UTP-Kabeln und natürlich gibt es 
RJ45-Buchsen, die das nicht unterstützen. Aber solche muss man ja nicht 
einbauen. Bleiben noch die Benutzer, die mal eben das übrige UTP-Kabel 
vom kaputten Router benutzen...

von J. S. (engineer) Benutzerseite


Lesenswert?

Frank K. schrieb:
> Nach dem Poweron sind alles Slaves passiv. Der Master zieht den Eingang
> des ersten Slaves auf low und sendet ihm seine Adresse. Wenn der erste
> Master konfiguriert ist, setzt er seinen Ausgang auf low. Jetzt kann der
> Master dem zweiten Slave seine Adresse geben usw usw, so lange, bis
> niemand mehr auf eine Konfigurationsanforderung antwortet. Damit ist
> alles dynamisch und automatisch konfiguriert.

So ähnlich habe ich das mal in einem Sensornetzwerk gemacht und auch 
kürzlich irgendwo hier im Detail beschrieben. Wir hatten vor gefühlt 6 
Wochen ein ähnliches Thema. Ist im Prinzip eine einmalige 
Busarbitrierung. Man muss nur durch die Verkabelung sicherstellen, dass 
bekannt ist, welcher Sensor an welcher Position sitzt. Damit kriegt mal 
alles eingebunden, was es zu kaufen gibt.

Wenn man die Sensoren aber selber herstellt, kann man sie meistens 
branden, also eine Seriennummer verpassen. In einem Fall habe ich meinem 
Kunden empfohlen, einfach eine lokale MAC-Adresse einzubrennen. Das hat 
sich Jahre später sehr bewährt! Hier würde ich mal nachprüfen, ob man 
nicht bei der Auslieferung und dem Test der Module einfach eine 
fortlaufende Seriennummer in das board bekommt. Wer weiß wie die später 
mal konfiguriert werden müssen und ob nicht mehrere Einheiten aus 
mehreren Subnetzwerken verschaltet werden müssen.

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.