Forum: Mikrocontroller und Digitale Elektronik MCP2515 Filter und Maske


von Alex A. (Gast)


Lesenswert?

Hallo!
Kann mir, bitte, jemand erklären, wie ich filter und maske einstellen 
soll?
Und wo ist der Unterschied zwischen Filter und Maske?
Ich werde aus den Datenblatt irgendwie nicht ganz schlau.

So sieht meine Initiaizierung aus:
1
 Mcp2515_init:
2
3
'mcp2515 reset
4
 Mcphilf = Spi_reset
5
 Reset Css
6
   Waitus 10
7
   Spdr = Mcphilf
8
   Do
9
   Loop Until Spsr.spif = 1
10
   Waitus 10
11
 Set Css
12
13
 Mcp2515_write_register Cnf1 , &H03
14
 Mcp2515_write_register Cnf2 , &HBA
15
 Mcp2515_write_register Cnf3 , &H07
16
17
'Interrupt einstellen
18
 Mcp2515_write_register Caninte , &B00000001                'Interrupt auslosen, wenn Nachricht in buffer 0 liegt
19
 Mcp2515_write_register Canintf , &B00000000                'No interrupt pending
20
 Mcp2515_write_register Rxb0ctrl , &B00100000               'Empfange nur durch filter eingestelle Standart ID, Acceptance Filter 0 (RXB0)
21
22
'Maske
23
 Mcp2515_write_register Rxm0sidh , &B10111000               'Maske  High
24
 Mcp2515_write_register Rxm0sidl , &B01100000               'Maske  Low
25
26
'Filter
27
 Mcp2515_write_register Rxf0sidh , &B10111000               'Filter High
28
 Mcp2515_write_register Rxf0sidl , &B01100000               'Filter Low , bit 3 EXIDE Filter fuer Standart Frame
29
30
 Mcp2515_bitmodify Canctrl , &B11101000 , &B00001000        '???

Irgendwie funktioniert der Filter nicht, ich empfange alle Nachrichten.
Danke
Gruss Alex

von H.Joachim S. (crazyhorse)


Lesenswert?

Wenn du nicht am limit des MCs operierst, lies einfach alle ein und 
schmeiss nicht benötigte Botschaften. Du musst eh anhand der ID 
verzweigen, und wenn die ID nirgend passt -> Papierkorb.

von Alex A. (Gast)


Lesenswert?

Das sind aber viel zu viele IDs im Auto :)
Ich kann doch nicht jede Nachricht beim 1000kbps CAN, mit dem AVR 
Empfangen, dann ID vergleichen und wenn es nicht passt, wegschmeisen.
Ich brauche nur eine, höchstens 2 IDs.
Das ist doch übel :)
Desswegen macht es ja Sinn, dass der MCP das filtert.
Leider kriege ich das so nicht zum Laufen.

Ich teste das im Moment so:
Ich habe eine kleine Schaltung, die immer eine Can Nachricht schickt.
Die ID davon ist 1475.

Wenn ich den MCP so konfiguriere, dass er die ID 1475 empfangen soll, 
dass tut er das auch.
 Mcp2515_write_register Rxf0sidh , &B10111000
 Mcp2515_write_register Rxf0sidl , &B01100000
ID 1475 auf sidh und sidl verteilt.

Wenn ich aber ein Bit ändere:
 Mcp2515_write_register Rxf0sidh , &B1011100!1!
 Mcp2515_write_register Rxf0sidl , &B01100000
 dann ist im Filter schon eine andere ID (WENN ICH DAS RICHTIG 
VERSTANDEN HABE), dann empfange ich trotzdem die Nachricht mit der ID 
1475.

Und das kapiere ich halt nicht. Es muss was sein, dass ich vom Grund her 
nicht verstanden habe.
Desswegen auch die Fragen:
1. was ist Filter und was ist Maske? (einfach erklärt)
2. warum braucht man beides?

Bitte, auf den Datenblatt nicht verweisen, den habe ich schon sehr oft 
gelesen.

Danke
Gruss Alex

von Alex A. (Gast)


Lesenswert?

Fehler gefunden :)
Es muss so sein:

'Maske
 Mcp2515_write_register Rxm0sidh , &B11111111               'Maske  High
 Mcp2515_write_register Rxm0sidl , &B11100000               'Maske  Low


'Filter
 Mcp2515_write_register Rxf0sidh , &B10111000               'Filter High
 Mcp2515_write_register Rxf0sidl , &B01100000               'Filter Low 
, bit 3 EXIDE Filter fuer Standert Frame

Maske muss alles auf 1, damit der MCP jeden Bit der ankommenden ID prüft 
und mit der ID vom Filter vergleicht.
Habe die Tabelle im Datenblatt erstmal nicht verstanden, aber jetzt.

Danke an alle.

Gruss Alex

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.