Autor |
Nachricht |
zndpp
CAN Hacker seit: 03.03.2017 Beiträge: 1 Karma: +0 / -0
Kostenloser Account, kein CAN Entwicklungs-Support
|
28-07-2017, 17:15 Titel: Arduino - Can Bus Shield |
|
|
Hallo zusammen,
kurz zu meiner Person: Heiße Michael, bin 22 Jahre alt und studiere Maschinenbau. Bin Hobbyelektroniker und benötige eure Hilfe.
Zu meinem Vorhaben: Ich habe einen Audi A3 8P (Baujahr 2011). In diesen möchte ich mir einen Car PC bauen. Über das Konzept habe ich mir schon einige Gedanken gemacht. Nur habe ich dabei das Problem, dass ich meine Lenkradfernbedienung erhalten möchte (also das Multifunktionslenkrad). Ich habe mich dazu in der Vergangenheit bereits schon etwas informiert wie die Ansteuerung des Radios funktioniert und habe mir daraufhin einen Arduino mit dem Can Bus Shield von Seeed zugelegt. http://wiki.seeed.cc/CAN-BUS_Shield_V1.2/
Der Ablauf meines Projekts war jetzt so geplant, dass ich erstmal meinen Can Bus auswerte, und mir ein Programm (für den Arduino) schreibe, welches mir zunächst die wichtigen Werte raus filtert (lauter, leiser, Titel vor und zurück...) und dann über USB an meinen PC "Werte" sendet. Dort wollte ich mir dann nochmal ein kleines Programm schreiben, welches die "Werte" auswertet und dann intern im Windows lauter und leiser dreht. Sobald dann Softwareseitig alles stehen sollte, wollte ich Hardware kaufen (Bildschirm und PC) und alles fertig zusammenbauen und Spaß haben.
Nun zu meinem Problem: Ich schaffe es einfach nicht, mir die Can Codes anzeigen zu lassen. Dabei muss ich anmerken, dass ich definitiv kein Programmierprofi bin und meine Kunstwerke auf Trial & Error beruhen. Zum Auslesen habe ich bis jetzt einen Beispielcode von Seeed verwendet, nur damit ich mal was in der Hand habe. Den Code hab ich unten mal angehängt. Kann leider nicht sagen, ob dieser grundsätzlich geeignet ist. Verkabelungsfehler schließe ich aus. Hab das Can High und Low vom Radio Stecker abgegriffen und mit dem Oszi bekomm ich auch ein Signal.
Wenn jemand vielleicht drüber schauen könnte um mir womöglich die Augen zu öffnen, wäre ich sehr dankbar (ich persönlich vermute ja sehr schwer einen Fehler im Code).
Viele Grüße
Michael
Code: | // 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
*********************************************************************************************************/ | [/url] |
|
Nach oben |
|
|
postmann CAN-Profi
CAN Hacker seit: 23.05.2013 Beiträge: 138 Karma: +59 / -0
CAN Support
|
28-07-2017, 20:10 Titel: Arduino - Can Bus Shield |
|
|
Falsche Baudrate. Du hast bei dir einen CAN mit 500 kBd eingestellt, meines Wissen läuft der Komfort CAN bei 8p aber mit 200 kBd. |
|
Nach oben |
|
|
Ulli13
CAN Hacker seit: 08.10.2012 Beiträge: 27 Karma: +19 / -0 Wohnort: Senden 2018 Audi A4 Avant CAN Support
CAN-Diagnose gefällt das. |
29-08-2017, 22:11 Titel: Komfortcan |
|
|
Hallo Michael,
bei meinem A4 8k läuft der Komfortcan mit 100kBit/s.
Habe meinen A4 einen Arduino erfolgreich am Motorcan (500kBit/s) drangehängt,
kann dort Daten auslesen, Relais nach signalen schalten und Diagnose anfragen an Motor senden und auswerten.
Wichtig ist bei den Canshield Masken zu setzen und nur die Ids die man benötigt durchzulassen. Der Arduino ist sonst heillos überfordert.
Bei Diagnose mit ID 7E0 und 7E8 kamen nie die Ids zum Arduino durch wegen der niedrigen Prios. Nach den Masken setzen läuft es super und zuverlässig.
Ach ja mein Canshield hatte nur 8MGhz Quarz, in der Config so gesetzt ging es. Auf 0x10B läuft mein ACC Hebel, kann damit die Relais schalten:
if(rxId == 0x10B) // Abfrage ob ACC Schalter gedrückt
{
if(bitRead(rxBuf[2],1)==1) // 2. Bit gesetzt Set ACC
{digitalWrite(Relais3, LOW);} else {digitalWrite(Relais3, HIGH);}
if(bitRead(rxBuf[2],2)==1) // 3. Bit gesetzt beschleunigen
{digitalWrite(Relais4, LOW);} else {digitalWrite(Relais4, HIGH);}
} // Ende if rx 0x10B
Beispiel für meine Filter: IDs mit 0x10B, 3C0, 640, 6B4, 6B7, 7E8 lasse ich durch
// Initialize MCP2515 running at 8MHz with a baudrate of 500kb/s and the masks and filters enabled.
if(CAN0.begin(MCP_STD, CAN_500KBPS, MCP_8MHZ) == CAN_OK) // if(CAN_OK == CAN.begin(CAN_500KBPS))
{Serial.println("MCP2515 Initialized Successfully!");
lcd1.setCursor(0,0);lcd1.print("Motor 500kB Ok");delay(1000);}
else
{Serial.println("Error Initializing MCP2515...");}
CAN0.init_Mask(0,0,0x07FF0000); // Init first mask alle sperren...
CAN0.init_Filt(0,0,0x06400000); // Init first filter 0x640 Sensoren
CAN0.init_Filt(1,0,0x06B70000); // Init second filter 0x6B7 Tank
CAN0.init_Mask(1,0,0x07FF0000); // Init second mask...
CAN0.init_Filt(2,0,0x07E80000); // Init third filter MR Diag rx
CAN0.init_Filt(3,0,0x06B40000); // Init fouth filter. FIN
CAN0.init_Filt(4,0,0x010B0000); // Init fifth filter ACC Hebel
CAN0.init_Filt(5,0,0x03C00000); // Init fifth filter Key Status 0x16 1 = Key on 7 =Zündung an
Lenkradtasten am 8k laufen auf 0x66A Lenkwinkel auf 0x525 und die Hebel auf 0x3C2
mfG Ulli Audi A4 B9 Bj 2018 |
|
Nach oben |
|
|
|