AT90CAN128 Identifier filtern ?

Gast #2475449
Lesenswert?

Hallo,

Ich möchte den CAN-Bus auf verschiedene Identifier abfragen. Liegt auf 
dem CAN-Bus eine Message mit einem der gefragten Identifer, soll eine 
bestimme Aktion passieren. So ist die Aufgabenstellung.
Die Identifier sind 0x1000 und 0x2010, 0x2011,..., 0x2019, 0x2020.

Die Frage ist, in Datenblättern und im Internet ist immer von einem 11 
bit Identifier die Rede, also z.B. 0x317. Meine Vorgabe ist aber 
vierstellig. Woher kommt das ? 11 bit 16 bit ?

Und wie lege ich die Register IDM und IDTag fest. Ich habe einfach mal 
mit 16 bit weitergemacht, wobei ich glaube, das das nicht richtig ist.

Für die Filterung habe ich mal folgendes überlegt:
1
ID 0x1000
2
IDMask 1111 1111 1111 1111
3
ID Tag 0001 0000 0000 0000
4

5

6
ID 0x2010 - 0x2017
7
IDMask 1111 1111 1111 1000
8
ID Tag 0010 0000 0000 0XXX
9

10

11
ID 0x2018 - 0x2019
12
IDMask 1111 1111 1111 1110
13
ID Tag 0010 0000 0000 100X
14

15

16
ID 0x2020
17
IDMask 1111 1111 1111 1111
18
ID Tag 0010 0000 0000 0010

Meine Idee:
Aufgeteilt in die 4 Bereiche, frägt man dann immer die einzelnen 
Bereiche in einer Schleife ab.

Oder gibt es einen anderen Weg, wie ich diese Identifier leichter 
filtern kann ?

Oder wie kommt man von den 16 bit zu 11 bit ?
Gast #2487033
Lesenswert?

Ich glaube Du hast da was mit dem CAN-Standard nicht ganz richtig 
verstanden.

Die 11-Bits ermöglichen einen Bereich von 0 - 7FF hex als CAN-Identifier 
und entsprechen der CAN-Spezifikation 2.0A

Wenn Du mehr willst , dann mußt Du die 29-Bit-Variante verwenden und die 
nicht erforderlichen Bits ungenutzt lassen.
Du müßtest dann jeweils die Register CANIDMSK 1 - 3 benutzen.

Prinzipiell sehe ich nicht, warum Dein Vorhaben nicht programmierbar 
sein sollte. Dir stehen schließlich 15 Messageboxen zur Verfügung.

Du hast jedoch nur einen CAN-Interruptvektor. Darin mußt Du alles 
unterbringen. In Deinem Fall also das Identifizieren, welche Mail-Box 
den Auslösegrund geliefert hat.
Wenn die Daten Dich nicht interessieren, brauchst Du nur das Flag der 
MOb löschen und alles ist gut.

Ich hoffe, Dir hilft das weiter

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