Forum: Mikrocontroller und Digitale Elektronik Einfachste Lösung für initialen "Start" des CAN Bus


von Alec T. (803)


Lesenswert?

Hallo zusammen,

Ich habe einen CAN Bus mit idealerweise zwei Teilnehmern, von denen 
inital jedoch einer passiv am Bus ist. Er geht nur aktiv an den Bus wenn 
er ein entsprechendes Kommando via CAN mitliest. Das kann er aber wohl 
leider nicht empfangen solange neben dem einen aktiven Teilnehmer kein 
weiterer aktiver Teilnehmer am Bus ist.

Im Moment behelfe ich mir mit einem CAN Dongle als dritten (bzw. initial 
zweiten aktiven) Busteilnehmer.

Gibt es da nicht eine andere Möglichkeit?

Das initial passive Gerät kann ich leider nicht verändern...

Grüße
Alec

von Helmut -. (dc3yc)


Lesenswert?

Na dann lass doch deinen initial einzigen aktiven Teilnehmer solange 
senden, bis der initial zweite Teilnehmer aktiv ist. Dieser wird dem 
ersten dann schon sein Ack schicken. Ansonsten wird der erste halt bis 
in alle Ewigkeit senden.

Allerdings ist das eine komische Konstruktion, die du da hast. 
Normalerweise besteht ein Bus immer mindestens aus zwei Teilnehmern, die 
aktiv sind. Warum ist der zweite passiv? Wenn es keine Nachrichten für 
ihn gibt, kann er das Telegramm doch trotzdem bestätigen, falls er es 
korrekt empfangen hat.

von Jürgen (Gast)


Lesenswert?

CAN Transceiver mit Sleep bzw wake-up Funktion nutzen.
Ohne CAN Aktivitäten kann der Transceiver abgeschaltet
werden. Bei CAN Aktivität schaltet er sich selbständig
wieder ein.

von Alec T. (803)


Lesenswert?

Helmut -. schrieb:
> Na dann lass doch deinen initial einzigen aktiven Teilnehmer
> solange
> senden, bis der initial zweite Teilnehmer aktiv ist. Dieser wird dem
> ersten dann schon sein Ack schicken. Ansonsten wird der erste halt bis
> in alle Ewigkeit senden.
> Allerdings ist das eine komische Konstruktion, die du da hast.
> Normalerweise besteht ein Bus immer mindestens aus zwei Teilnehmern, die
> aktiv sind. Warum ist der zweite passiv? Wenn es keine Nachrichten für
> ihn gibt, kann er das Telegramm doch trotzdem bestätigen, falls er es
> korrekt empfangen hat.

Das ist ja das Problem denke ich, es ist niemand da der ein Ack schickt. 
Dementsprechend setzt der Transceiver vom ersten, und zu der Zeit 
einzigen aktiven Teilnehmer das Paket, welches den zweiten Teilnehmer 
aktivieren könnte, wohl gar nicht erst vollständig auf den Bus.
Zumindest kriege ich von dessen CAN Controller ne Fehlermeldung wenn ich 
es versuche.

von Alec T. (803)


Lesenswert?

Jürgen schrieb:
> CAN Transceiver mit Sleep bzw wake-up Funktion nutzen.
> Ohne CAN Aktivitäten kann der Transceiver abgeschaltet
> werden. Bei CAN Aktivität schaltet er sich selbständig
> wieder ein.

Wie gesagt kann ich an dem anfang inaktiven Teilnehmer nichts ändern...

von Harald (Gast)


Lesenswert?

Alec T. schrieb:
> Er geht nur aktiv an den Bus wenn
> er ein entsprechendes Kommando via CAN mitliest.

Ist sichergestellt, dass dieses Kommando als allererstes exklusiv auf 
den Bus gelegt wird? Falls vorher irgendetwas anderes gesendet wird 
würde sich der Bus schon blockieren, da genau diese andere,Message 
endlos gesendet würde.

von Helmut -. (dc3yc)


Lesenswert?

Alec T. schrieb:
> Das ist ja das Problem denke ich, es ist niemand da der ein Ack schickt.
> Dementsprechend setzt der Transceiver vom ersten, und zu der Zeit
> einzigen aktiven Teilnehmer das Paket, welches den zweiten Teilnehmer
> aktivieren könnte, wohl gar nicht erst vollständig auf den Bus.
> Zumindest kriege ich von dessen CAN Controller ne Fehlermeldung wenn ich
> es versuche.

Also wenn nur ein Teilnehmer am Bus hängt, der natürlich korrekt 
terminiert sein muss, wird das Telegramm solange gesendet, bis es 
bestätigt wird und kein Errorframe kommt. Das muss natürlich das sein, 
das deinen anderen Controller aufweckt. Sonst kann dein Konstrukt nicht 
funktionieren!

von Peter D. (peda)


Lesenswert?

Alec T. schrieb:
> Gibt es da nicht eine andere Möglichkeit?

Nö.
Wenn der 2. Teilnehmer so vergurkt programmiert ist, brauchst Du für das 
ACK einen 3.
Ohne ACK wird immer ein Errorframe draus.

von Alec T. (803)


Lesenswert?

Danke @Helmut und @Harald.
Das war der richtige Hinweis.

Da war noch ein anderer Frame zuvor im weg. Wenn man aufpasst das nur 
der richtige Frame dem Controller übergeben wird und nichts sonst bis 
das andere Device aktiv ist funktioniert alles :)

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.