Can bus filter

Gast #5349548
Lesenswert?

Hallo,

ich betreibe ein CAN- Bus Netzwerk mit CAN Standard Frames (2048 
identifiers).

Ich möchte nun einen Filter schreiben, welcher nur Pakete mit dem 
Identifier "0x003" und als ersten Datenbyte den Wert "0x01" annimmt.

Ich verwende einen Arduino mit der MCP 2515 Libary, dazu ein Beispiel 
der Filter: 
https://github.com/coryjfowler/MCP_CAN_lib/blob/master/examples/Standard_MaskFilter/Standard_MaskFilter.ino

Setze ich nur eine Mask, so werden trotzdem alle Pakete angenommen, 
setze ich beide Mask (muss ich immer beide setzen?), so werden gar keine 
mehr angenommen.

Code:
1
  _bus->init_Mask(0,0,0x0FFFFF00);                // Init first mask...
2
  _bus->init_Mask(1,0,0x0FFFFF00);                // Init second mask...
3
  _bus->init_Filt(0,1,0x00030100);                // Init first filter...

Auch bei folgenden Beispiel werden keine Pakete mehr mit dem Identifier 
0x003 angenommen:


Code:
1
  _bus->init_Mask(0,0,0x0FFF0000);                // Init first mask...
2
  _bus->init_Mask(1,0,0x0FFF0000);                // Init second mask...
3
  _bus->init_Filt(0,1,0x00030000);                // Init first filter...

Könnt ihr mir helfen?

Danke!
Gast #5349699
Lesenswert?

Christopher B. schrieb:
> Siehe hier
>
> https://github.com/coryjfowler/MCP_CAN_lib/blob/master/mcp_can.cpp#L600

Ok danke!

Ich kann es gerade nicht testen, aber sollte dieses hier rein 
theoretisch funktionieren oder gibts da einen Denkfehler:
1
  _bus->init_Mask(0,0,0x0FFFFF00);                // Init first mask...
2
  _bus->init_Mask(1,0,0x0FFFFF00);                // Init second mask...
3
  _bus->init_Filt(0,0,0x00030100);                // Init first filter...

Somit sollte ich nur Nachrichten mit dem Identifier 3 und dem ersten 
Datenbyte mit dem Wert bekommen?
Gast #5349709
Lesenswert?

Hab mich gerade noch eingelesen, müsste es zufällig so lauten;
1
  _bus->init_Mask(0,0,0x07FFFF00);                // Init first mask...
2
  _bus->init_Mask(1,0,0x07FFFF00);                // Init second mask...
3
  _bus->init_Filt(0,0,0x00030100);                // Init first filter...
Beitrag #5379150 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren