Forum: Mikrocontroller und Digitale Elektronik Frage zum Messagefilter des MCP2515 CAN Controllers


von Kevin M. (Gast)


Lesenswert?

Hallo an alle,
ich arbeite gerade daran die Messagefilter des MCP2515 so zu setzen, 
dass nur bestimmte Nachrichten ankommen. Das ganze ist mir durch das 
Datenblatt und die Suche hier im Forum auch schon gelungen, indem ich 
die einzelnen Maskbits bzw. die Filterbits des entsprechenden Filters 
setze.

Nun habe ich jedoch noch zwei Fragen auf die ich bis jetzt keine Antwort 
habe:

Frage 1: Ist es möglich die Bits in den Filtern und den Masken so zu 
setzen, dass keinerlei Nachrichten mehr empfangen werden? Aus der 
Tabelle im Datenblatt geht dazu nichts hervor.

Frage 2: Ich möchte nun noch eine Funktion schreiben mit denen ich eine 
bestimmte "Bandbreite" an Messages mit diesen ID´s empfange. Also 
beispielsweie alle Messages mit der ID von 0x011 bis 0x056 (Extended 
ID´s lasse ich erstmal außen vor). Ich bin jedoch noch nicht darauf 
gekommen, nach welchem Schema ich die Masken und Filterbits setzen muss, 
wenn ich eine größere Anzahl von ID´s von einer gegebenen unteren ID bis 
zu einer vorgegeben oberen ID empfangen möchte. Hat da vielleicht schon 
jemand Erfahrungen mit gemacht, oder diesbezüglich eine Idee? Sollte ja 
eigentlich ein gebräuchliches Anliegen an einen Messagefilter sein.

Ich wäre sehr dankbar wenn mir jemand weiterhelfen kann.
Gruß Kevin

von Karsandra (Gast)


Lesenswert?

Kevin M. schrieb:
> Also
> beispielsweie alle Messages mit der ID von 0x011 bis 0x056 (Extended
> ID´s lasse ich erstmal außen vor).

Moin, wie meinst Du das?

Sollen die IDs 11 bis 56 absolut nicht akzeptiert werden? Aber alle 
anderen?
0x10 -> Ja und 0x57 Ja aber 0x100011 bis 0x100056 nicht?

Dieses Maskenfilter kann man in GRENZEN als Gruppenfilter verwenden.

Wenn Du aber ganz konkrete Bereiche, die sich durch verschieden 
verwendete BItpositionen unterscheiden, wird das nur durch eine 
Software, die dann Laufzeit kostet, zu realisieren sein.

56 hex -> 0b01010110
11 hex -> 0b00010001

Ein gutes Beispiel sind die 56 und 11 hex. Die 56 hat auf Position 2°4 
eine Null und die 11 auf Position 2^0 eine Null. Damit die 11 die nicht 
akzeptiert weden würde, muß Du die 2^0 auf 1 Maskieren wohingegen das 
Tag-Register auf 0 ist. Damit eine 11hex von der Hardware abgelehnt 
werden wird.

Wenn Du die IDs von 1010 xxxx akzeptieren willst, dann setzt Du die 
Maskenbits von 2°0 bis 2^4 auf null.

Dann würde Botschaften 1010 0001 bis 1010 1111 alle akzeptiert werden.

Das Festlegen eines wahlfreien Bereiches mit Offset, wird die Hardware 
nicht unterstützen. Das mußt Du dann mit Software ergänzen.

Insofern ist das geschickte Auswählen von ID-Bereichen eine 
erforderliche Dispziplin im Umgang mit Maskenfilter.

Ich hoffe, dass mein Betrag Dir ein wenig weiterhilft.

von Kevin M. (Gast)


Lesenswert?

Schon mal vielen Danke für die Antwort.
Ich habe mich wohl auch ein bisschen schlecht ausgedrückt. Mit "Extended 
ID´s lasse ich erstmal außen vor" meinte ich, dass ich diese erstmal gar 
nicht behandle, also ich mich nur um die Filterung bei Standard ID´s 
kümmere.

Ich möchte praktisch eine Art Benutzereingabe realisieren, in welche der 
Nutzer eingeben kann: Ich möchte nur die ID´s von beispielsweise 0x11 
bis 0x56 empfangen und diese damit durch den Filter lassen. Dazu suche 
ich gerade nach einem passenden Algorithmus, der mir diese "Bandbreite" 
an zugelassenen ID´s in die passenden Bitfolgen für Bitmaske und 
Filtermaske des Messagefilters umwandelt.

>Wenn Du die IDs von 1010 xxxx akzeptieren willst, dann setzt Du die
>Maskenbits von 2°0 bis 2^4 auf null.
>
>Dann würde Botschaften 1010 0001 bis 1010 1111 alle akzeptiert werden.

So ähnlich habe ich mir das gedacht, aber wenn ich nun beispielsweise 
alle ID´s von 0x015 bis 0x025 zulassen möchte wäre das binär von

0b0001 0101
bis
0b0010 0101.

Wenn ich bei diesem Beispiel nur sage, Bit 7 und 8 müssen 0 sein, damit 
der Messagefilter die Nachricht durchlässt, wäre das ja nicht ganz 
korrekt und es würden noch andere ID´s zusätlich durchgelassen, 
beispielsweise 0b00111111. Die Berechnungen dazu wollte ich auf dem PC 
durchführen und die dort fertig ausgerechneten Masken und Filterbits an 
den MCP2515 schicken.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.