INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Aptotec V1.2 Can Bus Shield / Auto
11.10.2017, 18:49
Beitrag #1
Aptotec V1.2 Can Bus Shield / Auto
Hallo Leute Wink

Ich bin jetzt schon fast 2 Jahre am versuchen eine Verbindung mit einem meiner Autos über den Can Bus ( OBD2 ) Schnittstelle herzustellen.

Zu meinem Anschluss:

Aptotec Can Bus Shield V1.2 / Arduino Uno

Can Bus Shield Can H auf Pin: 6
Can L auf Pin: 14
Fahrzeug Masse und Arduino Masse haben keine Verbindung.

Den BusAbschlusswiderstand auf dem Shield habe ich entfernt.

Hier der Code:
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.h>
#include <SPI.h>

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
********************************************************************************​*************************/

Bei meinem BMW E46 bekomme ich immer diese Meldungen im Terminal:


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...


Bei meinem Mercedes C Klasse w204 immer diese Meldungen:

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...
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...

Und mit diesem Code bekomme ich das angezeigt:

Code:
/* CAN OBD & UDS Simple PID Request
*
*  Currently requests PID 0x00 at a 1 second interval and
*  displays all received CAN traffic to the terminal at 115200.
*
*  Written By: Cory J. Fowler  April 5th, 2017
*
*  (Disclaimer: Standard IDs are currently UNTESTED against a vehicle)
*
*/

#include <mcp_can.h>
#include <SPI.h>

#define standard 1
// 7E0/8 = Engine ECM
// 7E1/9 = Transmission ECM
#if standard == 1
  #define LISTEN_ID 0x7EA
  #define REPLY_ID 0x7E0
  #define FUNCTIONAL_ID 0x7DF
#else
  #define LISTEN_ID 0x98DAF101
  #define REPLY_ID 0x98DA01F1
  #define FUNCTIONAL_ID 0x98DB33F1
#endif

// CAN TX Variables
unsigned long prevTx = 0;
unsigned int invlTx = 1000;
byte txData[] = {0x02,0x01,0x00,0x55,0x55,0x55,0x55,0x55};

// CAN RX Variables
unsigned long rxID;
byte dlc;
byte rxBuf[8];
char msgString[128];                        // Array to store serial string

// CAN Interrupt and Chip Select Pins
#define CAN0_INT 2                              /* Set INT to pin 2 (This rarely changes)   */
MCP_CAN CAN0(10);                                /* Set CS to pin 9 (Old shields use pin 10) */


void setup(){

  Serial.begin(115200);
  while(!Serial);

  // Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
  if(CAN0.begin(MCP_STDEXT, CAN_500KBPS, MCP_16MHZ) == CAN_OK)
    Serial.println("MCP2515 Initialized Successfully!");
  else{
    Serial.println("Error Initializing MCP2515... Permanent failure!  Check your code & connections");
    while(1);
  }

//
//  // Allow all Standard IDs
//  CAN0.init_Mask(0,0x00000000);                // Init first mask...
//  CAN0.init_Filt(0,0x00000000);                // Init first filter...
//  CAN0.init_Filt(1,0x00000000);                // Init second filter...
//  // Allow all Extended IDs
//  CAN0.init_Mask(1,0x80000000);                // Init second mask...
//  CAN0.init_Filt(2,0x80000000);                // Init third filter...
//  CAN0.init_Filt(3,0x80000000);                // Init fouth filter...
//  CAN0.init_Filt(4,0x80000000);                // Init fifth filter...
//  CAN0.init_Filt(5,0x80000000);                // Init sixth filter...

#if standard == 1
  // Standard ID Filters
  CAN0.init_Mask(0,0x7F00000);                // Init first mask...
  CAN0.init_Filt(0,0x7DF0000);                // Init first filter...
  CAN0.init_Filt(1,0x7E10000);                // Init second filter...

  CAN0.init_Mask(1,0x7F00000);                // Init second mask...
  CAN0.init_Filt(2,0x7DF0000);                // Init third filter...
  CAN0.init_Filt(3,0x7E10000);                // Init fouth filter...
  CAN0.init_Filt(4,0x7DF0000);                // Init fifth filter...
  CAN0.init_Filt(5,0x7E10000);                // Init sixth filter...

#else
  // Extended ID Filters
  CAN0.init_Mask(0,0x90FF0000);                // Init first mask...
  CAN0.init_Filt(0,0x90DA0000);                // Init first filter...
  CAN0.init_Filt(1,0x90DB0000);                // Init second filter...

  CAN0.init_Mask(1,0x90FF0000);                // Init second mask...
  CAN0.init_Filt(2,0x90DA0000);                // Init third filter...
  CAN0.init_Filt(3,0x90DB0000);                // Init fouth filter...
  CAN0.init_Filt(4,0x90DA0000);                // Init fifth filter...
  CAN0.init_Filt(5,0x90DB0000);                // Init sixth filter...
#endif

  CAN0.setMode(MCP_NORMAL);                      // Set operation mode to normal so the MCP2515 sends acks to received data.
// CAN0.setMode(MCP_LOOPBACK);

  // Having problems?  ======================================================
  // If you are not receiving any messages, uncomment the setMode line below
  // to test the wiring between the Ardunio and the protocol controller.
  // The message that this sketch sends should be instantly received.
  // ========================================================================
  //CAN0.setMode(MCP_LOOPBACK);

  pinMode(CAN0_INT, INPUT);                          // Configuring pin for /INT input

  Serial.println("Simple CAN OBD-II PID Request");
}

