Autor |
Nachricht |
Tobi163
CAN Hacker seit: 12.10.2017 Beiträge: 4 Karma: +0 / -0
Kostenloser Account, kein CAN Entwicklungs-Support
|
12-10-2017, 15:33 Titel: Arduino + Can Bus Shield / PID Filtern |
|
|
Hallo Canhack Mitglieder , ich bin Tobi und habe noch keine großen Erfahrungen was Can Bus etc. angeht ich finde das Thema aber sehr Interessant und da ich auch gerne mit dem Arduino bastel wollte ich mit einem kleinen Projekt anfangen.
Ich wollte bei meinem alten BMW E46 gerne mit dem Can Bus Shield und einem Arduino Uno so Standart Dann wie Drehzahl / Geschwindigkeit usw. heraus filtern und diese dann auf einem externen LCD anzeigen.
Ich habe einige Arduino Librarys für den Can Bus Bereich getestet aber leider nicht wirklich den Erfolg gehabt.
Mein Can Shield ist das Aptotec V1.2 mit dem MCP2515 CAN Controller und MCP2551 CAN Trans-ceiver.
Ich habe den Arduino nur per usb mit meinem mac book versorgt und das can high ( 6 ) / can Low ( 14 ) signal auf die 2 Schraubklemmen des Can Shields angeschlossen. Den optionalen Abschlusswiderstand habe ich ausgelötet.
Ich habe wie gesagt verschiedenen code s ausprobiert damit bekomme ich beim BMW keine Verbindung zum Fahrzeug aber bei einem w204 mercedes von einem Freund bekomme ich eine Verbindung und teilweise sendet das program auch ohne Fehler die Anfragen über den bus allerdings kommen trotzdem immer zwischendurch Verbindungsfehler.
Muss ich eine gemeinsame masse zwischen Fahrzeug und dem Arduino herstellen wie man es bei allen anderen elektrischen Schnittstellen auch macht zb. RS232 oder werden wirklich nur die 2 Signale also Can H / L benötigt ?!
Hier mal meine Versuche und danach die Ausgabe Seriell:
Code: |
// MCP2515 Mask and Filter example for extended CAN message frames.
// Written by Cory J. Fowler (20140717)
/***********************************************************************************
If you send the following extended IDs below to an Arduino loaded with this sketch
you will find that 0x00FFCC00 and 0x00FF9900 will not get in.
ID in Hex is the same as the Filter in Hex.
0x00FFEE00
0x00FFDD00
0x00FFCC00 This example will NOT be receiving this ID
0x00FFBB00
0x00FFAA00
0x00FF9900 This example will NOT be receiving this ID
0x00FF8800
0x00FF7700
This mask will check the filters against ID bits 23 through 8.
(Those familiar with J1939 might see why I used this mask.)
MASK = 0x00FFFF00
If there is an explicit filter match to those bits, the message will be passed to the
receive buffer and the interrupt pin will be set.
This example will NOT be exclusive to ONLY the above message IDs, for that a mask such
as the below would be used:
MASK = 0x1FFFFFFF
At the moment, to disable a filter or mask, copy the value of a used filter or mask.
***********************************************************************************/
#include <mcp_can>
#include <SPI>
long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
MCP_CAN CAN0(10); // Set CS to pin 10
void setup()
{
Serial.begin(115200);
if(CAN0.begin(MCP_STDEXT, CAN_500KBPS, MCP_16MHZ) == CAN_OK) Serial.print("MCP2515 Init Okay!!\r\n");
else Serial.print("MCP2515 Init Failed!!\r\n");
pinMode(2, INPUT); // Setting pin 2 for /INT input
CAN0.init_Mask(0,1,0x00FFFF00); // Init first mask...
CAN0.init_Filt(0,1,0x00FFEE00); // Init first filter...
CAN0.init_Filt(1,1,0x00FFDD00); // Init second filter...
CAN0.init_Mask(1,1,0x00FFFF00); // Init second mask...
CAN0.init_Filt(2,1,0x00FFBB00); // Init third filter...
CAN0.init_Filt(3,1,0x00FFAA00); // Init fouth filter...
CAN0.init_Filt(4,1,0x00FF8800); // Init fifth filter...
CAN0.init_Filt(5,1,0x00FF7700); // Init sixth filter...
Serial.println("MCP2515 Library Mask & Filter Example...");
CAN0.setMode(MCP_NORMAL); // Change to normal mode to allow messages to be transmitted
}
void loop()
{
if(!digitalRead(2)) // If pin 2 is low, read receive buffer
{
CAN0.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
Serial.print("ID: ");
Serial.print(rxId, HEX);
Serial.print(" Data: ");
for(int i = 0; i<len; i++) // Print each byte of the data
{
if(rxBuf[i] < 0x10) // If data byte is less than 0x10, add a leading zero
{
Serial.print("0");
}
Serial.print(rxBuf[i], HEX);
Serial.print(" ");
}
Serial.println();
}
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
|
BMW:
Code: |
KEntering Configuration Mode Successful!
Setting Baudrate Successful!
MCP2515 Initialized Successfully!
Starting to Set Mask!
Setting Mask Successful!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Mask!
Setting Mask Successful!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Filter!
Setting Filter Successfull!
Simple CAN OBD-II PID Request
Error Sending Message...
Error Sending Message...
|
Mercedes:
Code: |
MCP2515 Initialized Successfully!
Starting to Set Mask!
Setting Mask Successful!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Mask!
Setting Mask Successful!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Filter!
Setting Filter Successfull!
Starting to Set Filter!
Setting Filter Successfull!
Simple CAN OBD-II PID Request
Error Sending Message...
Error Sending Message...
Message Sent Successfully!
Error Sending Message...
Error Sending Message...
Message Sent Successfully!
Error Sending Message...
Error Sending Message...
Message Sent Successfully!
Error Sending Message...
Message Sent Successfully!
Message Sent Successfully!
Message Sent Successfully!
Message Sent Successfully!
Message Sent Successfully!
Error Sending Message...
Message Sent Successfully!
Message Sent Successfully!
Error Sending Message...
Message Sent Successfully!
Message Sent Successfully!
Error Sending Message...
Message Sent Successfully!
Error Sending Message...
Error Sending Message...
Message Sent Successfully!
Error Sending Message...
Message Sent Successfully!
Message Sent Successfully!
Error Sending Message...
Error Sending Message...
Error Sending Message...
|
Würde mich sehr freuen wenn mir jemand Tipps geben könnte. Ich habe auch überlegt mir hier aus dem Forum den Can Hack Adapter zu bestellen aber was genau habe ich damit für Möglichkeiten ? Könnte ich damit sagen wir mal: Fensterheber Signale oder vom Lenkrad die Fernbedienung herausfinden ?
Gruß Tobi |
|
Nach oben |
|
|
postmann CAN-Profi
CAN Hacker seit: 23.05.2013 Beiträge: 138 Karma: +59 / -0
CAN Support
|
12-10-2017, 20:48 Titel: Arduino + Can Bus Shield / PID Filtern |
|
|
Ich vermute, du hast die falsche Baudrate eingestellt. Sicher, dass du beim BMW an einem 500 kBaud Netzwerk bist? |
|
Nach oben |
|
|
Tobi163
CAN Hacker seit: 12.10.2017 Beiträge: 4 Karma: +0 / -0
Kostenloser Account, kein CAN Entwicklungs-Support
|
12-10-2017, 23:25 Titel: Arduino + Can Bus Shield / PID Filtern |
|
|
Nein, ich habe von 125 - 500 alle Raten versucht. Leider kein Ergebnis?! Oder kann es sein, dass am BMW E46 OBD 2 nur spezifische PIDs abgefragt werden können und ich für mein Vorhaben Iwo den CAN Bus direkt anzapfen muss z.B. am PDC Steuergerät oder ähnlichem?
Kann mir jemand Infos zu dem Can Hack Adapter geben?
Gruß Tobi |
|
Nach oben |
|
|
CAN-Diagnose Administrator
CAN Hacker seit: 07.06.2011 Beiträge: 550 Karma: +27 / -0 Wohnort: Ländle
|
13-10-2017, 11:25 Titel: Arduino + Can Bus Shield / PID Filtern |
|
|
Hallo Tobi,
evtl. ist es bei Deinem BMW so wie generell bei allen VAG Modellen, daß nämlich ohne die richtige Nachrichten auf dem Diagnose-CAN gar nichts gesendet wird.
Wenn Du "mitlauschen" willst, dann am besten den jeweiligen CAN-Bus direkt (Antrieb, Komfort etc.) anzapfen.
Zitat: |
Kann mir jemand Infos zu dem Can Hack Adapter geben? |
https://shop.dieselschrauber.de/can-usb-interface-kit-mit-rks-can-p-313.php
Viele Grüsse, Rainer |
|
Nach oben |
|
|
Tobi163
CAN Hacker seit: 12.10.2017 Beiträge: 4 Karma: +0 / -0
Kostenloser Account, kein CAN Entwicklungs-Support
|
14-10-2017, 12:15 Titel: Arduino + Can Bus Shield / PID Filtern |
|
|
Hallo Rainer,
danke für deine Antwort.
Ich habe das Problem gefunden. Auf Pin 6/14 ist absolut nichts angeschlossen.
Ich muss an meinem andren Auto mit den Versuchen bezüglich CAN Bus weiter machen.
Zum Can hack adapter: kann man diesen nicht einfach mit *halbseidener Zahlungsanbieter für unschlaue Menschen* bezahlen und zugeschickt bekommen ? Hätte Interesse.
In der Beschreibung steht auch das ein Bsp.Code enthalten ist ist dieser für Arduino und co zum Versenden von CAN Nachrichten?
Gruß Tobi |
|
Nach oben |
|
|
CAN-Diagnose Administrator
CAN Hacker seit: 07.06.2011 Beiträge: 550 Karma: +27 / -0 Wohnort: Ländle
|
14-10-2017, 12:21 Titel: Arduino + Can Bus Shield / PID Filtern |
|
|
Hallo Tobi,
wenn Dir die Zahlungsmöglichkeiten im Shop nicht gefallen, kann ich Dir leider nicht weiter helfen, das sind ausreichend viele und alle unter "Zahlungsmöglichkeiten" gelistet.
Auch die Frage nach "Beispielcode für Arduino & Co" ist wenig zielführend, ich verkaufe keinen Arduino, warum sollte ich da Beispielcode dafür schreiben?
Willst Du mich veräppeln und wie stellst Du Dir eine fruchtbare Entwicklung am CAN Bus Deines Autos vor? Ich halte es für keine gute Idee von Dir in die Fahrzeugbusse Deines Vehikels "irgendwelche" Nachrichten einzuschleusen...
Grüße, Rainer
Zuletzt bearbeitet am 14-10-2017, 23:56, insgesamt 2-mal bearbeitet.
|
|
Nach oben |
|
|
Tobi163
CAN Hacker seit: 12.10.2017 Beiträge: 4 Karma: +0 / -0
Kostenloser Account, kein CAN Entwicklungs-Support
|
14-10-2017, 14:31 Titel: Arduino + Can Bus Shield / PID Filtern |
|
|
Hallo Rainer,
ich habe die anderen Zahlungsmöglichkeiten übersehen. Visakarte ist auch ok.
Der Adapter und die Software ist doch zur Diagnose und zum sniffen von Can Bus Nachrichten gedacht oder sehe ich das falsch?
Ich möchte ja keine extrem komplexe Dinge an meinem Fahrzeug machen. Und ich denke kein Mensch ist auf die Welt gekommen und wusste wie alles geht. Ich Interessiere mich für Can Bus und Co und dachte ein Forum ist dazu da Informationen auszutauschen und gegenseitig zu helfen bezw. Tipps zu geben zumindest kenne ich das so von andren Foren.
Mein Ziel wär es z.b eigene Nachrichten in den Can bus zu senden und zb in Kombiinstrument anzuzeigen oder zb die Fensterheber zu steuern.
Ich habe aktuell ein can bus shield mit mcp2515 + arduino. Ich habe am anfang versucht über die obd 2 schnittstelle einfach mal daten zu erhalten aber das klappt so nicht weil wenn ich das richtig verstanden habe nur eine antwort auf spezielle pids gesendet wird. Wenn ich jedoch an einen bus direkt zb am autoradio gehe dann sollte ich doch nachrichten erhalten. Oder sehe ich das falsch?
Ich habe aktuell das Arduino Shield mit dem mcp2515 an die leitungen vom Command Radio (mercedes) angeschlossen ( bn/rt can h , br can L ). Und wenn ich dann den arduino und somit das shield mit spannung über den usb port versoge zeigt mir mein kombiinstrument wirre nachrichten an. Aber im seriellen Monitor des Arduino kommen keine Can bus nachrichten an nur can init ok.
Ich bin Anfänger das ist klar aber ich würde es sehr begrüßen wenn man hilfreiche tipps und antworten bekommen würde und nicht: einfach das thema an den nagel hängen du hast keine ahnung usw. das ist nicht sinnvoll und hilft keinem weiter.
Noch eine Frage: der can bus der an meinem Command hängt sollte doch nur für Multimedia sein oder täusche ich mich ? Weil ich wie gesagt wirre Informationen im Kombiinstrument bekomme zb. Fernlicht Symbol ist an dann : Airbag Zeichen Gelb Bitte Werkstatt aufsuchen. Wenn ich dann den Arduino trenne und einmal Zündung an , aus ist wieder alles normal.
Grüße Tobi |
|
Nach oben |
|
|
postmann CAN-Profi
CAN Hacker seit: 23.05.2013 Beiträge: 138 Karma: +59 / -0
CAN Support
|
15-10-2017, 12:41 Titel: Arduino + Can Bus Shield / PID Filtern |
|
|
Die verschiedenen Netzwerke in einem Fahrzeug sind meist untereinander mit Hilfe von einem Gateway verbunden.
Das ganze Kommunikationssystem ist dann die Topologie, wenn du auf einem Netzwerk ein Problem hast, wirkt sich das meist auch auf die anderen Netzwerke aus.
Insofern muss ich Rainer zustimmen, bevor du irgendwas sendest (nicht mal das Acknowledge), versuche die Topologie zu verstehen und lausche erstmal nur. Zumal das Senden eines Frames im Fahrzeug eh nicht so einfach ist, da der eigentliche Sender das nicht lustig finden wird. |
|
Nach oben |
|
|
|