Forum: Mikrocontroller und Digitale Elektronik CAN-Bus: identische Knoten gezielt ansteuern


von Klaus (Gast)


Lesenswert?

Hallo,

ich habe vor, mehrere gleiche CAN-Bus Geräte gezielt anzusteuern. Im 
Moment plane ich mit 8-Bit DIP-Schaltern, um jedem Gerät eine eindeutige 
ID zuzuweisen, die man dann im 29/11 Bit Identifier verwursten kann.

Eine Lösung ohne diese DIP-Schalter wäre mir allerdings lieber. Nur 
fällt mir dazu leider nichts passendes ein.

Vlt. hat jemand von euch eine Idee, wie man das umsetzen könnte?

Bin für jeden Tipp dankbar!

Gruß Klaus

von (prx) A. K. (prx)


Lesenswert?

Muss es ad hoc änderbar sein?

von Frank (Gast)


Lesenswert?

Oder eben direkt im uC eine programmierbare ID im Flash...

von H.Joachim S. (crazyhorse)


Lesenswert?

Es gibt von Microchip z.B. den 24AA025E48 mit einer einzigartigen MAC.

von (prx) A. K. (prx)


Lesenswert?

Wenn interne IDs nicht zulässig sind: Wieviele verschiedene IDs? Eine 
pinsparende Lösung wäre Widerstandscodierung über A/D-Pin.

von NurEinGast (Gast)


Lesenswert?

Manche auf Can aufgesetzte Protokolle benutzen dynamiche Addressierung. 
Vielleicht schaust du dir dort was ab und machst es ähnlich.

von Harald (Gast)


Lesenswert?

Oder machst Du einen logischen Eingang (z.B. mit Pull-Up) und einen 
Ausgang (z.B. Open Collector) an jedes Gerät und schleifst das von Gerät 
zu Gerät durch (1 Ader mehr). Durch eine Init-Sequenz einmalig oder nach 
jedem Power-Up kann man dann durchadressieren.

von Thomas (kosmos)


Lesenswert?

Ich würde da einfach jedem µC einen eigenen Identifier spendieren den du 
im EEPROM speicherst. Wenns ein AVR ist und du in ASM programmierst 
könnte das so aussehen.
1
.eseg
2
Mein_Name: .db 0b00000111, 0b10011001
3
Meine_Funktionen: .db 0b11110000

Wenn dann ein Knoten seinen Namen empfängt kann er entsprechend 
verzweigen und andere Dinge erledigen. z.B. im EEPROM seinen Namen 
ändern oder Funktionen aktivieren die noch nicht freigegeben sind oder 
sogar in einen Bootloader verzweigen so das du Ihn per CAN komplett neu 
füttern kannst.

von Klaus (Gast)


Lesenswert?

Danke für die vielen Hinweise!

NurEinGast schrieb:
> Manche auf Can aufgesetzte Protokolle benutzen dynamiche Addressierung.
> Vielleicht schaust du dir dort was ab und machst es ähnlich.

Das ist der Gedanke, der mir gefehlt hat. Danke!

Gruß Klaus

von Martin L. (maveric00)


Lesenswert?

Hallo,

bleibt die Frage, die dann immer wieder auftaucht: Inwieweit müssen die 
Knoten voneinander später unterschieden werden können - die dynamische 
Adresszuweisung hat nämlich den Nachteil, dass man die physikalische 
Zuordnung so nicht zwangsweise hinbekommt.

Und dass die physikalische Zuordnung bei identischen Knoten egal ist, 
sollte eher die extreme Ausnahme sein - mir fällt zumindest kein 
sinnvolles Szenario ein, bei dem die Adressen dann unterschiedlich sein 
müssen. Eine echt dynamische Adresszuweisung macht nur bei 
unterscheidbaren Knoten Sinn.

Damit muss man aber doch wieder eine Art Zuordnung schaffen. Entweder 
hartverdrahtet (wie oben mit Mikroschaltern, Widerstand, Daisy-Chaining) 
oder per Konfiguration; jedes Gerät hört am Anfang auf die gleiche 
Adresse, die in der Einbauphase (über den Bus) umkonfiguriert wird. Die 
Knoten werden dann entsprechend nacheinander eingebaut und konfiguriert, 
die neue Adresse dann statisch abgespeichert (z.B. in ein EEProm). Wird 
so z.B. in den gängigen Haus-Bus-Systemen gemacht.

Schöne Grüße,
Martin

von Mathias F. (minglifu)


Lesenswert?

Servus,

NurEinGast schrieb:
> Manche auf Can aufgesetzte Protokolle benutzen dynamiche Addressierung.
> Vielleicht schaust du dir dort was ab und machst es ähnlich.

Mir fällt jetzt gerade nur J1939 - "Address Claiming" ein.
Gibts sowas auch bei UDS/CCP(XCP) oder andere?

Gruß

von Martin L. (maveric00)


Lesenswert?

Hallo,

es gibt verschiedene Network Management Methoden, die die Adressen 
dynamisch vergeben; allen gemein (damit auch der J1939) ist allerdings, 
dass nicht zwei gleiche Knoten an den Bus gehen dürfen (J1939 z.B. löst 
Adressen-Konflikte durch den 64-Bit Device Name, der mit der höheren 
Priorität gewinnt). Damit sind sie für den beschriebenen Anwendungsfall 
(mehrere gleiche CAN-Knoten) nicht direkt anwendbar.

Und ob ich jetzt den Device-Namen oder direkt die Adresse konfigurierbar 
mache, dürfte für die Anwendung des Themenerstellers egal sein. Für die 
Umfelder, in denen J1939 angewendet wird, macht es allerdings Sinn, dass 
es reicht, ein "Motorsteuergerät" und ein "Bremssteuergerät" zusammen an 
einen Bus hängen zu können, ohne sie auf eine spezielle 
Fahrzeugkonfiguration (mit zusätzlich "Fensterhebersteuergerät") 
programmieren zu müssen.

Schöne Grüße,
Martin

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.