Forum: Mikrocontroller und Digitale Elektronik Schalter mit CAN-Bus ohne Controller auslesen?


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Es geht darum, einen Dreh/Tip-Schalter (BMW iDrive) mit einem Arduino 
auszulesen. Nur den Schalter für sich alleine, nix anderes ist auf dem 
Bus, evtl. Signalbeeinflussungen oder "nicht normgerechte" Tricksereien 
sind völlig egal.

Hat man damit z.B. mit einem Arduino und ohne speziellem CAN-Controller 
irgend eine Chance? Erkannt werden sollen die absolute Drehposition und 
der Klick-Event.

Soweit ich zum CAN-Bus gelesen habe, haben die Signale max. um die 1 MHz 
... aber vermutlich rückt der iDrive nur quasi auf "Anweisung" vom 
Busmaster inrgendwelche Pakete heraus, oder?

Wenn es notwendig sein sollte, beschäftige ich mich natürlich selber 
intensiver damit, könnte aber doch sein, dass hier im Forum jemand schon 
mal sowas gemach hat ... ? Danke für Tips.

von Dr. Sommer (Gast)


Lesenswert?

Frank E. schrieb:
> Hat man damit z.B. mit einem Arduino und ohne speziellem CAN-Controller
> irgend eine Chance?

CAN per Software/Bitbanging zu nutzen ist extrem aufwändig, da man sehr 
präzises Timing benötigt. Selbst wenn es irgendwie möglich ist, macht 
der Controller dann absolut nichts anderes mehr. Einen Mikrocontroller 
mit integriertem CAN-Controller zu verwenden hingegen ist super einfach, 
noch einfacher als z.B. I²C. Hier findest du z.B. ein 
Arduino-kompatibles Board mit CAN-Controller & Transceiver, da musst du 
nur noch Strippen anklemmen:
https://www.olimex.com/Products/Duino/STM32/OLIMEXINO-STM32/open-source-hardware
Durch die gigantische Investition von 20€ ersparst du dir eine Unmenge 
an Aufwand.

von Andreas (Gast)


Lesenswert?

Selbst als Bastellösung würde ich das nicht ohne CAN-Treiber und 
CAN-Controller versuchen, da das CAN-Protokoll eine Arbitrierung und 
Handshake auf Bitebene erwartet, ggfs. mit Wiederholung. Das ist nicht 
einfach in Software nachzubilden.
--> Der Olimexino stm32 ist eine gute Wahl.
Anschließend muss natürlich der Teilnehmer korrekt angesprochen werden, 
um die interessante Information zu liefern. Wenn es dafür keine 
Informationen zu Deinem Schalter gibt, musst Du erstmal herausfinden wie 
das geht...
Beides nicht unaufwendig.

von Edson (Gast)


Lesenswert?

Andreas schrieb:
> Anschließend muss natürlich der Teilnehmer korrekt angesprochen werden,
> um die interessante Information zu liefern. Wenn es dafür keine
> Informationen zu Deinem Schalter gibt, musst Du erstmal herausfinden wie
> das geht...
> Beides nicht unaufwendig.

Das ist nicht gesagt. Ich kenne die HW des TE nicht, aber es kann 
genauso gut sein, dass der Teilnehmer (es ist ein Taster mit 
CAN-Interface) bei Betätigung seine ID mit Nutzdaten (An oder Aus) oder 
eine ID für An und eine für Aus sendet und fertig. Dann braucht es nicht 
mehr als einen offenen Message-Filter und einen Blick in die Nutzdaten, 
schon kann man die Daten nach belieben weiterverarbeiten.

von Rudolph R. (rudolph)


Lesenswert?

Es gibt ja nun auch ein CAN-Shield für den Arduino.

Aber bevor man raus hat wie die Daten auf dem Bus auszulesen sind, hat 
man das Teil schon mehrmals aufgemacht und die Signale direkt 
abgegriffen.
Vor allem, wenn da noch ein Netzwerk-Management mit im Spiel sein 
sollte.

Ich hatte sowas in der Art schon mal in den Fingern, da kam dann nach 
kurzer Überlegung eine eigene Platine rein statt der verbauten.

Von dem iDrive gibt es auch diverse Versionen.

von 1001 (Gast)


Lesenswert?

Wenn der CAN Controller kein Gegenüber hat, wer soll dann das 
Acknowledge schicken? Ohne ACK wird er senden bis er in den Bus Off 
Modus geht.
Ich bezweifle das man das ACK "nachbauen" kann.

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.