CAN-BUS MCP_CAN Mask und Filter setzen Teil II

ich habe den obigen Thread hier gefunden aber ich werde weder draus schlau noch bekomme ich es hin die Nachricht 0x280 (Die im Seriellen Monitor der Ardunio IDE u.a. sehe) zu filter.

Ich möchte auf dem TFT Display die Drehzahl zum Beispiel des Autos darstellen. Frage: wie mache ich das ? Ich bin das ganze Wochenende dabei gewesen, über viele Stunden das hinzubekommen. Ich schaffe es nicht.

Mein Code

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

long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];

MCP_CAN CAN0(5); // Set CS to pin 10

void setup()
{
Serial.begin(115200);
if(CAN0.begin(MCP_STD, CAN_500KBPS, MCP_8MHZ) == CAN_OK) Serial.print("MCP2515 Init Okay!!\r\n");
else Serial.print("MCP2515 Init Failed!!\r\n");
pinMode(34, INPUT); // Setting pin 2 for /INT input

CAN0.init_Mask(0,0,0x07FF); // Init first mask...
CAN0.init_Filt(0,0,0x280); // Init first filte
CAN0.init_Filt(0,0,0x288); // Init first filter...

CAN0.init_Mask(1,0,0x07FF); // Init second mask...
// CAN0.init_Filt(0,0,0x0288); // Init third filter...
// Init sixth filter...

Serial.println("MCP2515 Library Mask & Filter Example...");
CAN0.setMode(MCP_NORMAL);
}

void loop()
{
if(!digitalRead(34)) // 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();
}
}

Die Ausgabe im Arduino Seriellen Monitor:

D2 Data: 00 00 00 20 00 06 6B
ID: 2A0 Data: 00 00 00 00 00 00 30 30
ID: 4A0 Data: 00 00 00 00 00 00 00 00
ID: 2A0 Data: 00 00 00 00 00 00 40 40
ID: 4A0 Data: 00 00 00 00 00 00 00 00
ID: 2A0 Data: 00 00 00 00 00 00 50 50
ID: 4A0 Data: 00 00 00 00 00 00 00 00
ID: 2A0 Data: 00 00 00 00 00 00 60 60
ID: 4A0 Data: 00 00 00 00 00 00 00 00
ID: 2A0 Data: 00 00 00 00 00 00 70 70
ID: 4A0 Data: 00 00 00 00 00 00 00 00
ID: 2A0 Data: 00 00 00 00 00 00 80 80
ID: 4A0 Data: 00 00 00 00 00 00 00 00
ID: 2A0 Data: 00 00 00 00 00 00 90 90
ID: 4A0 Data: 00 00 00 00 00 00 00 00
ID: 2A0 Data: 00 00 00 00 00 00 A0 A0
ID: 4A0 Data: 00 00 00 00 00 00 00 00
ID: 2A0 Data: 00 00 00 00 00 00 B0 B0
ID: 4A0 Data: 00 00 00 00 00 00 00 00
ID: 2A0 Data: 00 00 00 00 00 00 C0 C0
ID: 4A0 Data: 00 00 00 00 00 00 00 00

Ich verstehe den Zusammenhang (trotz lesens im Internet u. im Code) nicht, wie ich

a) die FIlter setze.

b) wieso 2A0 und 4A0 dabei herauskommen.

c) Muss ich in meinem Fall überhaupt Filter setzen ?

d) wie kann ich mit (cansniffer) mit dem Arduino + mcp2515 Daten auslesen. Im Seriellen Monitor der Arduino IDE sehe ich die Can Nachrichten, in Savvy Can oder cansniffer in der bash, sehe ich gar nichts.

Wer kann mir helfen ? Ich komme absolut nicht weiter und es ist nur noch ein Rätsel raten.

You might bet better results if you follow the forum guidelines and post your code accordingly. Also a sketch of how things are connected would also help.

Möglicherweise erzielen Sie bessere Ergebnisse, wenn Sie die Forenrichtlinien befolgen und Ihren Code entsprechend veröffentlichen. Auch eine Skizze, wie die Dinge miteinander verbunden sind, wäre hilfreich.

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
mfg ein Moderator.

bitte ließ im Forum how to nach, wie man Code in Code Tags postet und editiere deinen Eingangspost entsprechend.

wenn du nicht filtern willst, brauchst du auch keine Fiter setzen.
Wonach möchtest du den filtern?
Warum setzt zu zweimal den ersten Filter? Aus welchem Beispiel hast du das?

Nach RPM. So steht´s im Eingangspost.

Mit der Maske definiert man die Bits, auf die geachtet werden sollen.
Mit dem Filter gibt man den entsprechenden Wert (die Werte) mit.
Hier hilft es oftmals sich die Werte Binär darstellen zu lassen (z.B. hier) und dann Filter und Maske übereinander zu legen.

Denke auch, Dir reicht eine Maske und ein Filter.

soweit klappt alles. ich habe jedoch eine andere Frage: es geht um den CanHacker. Ich kann mich verbinden und es wird dann einmal der Can bus ausgelesen, aber nicht aktualisiert. woran kann das liegen ? ich benutze einen ESP32 + mcp2515. in der Bibliothek habe ich 8Mhz eingetragen. INT habe ich an schiedenen Pins wie 34, 36, oder 39 gehabt, aber ohne Erfolg.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.