mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie MCP2515 CAN Filter und Mask richtig einstellen?


Autor: Oliver S. (os252)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe ein Projekt, in dem ich 2 AVR Mega8 über CAN kommunizieren 
lassen möchte.
Dazu habe ich die beiden Controller mit jeweils einem MCP2515 und einem 
MCP2551 ausgestattet.

Die Kommunikation läuft nun soweit auch, dank der CAN-Libary von 
kreatives-chaos.com

Nun möchte ich diese aber gerne auch so konfigurieren können das man 
verschiedene Platinen über den gleichen Bus kommunizieren lassen kann.
Dazu sollte ein Filter und eine Mask gesetzt werden.

Nun habe ich dieses mit folgendem Code gemacht:
  
// create a new filter for receiving all messages
can_filter_t filter = {
  .id = 0x1,
  .mask = 0x7ff,
  .flags = {
    .rtr = 0,
  }
};
  
//Filter aktivieren
can_set_filter(0, &filter);

Dieses funktioniert aber leider nicht. Es kommen immer noch alle 
Nachrichten an.
Nun wollte ich fragen wie sich das mit den 5 Filtern verhält, die 
gesetzt werden können. Muss man die restlichen Filter dazu so setzen das 
dort nichts mehr durchgelassen wird oder kann man diese auch 
deaktivieren?
Dazu habe ich leider im Datenblatt nichts gefunden.

Wäre nett wenn mir jemand eventuell auch nen Beispielcode zum MCP2515 
geben könnte.

Ich verwende nicht die Extended ID, sondern die normale, 11 Bit lange ID
.
MFG Olli

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

müsste soweit funktionieren (soweit das auch die CAN-Lib tut, was ich 
annehme).

Vielleicht musst du noch die RXM Bits in RXB0CTRL od. RXB1CTRL setzen, 
wenn das die Lib nicht automatisch mit can_set_filter() macht. Die 
definieren nämlich, ob die Filter überhaupt wirksam sind.

Nachtrag: ob die anderen Filter von der Lib zurückgesetzt werden, weiß 
ich auch nicht; jedenfalls sind dort laut Datenblatt undefinierte Werte 
drin, d.h. die könnten auch (bei deiner Maske und 11-bit IDs nur bei 
einer speziellen ID) auslösen. Welcher Filter ausgelöst hat, steht in 
den FILHIT Bits in RXB0CTRL od. RXB1CTRL.

Gruß
David

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
// create a new filter for receiving all messages
can_filter_t filter = {
  .id = 0x1,
  .mask = 0x7ff,
  .flags = {
    .rtr = 0,
  }
};

>Dieses funktioniert aber leider nicht. Es kommen immer noch alle
>Nachrichten an.

Genau das steht ja auch oben im Kommentar;)

Du hast in der mask alle 11 Bits gesetzt. Also bekommst
du auch alle Messages. Du musst die mask halt so setzen
dass du nur die gewünschten Messages bekommst.

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
> Genau das steht ja auch oben im Kommentar;)

Mag wohl so sein.

> Du hast in der mask alle 11 Bits gesetzt. Also bekommst
> du auch alle Messages. Du musst die mask halt so setzen
> dass du nur die gewünschten Messages bekommst.

Stimmt nicht, siehe Table 4-2 im Datenblatt, Seite 32. Filterbits zählen 
dort, wo Maskenbits 1 sind.

Gruß
David

Autor: Oliver S. (os252)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@holger:
Ja der Kommentar stammt leider noch aus der Testzeit, in der auf jeden 
Fall alle Nachrichten ankommen sollten.

MFG Olli

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.