CANhack.de CAN interfaccia RKS+CAN
Tecnica diesel, tecnica motori, diagnosi auto, riparazione e manutenzione.

Arduino - Shield per CAN bus

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



Iscritto il: 03/03/2017
Messaggi: 1
Karma: +0 / -0   Grazie, mi piace!


Account gratuito, nessun supporto sviluppo CAN

Messaggio28-07-2017, 18:15    Oggetto: Arduino - Shield per CAN bus Cita

Ciao a tutti,

Permettetemi di presentarmi brevemente: mi chiamo Michael, ho 22 anni e studio ingegneria meccanica. Sono un appassionato di elettronica e ho bisogno del vostro aiuto.

Ecco la traduzione:

"Per quanto riguarda il mio progetto: ho un'Audi A3 8P (modello del 2011) e vorrei installare un carputer. Ho già pensato a molti aspetti del progetto, ma ho un problema: vorrei mantenere funzionante il comando a volante (cioè il volante multifunzione)." Mi sono già informato in passato su come funziona l'interfaccia radio e, di conseguenza, ho acquistato un Arduino con lo scudo CAN Bus di Seeed.
Codice:
// demo: CAN-BUS Shield, receive data with check mode
// send data coming to fast, such as less than 10ms, you can use this way
// loovee, 2014-6-13


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


// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 9;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin

void setup()
{
    Serial.begin(115200);

    while (CAN_OK != CAN.begin(CAN_500KBPS))              // init can bus : baudrate = 500k
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    Serial.println("CAN BUS Shield init ok!");
}