void loop(){

  if(!digitalRead(CAN0_INT)){                         // If CAN0_INT pin is low, read receive buffer

    CAN0.readMsgBuf(&rxID, &dlc, rxBuf);             // Get CAN data
  
    // Display received CAN data as we receive it.
    if((rxID & 0x80000000) == 0x80000000)     // Determine if ID is standard (11 bits) or extended (29 bits)
      sprintf(msgString, "Extended ID: 0x%.8lX  DLC: %1d  Data:", (rxID & 0x1FFFFFFF), dlc);
    else
      sprintf(msgString, "Standard ID: 0x%.3lX       DLC: %1d  Data:", rxID, dlc);

    Serial.print(msgString);

    if((rxID & 0x40000000) == 0x40000000){    // Determine if message is a remote request frame.
      sprintf(msgString, " REMOTE REQUEST FRAME");
      Serial.print(msgString);
    } else {
      for(byte i = 0; i<dlc; i++){
        sprintf(msgString, " 0x%.2X", rxBuf[i]);
        Serial.print(msgString);
      }
    }
      
    Serial.println();
  }

  /* Every 1000ms (One Second) send a request for PID 00           *
   * This PID responds back with 4 data bytes indicating the PIDs  *
   * between 0x01 and 0x20 that are supported by the vehicle.      */
  if((millis() - prevTx) >= invlTx){
    prevTx = millis();
    if(CAN0.sendMsgBuf(FUNCTIONAL_ID, 8, txData) == CAN_OK){
      Serial.println("Message Sent Successfully!");
    } else {
      Serial.println("Error Sending Message...");
    }
  }
}

Hier die Ausgabe im Terminal:

Code:
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
Message Sent Successfully!
Standard ID: 0x7E8       DLC: 8  Data: 0x06 0x41 0x00 0xBF 0xFF 0xE8 0x93 0x00
Standard ID: 0x7E9       DLC: 8  Data: 0x06 0x41 0x00 0x98 0x18 0x00 0x01 0xAA
Message Sent Successfully!
Standard ID: 0x7E9       DLC: 8  Data: 0x06 0x41 0x00 0x98 0x18 0x00 0x01 0xAA
Standard ID: 0x7E8       DLC: 8  Data: 0x06 0x41 0x00 0xBF 0xFF 0xE8 0x93 0x00
Message Sent Successfully!
Standard ID: 0x7E8       DLC: 8  Data: 0x06 0x41 0x00 0xBF

Ich wollte gerne die ID´s für die Lenkradfernbedienung herausfinden aber was scheint schon beim Beispiel code nicht richtig zu klappen ?!

