CANhack.de CAN interfaccia RKS+CAN
Hardware CAN, Software CAN, Protocolli CAN - Forum CAN-Bus per il tuo progetto CAN-Bus.

Arduino CAN Bus: Filtri PID e Controllo

 
Nuovo argomento Rispondi 🔗 🖨 CANhack.de - Indice » Microcontrollori ed elettronica, programmazione
Autore Messaggio
Tobi163



Iscritto il: 12/10/2017
Messaggi: 4
Karma: +0 / -0   Grazie, mi piace!


Account gratuito, nessun supporto sviluppo CAN

Messaggio12-10-2017, 15:33    Oggetto: Arduino CAN Bus: Filtri PID e Controllo Cita

Ciao a tutti i membri di Canhack, sono Tobi e non ho ancora molta esperienza con il CAN bus e argomenti correlati, ma trovo questo argomento molto interessante e, dato che mi piace anche lavorare con Arduino, volevo iniziare con un piccolo progetto.

Volevo utilizzare un modulo CAN bus shield e una scheda Arduino Uno per estrarre informazioni standard come il regime di giri/velocità dal mio vecchio BMW E46 e visualizzarle su un display LCD esterno.

Ho testato alcune librerie Arduino per l'area del CAN bus, ma purtroppo non ho ottenuto i risultati sperati.

La mia scheda CAN è il modello Aptotec V1.2 con il controller CAN MCP2515 e il transceiver CAN MCP2551.

Ho alimentato l'Arduino solo tramite USB al mio MacBook e ho collegato i segnali CAN High (pin 6) / CAN Low (pin 14) alle due morsettiere del modulo CAN. Ho rimosso la resistenza di terminazione opzionale.

Come ho detto, ho provato diversi codici, ma con il BMW non riesco a stabilire una connessione con l'auto, mentre con una Mercedes W204 di un amico la connessione viene stabilita e, in alcuni casi, il programma invia le richieste tramite il bus senza errori; tuttavia, si verificano comunque interruzioni della connessione.

Devo creare una connessione di massa comune tra il veicolo e l'Arduino, come si fa per tutte le altre interfacce elettriche (ad esempio, RS232), oppure sono necessari solo i due segnali, ovvero CAN H/L?

Ecco i miei tentativi e poi l'output seriale:

Codice:

// 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:

Codice:


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:

Codice:


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




Sarei molto felice se qualcuno potesse darmi dei consigli. Ho anche pensato di ordinare l'adattatore Can Hack da questo forum, ma quali sono esattamente le sue funzionalità? Potrei utilizzarlo, ad esempio, per ricavare i segnali degli alzacristalli o i comandi del volante?

Ciao Tobi.


Tradotto il 12-08-2026, 12:47.
Torna su Profilo MP
postmann
CAN-Profi
CAN-Profi


Iscritto il: 23/05/2013
Messaggi: 145
Karma: +64 / -0   Grazie, mi piace!


Supporto CAN

Messaggio12-10-2017, 20:48    Oggetto: Arduino CAN Bus: Filtri PID e Controllo Cita

Penso che tu abbia impostato la velocità di trasmissione errata. Sei sicuro di essere connesso a una rete da 500 kbps sulla tua BMW?


Tradotto il 12-08-2026, 12:47.
Torna su Profilo MP
Tobi163



Iscritto il: 12/10/2017
Messaggi: 4
Karma: +0 / -0   Grazie, mi piace!


Account gratuito, nessun supporto sviluppo CAN

Messaggio12-10-2017, 23:25    Oggetto: Arduino CAN Bus: Filtri PID e Controllo Cita

No, ho provato tutti i valori da 125 a 500. Sfortunatamente, nessun risultato?! Oppure potrebbe essere che sulla BMW E46 con OBD 2 si possano interrogare solo determinati parametri (PID), e per il mio scopo devo collegarmi direttamente al CAN bus, ad esempio alla centralina del PDC o a un componente simile?

Potrebbe qualcuno fornirmi informazioni sull'adattatore Can Hack?