void loop()
{
    unsigned char len = 0;
    unsigned char buf[8];

    if(CAN_MSGAVAIL == CAN.checkReceive())            // check if data coming
    {
        CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf

        unsigned int canId = CAN.getCanId();
       
        Serial.println("-----------------------------");
        Serial.print("Get data from ID: ");
        Serial.println(canId, HEX);

        for(int i = 0; i<len; i++)    // print the data
        {
            Serial.print(buf[i], HEX);
            Serial.print("\t");
        }
        Serial.println();
    }
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

Il mio progetto era pianificato in questo modo: innanzitutto, avrei dovuto analizzare il mio CAN bus e scrivere un programma (per l'Arduino) che mi permettesse di filtrare i valori importanti (volume alto, volume basso, titolo successivo, titolo precedente, ecc.) e poi inviarli al mio PC tramite USB. Sul PC, avrei poi dovuto scrivere un piccolo programma che analizzasse questi valori e regolasse internamente il volume all'interno di Windows. Non appena avrò completato tutto ciò che riguarda il software, vorrei acquistare l'hardware (monitor e computer) e assemblare tutto per poi divertirmi.

Ecco il mio problema: non riesco proprio a visualizzare i codici CAN. Devo precisare che non sono assolutamente un esperto di programmazione e che le mie creazioni si basano sul metodo del "prova e errore". Per la lettura, finora ho utilizzato un codice di esempio fornito da Seeed, solo per avere un punto di partenza. Ho allegato il codice qui sotto. Purtroppo, non posso dire se questo codice sia adatto in linea di principio. Escludo errori di cablaggio. Ho prelevato i segnali "high" e "low" dal connettore della radio e, utilizzando l'oscilloscopio, riesco a visualizzare un segnale.

Sarei molto grato se qualcuno potesse dare un'occhiata per aiutarmi a capire, magari individuando un errore nel codice (anche se personalmente non riesco a trovarne uno).


Cordiali saluti.
Michael.


[/url]http://wiki.seeed.cc/CAN-BUS_Shield_V1.2/
Torna su Profilo MP
postmann
CAN-Profi
CAN-Profi


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


Supporto CAN

Messaggio28-07-2017, 21:10    Oggetto: Arduino - Shield per CAN bus Cita

Velocità di trasmissione errata. Hai impostato un baud rate di 500 kBd sul tuo CAN, ma a quanto ne so, il CAN per i sistemi di comfort nelle auto con centralina 8P funziona a 200 kBd.
Torna su Profilo MP
Ulli13



Iscritto il: 08/10/2012
Messaggi: 27
Karma: +19 / -0   Grazie, mi piace!
Località: Senden
2018 Audi A4 Avant
Supporto CAN

CAN-Diagnose piace questo.
Messaggio29-08-2017, 23:11    Oggetto: Comfycan Cita

Ciao Michael,
Nel mio A4 8K, il modulo Comfort funziona a 100 kbit/s.

Ho collegato con successo un Arduino al bus CAN del mio A4 (500kBit/s).
Posso leggere dati, attivare relè in base ai segnali ricevuti, inviare richieste di diagnostica al motore e valutarne i risultati.
È importante configurare correttamente le maschere Canshield e consentire solo l'accesso agli ID necessari. L'Arduino, in altre situazioni, sarebbe completamente sopraffatto.
Con le diagnosi con gli ID 7E0 e 7E8, gli ID non sono mai stati trasmessi all'Arduino a causa delle basse priorità. Dopo l'applicazione delle mascherine, tutto funziona perfettamente e in modo affidabile.
Certo, il mio Canshield aveva solo un quarzo da 8 MHz, e con quella configurazione è andato bene. Sulla porta 0x10B si trova la leva del mio sistema di controllo della velocità di crociera (ACC), e posso usarla per attivare i relè.

if (rxId == 0x10B) // Verifica se il pulsante del cruise control è stato premuto.
text
{

if(bitRead(rxBuf[2],1)==1) // 2. Bit impostato. Imposta ACC.
italiano
{digitalWrite(Relais3, LOW);} else {digitalWrite(Relais3, HIGH);}
if(bitRead(rxBuf[2],2)==1) // 3. Bit impostato, accelerare.
{digitalWrite(Relais4, LOW);} else {digitalWrite(Relais4, HIGH);}

} // Fine del blocco if rx 0x10B

Esempio dei miei filtri: lascio passare gli ID con i valori 0x10B, 3C0, 640, 6B4, 6B7, 7E8.

italiano
// Inizializza il chip MCP2515, facendolo funzionare a 8MHz con un baudrate di 500kb/s e abilitando le maschere e i filtri.
italiano
if(CAN0.begin(MCP_STD, CAN_500KBPS, MCP_8MHZ) == CAN_OK) // if(CAN_OK == CAN.begin(CAN_500KBPS))
italiano
Serial.println("MCP2515 inizializzato correttamente!");
italiano
lcd1.setCursor(0,0); lcd1.print("Motore 500kB Ok"); delay(1000);
text
else
italiano
{Serial.println("Errore durante l'inizializzazione di MCP2515...");}
CAN0.init_Mask(0, 0, 0x07FF0000); // Inizializza la prima maschera per bloccare tutte le interruzioni...
CAN0.init_Filt(0, 0, 0x06400000); // Inizializza il primo filtro per sensori con ID 0x640.
CAN0.init_Filt(1, 0, 0x06B70000); // Inizializzazione del secondo filtro 0x6B7, serbatoio.

CAN0.init_Mask(1, 0, 0x07FF0000); // Inizializza la seconda maschera...
CAN0.init_Filt(2, 0, 0x07E80000); // Inizializzazione del terzo filtro, ricezione diagnostica MR.
CAN0.init_Filt(3, 0, 0x06B40000); // Inizializza il quarto filtro. FIN.
CAN0.init_Filt(4, 0, 0x010B0000); // Inizializzazione del quinto filtro, leva ACC.
CAN0.init_Filt(5, 0, 0x03C00000); // Inizializza il quinto filtro. Stato del tasto 0x16: 1 = tasto premuto, 7 = accensione.

I pulsanti del volante sul modello 8k sono gestiti dall'indirizzo 0x66A, l'angolo di sterzata dall'indirizzo 0x525 e le leve dall'indirizzo 0x3C2.

Cordiali saluti, Ulli.
Audi A4 B9 Bj 2018
Torna su Profilo MP Email Garage
Nuovo argomento Rispondi 🔗 🖨 CANhack.de - Indice » Microcontrollori ed elettronica, programmazione
Articoli e argomenti simili
Argomento Forum
Nessun nuovo messaggio Arduino - Adafruit CAN Bus Shield Microcontrollori ed elettronica, programmazione
Nessun nuovo messaggio Arduino + Can Bus Shield / PID Filtern Microcontrollori ed elettronica, programmazione
Nessun nuovo messaggio Arduino & CAN Microcontrollori ed elettronica, programmazione
Nessun nuovo messaggio Audi A4 S4 RS4 B5 FIS CAN Project mit Arduino CAN Abitacolo / Comfort
Vai a:  
Non puoi scrivere nuovi argomenti in questo forum.