Hat jemand von euch Erfahrung mit Can Bus an Fahrzeugen ?

Gruß Marc Wink

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.10.2017, 19:05
Beitrag #2
RE: Aptotec V1.2 Can Bus Shield / Auto
Wieso gibt es keine gemeinsame GND-Verbindung? Wie sollen da Spannungen (= Potentialdifferenzen zu einem gemeinsamen Bezugspotential) ausgewertet werden?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.10.2017, 19:31
Beitrag #3
Question RE: Aptotec V1.2 Can Bus Shield / Auto
Das dachte ich mir auch deswegen habe ich das ganze auch mal mit einer GND Verbindung versucht war dann das selbe Ergebnis.

Gruß Marc

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.10.2017, 19:40 (Dieser Beitrag wurde zuletzt bearbeitet: 11.10.2017 19:41 von Tommy56.)
Beitrag #4
RE: Aptotec V1.2 Can Bus Shield / Auto
(11.10.2017 19:31)Marc2014 schrieb:  Das dachte ich mir auch deswegen habe ich das ganze auch mal mit einer GND Verbindung versucht war dann das selbe Ergebnis.

Gruß Marc
Wenn eine Änderung nicht zum Erfolg führt kann sie einerseits falsch sein oder es gibt noch weitere Fehler.
Schau Dir doch mal ein paar Grundlagen der Elektrotechnik an, um die GND-Problematik zu verstehen.

Wie versorgst Du die Elektronik? Das elektische Netz eines Autos ist grauenhaft mit Störungen versucht.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.10.2017, 05:56
Beitrag #5
RE: Aptotec V1.2 Can Bus Shield / Auto
Hey Tommy

Danke für deine Antwort Wink

Ich bin selbst im Elektronik Bereich mir ist schon klar das man generell einen gemeinsamen massepunkt braucht. Ich bin aber was can bus im kfz bereich angeht absolut nicht bewandert. Ich dachte evtl. hat dieser can bus keine gemeinsame masse.

Der Arduino hing am Mac Book also 5v über USB dann das Can shield aufgesteckt und die can high / can low über die Schraubklemmen am Shield zum obd 2 anschluss wie gesagt mal mit masse getestet und mal ohne. Das Ergebnis war immer gleich. Werde heute mal den Arduino extern mit Spannung versorgen um zu sehen ob er dann gleichmäsiger sendet oder trotzdem noch die send error meldungen schmeist.

Primär ging es mir um Erfahrungen von euch und Tipps in der Hinsicht auf mein Projekt die Lenkrad Fernbedienung auszulesen. Man könnte das ja auch für mein Verständnis so realisieren das man zb eine Standart ID / PId abfragt zb drehzahl dann verstehe ich hoffentlich das Filtern und kann es dann auch auf andere Signale anwenden.

Würde mich über Hilfe und Tipps freuen Smile leider gibt es was die can bus shields angeht sehr wenig information und projekte im netz. Ich würde auch ein anderes shield testen wenn jemand gute erfahrungen damit hatte. Gruß Marc

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.10.2017, 09:17
Beitrag #6
RE: Aptotec V1.2 Can Bus Shield / Auto
Wie kommst du auf die Idee das die Lenkradsignale im OBD CAN zu finden sind?

Mit Mercedes kenne ich mich etwas aus, dort werden z. B. die Lenkradbefehle nicht direkt in das CAN gesendet. Diese werden via LiN zum Mantelrohrmodul geleitet, verarbeitet, dann ins CAN B Innenraum usw.. Alle CAN (Innenraum, Motor, Getriebe usw.) "treffen" sich im ZGW und dieses gibt dann die benötigten oder angeforderten Signale über CAN OBD aus.
Dies stellt einen groben Abriss eines MB Netzwerkes dar, da ich noch nicht die Möglichkeit hatte mir die Pläne vom W204 anzusehen.

Ein möglicher Lösungsansatz für die C-Klasse, gehe an einen der CAN Innenraumverteiler oder Radio/APS/COMAND Stecker, dort sollten die Lenkradbefehle vorliegen.