Ciao Tobi.


Tradotto il 12-08-2026, 12:48.
Torna su Profilo MP
CAN-Diagnose
Administrator
Administrator
Avatar-CAN-Diagnose

Iscritto il: 07/06/2011
Messaggi: 573
Karma: +29 / -0   Grazie, mi piace!
Località: Ländle



Messaggio13-10-2017, 11:25    Oggetto: Arduino CAN Bus: Filtri PID e Controllo Cita

Ciao Tobi,

Potrebbe essere che nel tuo BMW, come in generale in tutti i modelli del gruppo VAG, il sistema trasmetta dati solo se riceve i messaggi corretti sul bus di diagnostica CAN.

Se vuoi "intercettare" i dati, il modo migliore è collegarsi direttamente al relativo bus CAN (ad esempio, quello dell'unità di trasmissione, del comfort, ecc.).
Citazione:

Qualcuno può fornirmi informazioni sull'adattatore Can Hack?

https://shop.dieselschrauber.de/can-usb-interface-kit-mit-rks-can-p-313.php

Cordiali saluti, Rainer.
Dipl.-Ing. (FH) Rainer Kaufmann - Embedded Software Freelancer
System RKS+CAN: CANHack.de CAN-Bus Interface


Tradotto il 12-08-2026, 12:50.
Torna su Profilo MP WWW
Tobi163



Iscritto il: 12/10/2017
Messaggi: 4
Karma: +0 / -0   Grazie, mi piace!


Account gratuito, nessun supporto sviluppo CAN

Messaggio14-10-2017, 12:15    Oggetto: Arduino CAN Bus: Filtri PID e Controllo Cita

Ciao Rainer,
Grazie per la tua risposta.

Ho trovato il problema. Sul pin 6/14 non è collegato assolutamente nulla.
Devo continuare i miei esperimenti relativi al bus CAN sulla mia altra auto.

Zum Can hack adapter: kann man diesen nicht einfach mit *halbseidener Zahlungsanbieter für unschlaue Menschen* bezahlen und zugeschickt bekommen ? Sarei interessato/a.
Nella descrizione si indica anche che è incluso un esempio di codice; questo codice è adatto per Arduino e simili, per l'invio di messaggi CAN?

Ciao Tobi.


Tradotto il 12-08-2026, 12:51.
Torna su Profilo MP
CAN-Diagnose
Administrator
Administrator
Avatar-CAN-Diagnose

Iscritto il: 07/06/2011
Messaggi: 573
Karma: +29 / -0   Grazie, mi piace!
Località: Ländle



Messaggio14-10-2017, 12:21    Oggetto: Arduino CAN Bus: Filtri PID e Controllo Cita

Ciao Tobi,

Se se le modalità di pagamento offerte nel negozio non le soddisfano, purtroppo non posso esserti d'aiuto; sono disponibili diverse opzioni, tutte elencate nella sezione "Modalità di pagamento".
Anche la domanda riguardante "codice di esempio per Arduino e simili" non è molto pertinente. Io non vendo Arduino, quindi perché dovrei scrivere codice di esempio per esso?

Mi stai prendendo in giro? E come immagini una corretta evoluzione del bus CAN della tua auto? Penso che non sia una buona idea inserire "qualsiasi" tipo di messaggio nei bus di controllo del tuo veicolo...

Saluti, Rainer.
Dipl.-Ing. (FH) Rainer Kaufmann - Embedded Software Freelancer
System RKS+CAN: CANHack.de CAN-Bus Interface


Tradotto il 12-08-2026, 12:53.
Torna su Profilo MP WWW
Tobi163



Iscritto il: 12/10/2017
Messaggi: 4
Karma: +0 / -0   Grazie, mi piace!


Account gratuito, nessun supporto sviluppo CAN

Messaggio14-10-2017, 14:31    Oggetto: Arduino CAN Bus: Filtri PID e Controllo Cita

Ciao Rainer,
Ho trascurato le altre modalità di pagamento. Anche la carta Visa è accettata.
L'adattatore e il software sono pensati per la diagnostica e per l'analisi dei messaggi del bus CAN, oppure mi sbaglio?

Non voglio fare interventi estremamente complessi sulla mia auto. E penso che nessuno nasca sapendo come funzionano le cose. Sono interessato al CAN bus e ad argomenti simili, e pensavo che un forum servisse per scambiare informazioni e aiutarsi a vicenda, o almeno così funziona in altri forum che conosco.

Il mio obiettivo sarebbe, ad esempio, quello di inviare messaggi propri sul CAN bus e visualizzarli nel quadro strumenti o controllare, ad esempio, gli alzacristalli.

Attualmente ho uno shield CAN bus con MCP2515 e Arduino. All'inizio ho cercato di ottenere dati semplicemente tramite l'interfaccia OBD 2, ma non funziona perché, come ho capito, vengono inviate risposte solo a PID specifici. Tuttavia, se mi collego direttamente al bus, ad esempio all'autoradio, dovrei ricevere dei messaggi, giusto? Oppure ho frainteso qualcosa?

Attualmente, ho collegato lo shield Arduino con il chip MCP2515 ai cavi del Command Radio (Mercedes) (bn/rt CAN H, br CAN L). Quando fornisco alimentazione all'Arduino e quindi allo shield tramite la porta USB, il mio quadro strumenti mostra messaggi errati. Tuttavia, nel monitor seriale dell'Arduino, non vengono ricevute alcuna messaggio dal bus CAN, ma viene visualizzato solo "CAN init OK".

Sono un principiante, questo è chiaro, ma apprezzerei molto ricevere consigli e risposte utili, invece di commenti del tipo "semplicemente lascia perdere", "non ne sai niente", eccetera. Questi commenti non sono costruttivi e non aiutano nessuno ad imparare.

Un'altra domanda: il bus CAN collegato al mio sistema Command dovrebbe servire solo per i contenuti multimediali, oppure mi sbaglio? Perché, come ho detto, ricevo informazioni confuse nel quadro strumenti, ad esempio, la spia delle luci abbaglianti è accesa e compare il simbolo giallo dell'airbag con l'indicazione "recarsi in officina". Se poi scollego l'Arduino e lo disconnetto e riconnetto, tutto torna normale.

Saluti, Tobi.


Tradotto il 12-08-2026, 12:58.
Torna su Profilo MP
postmann
CAN-Profi
CAN-Profi


Iscritto il: 23/05/2013
Messaggi: 145
Karma: +64 / -0   Grazie, mi piace!


Supporto CAN

Messaggio15-10-2017, 12:41    Oggetto: Arduino CAN Bus: Filtri PID e Controllo Cita

Le diverse reti presenti in un veicolo sono generalmente collegate tra loro tramite un gateway.

L'intero sistema di comunicazione è definito dalla topologia; quando si verifica un problema in una rete, questo spesso ha ripercussioni anche sulle altre reti.

In questo senso, devo concordare con Rainer: prima di inviare qualsiasi cosa (nemmeno una semplice conferma), cerca di capire la topologia e ascolta attentamente. Inoltre, inviare un frame nel veicolo non è così semplice, dato che il trasmettitore originale probabilmente non lo apprezzerebbe.


Tradotto il 12-08-2026, 12:59.
Torna su Profilo MP
Nuovo argomento Rispondi 🔗 🖨 CANhack.de - Indice » Microcontrollori ed elettronica, programmazione
Articoli e argomenti simili
Argomento Forum
Nessun nuovo messaggio Arduino - Shield per CAN bus Microcontrollori ed elettronica, programmazione
Nessun nuovo messaggio Arduino - Shield CAN Bus Adafruit Microcontrollori ed elettronica, programmazione
Nessun nuovo messaggio µC + 2x MCP2515 per filtraggio Microcontrollori ed elettronica, programmazione
Nessun nuovo messaggio Arduino e CAN Microcontrollori ed elettronica, programmazione
Vai a:  
Non puoi scrivere nuovi argomenti in questo forum.