Bevor die Frage(n) kommt, ich bin nicht bei Daimler beschäftigt und habe leider auch keine genauen Protokoll- oder Befehlspläne. Was ich habe sind alle Anschluss- und Installationspläne.

Wenn du Erfolg hast, wäre ich sehr an der Lösung interessiert, da ich an meinem 212er auch gerne ein paar Sachen auslesen würde, aber ich bin programmiertechnisch noch lange nicht so weit um mich an solche Aufgaben zu wagen.

Gruß und viel Erfolg

MiReu

Wer nix macht, macht nix falsch, lernt aber auch nix.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.10.2017, 11:17 (Dieser Beitrag wurde zuletzt bearbeitet: 12.10.2017 11:19 von Marc2014.)
Beitrag #7
RE: Aptotec V1.2 Can Bus Shield / Auto
Danke MiReu

Achso stimmt ja die Lenkradbefehle haben ja nichts im OBD 2 port zu suchen. Eigentlich logisch aber ich war so auf die Lösung fixiert das ich das völlig übersehen habe.

Danke für deine Tipps. Falls du einen Plan zum w204 hast könntest du diesen per PN an mich senden? Ich geb dir auch bescheid sobald ich erfolg habe.

Wer weis evtl kann mir ja auch jemand im Forum weiterhelfen bei meinem versuch diverse id s herraus zu filtern weil auf dem can werden ja ständig eine menge von daten gesendet so das man nur eine chance hat wenn man genau das filtert was man auch sucht oder liege ich da falsch ?

Gruß Marc

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.10.2017, 13:21
Beitrag #8
RE: Aptotec V1.2 Can Bus Shield / Auto
Hi Marc,

schick mir mal die FIN vom 204er und deine E-Mail Adresse. Es ist nämlich nicht mit einer PDF getan (211er, nur Anschlusspläne, mehr als 350 Stück, nur mal so bemerkt Wink )

Die FIN brauche ich, da Daimler alle drei Monate Änderungen an den Fahrzeugen vornimmt. Auch weiß ich dann welche Ausstattung, wann vom Band gelaufen usw.. Wenn du Angst hast, ich könnte/würde mit den Daten etwas anfangen was nicht in deinem Interesse ist, dann kann ich leider nicht helfen. Ich habe schon so viele Probleme bei Fahrzeugen ohne FIN gehabt, das ich mir gesagt habe "keine FIN, keine Infos".

Gruß

MiReu

Für die, die nicht wissen was FIN ist:
Fahrzeug-Identifikations-Nummer oder auch Fahrgestellnummer

Wer nix macht, macht nix falsch, lernt aber auch nix.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Mega 2560 + USB Host Shield + USB-Stick Cospieler 4 449 19.09.2018 11:17
Letzter Beitrag: Tommy56
  Leonardo macht keinen Auto-Reset (je nach Sketch) SebastianM 5 396 01.09.2018 07:49
Letzter Beitrag: amithlon
  2,8" Touchscreen Display Shield - so gehts avoid 4 1.284 09.07.2018 11:15
Letzter Beitrag: Harry Hirsch
  MP3 VS1053 shield Geeros#18 11 1.011 15.04.2018 13:37
Letzter Beitrag: hotsystems
  Arduino Mega mit Shield und 7" Touch Tudorf 10 1.533 25.02.2018 14:30
Letzter Beitrag: Tommy56
  [gelöst] Micro SD-Card Shield an ISP? torsten_156 1 470 08.02.2018 22:24
Letzter Beitrag: Tommy56
  Motor Shield V3 Analog Digital Converter Nextero 5 932 19.12.2017 10:54
Letzter Beitrag: Nextero
  Kommunikation über das WiFi-Shield Flap 13 2.504 12.09.2017 22:12
Letzter Beitrag: Flap
  Programmierung von PCa9685 Shield im Bezug auf Arduinos Crazydiver 5 1.256 10.04.2017 12:20
Letzter Beitrag: hotsystems
  Can-Bus Shield ok, aber keine Daten Clubsport 54 8.721 02.04.2017 22:28
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste