Forum: Mikrocontroller und Digitale Elektronik CAN: SID, Filter und Maske


von Joachim .. (joachim_01)


Lesenswert?

Hab hier aufm Steckbrett zwei PICs die fleißig Daten hin und 
herschieben, d.h. die SIDs (Standard-Identifizierer) werden richtig 
erkannt, bei falscher SID bleibt der Empfangspuffer leer bzw der alte 
Inhalt wird nicht aktualisiert (es ist schön wenn Dinge funktionieren 
wie sie sollen ;-).

Was aber hat es mit Akzeptanz-Maske + Filter auf sich, wenn die 
Kommunikation über die SIDs (vollständig?) gesteuert ist? Im Datenblatt, 
das an dieser Stelle wohl eher als eine Referenz zu den Registern zu 
sehen ist und keine tiefere Erklärung liefert, finde ich nichts.

von (prx) A. K. (prx)


Lesenswert?

Wenn du einen CAN Controller dazu bringen willst, nicht nur auf ein paar 
wenige einzelne SIDs zu reagieren, sondern auf ein Bündel davon, dann 
kannst du mit der Maske jene Bits ausmaskieren, die für den Vergleich 
nicht relevant sind.

Ansonsten gehört es leider zur Standardprozedur von Forenteilnehmern, 
nicht den Typ zu verraten, um den es geht. Aber auch bei den PICs gibts 
verschiedene CAN Module.

von Joachim .. (joachim_01)


Lesenswert?

Ich mache mit CAN gerade meine ersten Gehversuche, ich hab das 
zurückgehalten, weil ich es nicht für wichtig hielt. Sind zwei 18F458 
mit MCP2551.


>nicht nur auf ein paar wenige einzelne SIDs zu reagieren, sondern auf ein >Bündel 
davon
Warum sollte man das haben wollen? Ist eine einzelne SID (SID = 
Adresse?) nicht besser als mehrere, was zur Verwirrung führen könnte? 
Oder seh ich das falsch und es steckt mehr dahinter?

von Mr.T (Gast)


Lesenswert?

Joachim ... schrieb:

> Oder seh ich das falsch und es steckt mehr dahinter?
Ja und ja.

Der Identifier soll den Botschaftstyp beschreiben, nicht unbedingt die 
Adresse des adressierten Teilnehmers. Sonst musst Du ja unterschiedliche 
Botschaftstypen in der Payload verklausulieren und verschenkst damit 
Bandbreite.

von Joachim (Gast)


Lesenswert?

>Der Identifier soll den Botschaftstyp beschreiben,
Aber ist der Identifizierer denn nicht eindeutig? Oder hat das nichts 
damit zu tun?


Muß ich wirklich erst die CAN-Referenz von Bosch lesen um die 
Zusammenhänge zu verstehen?

von (prx) A. K. (prx)


Lesenswert?

Die IDs adressieren nicht explizit einen bestimmten Controller, sondern 
definieren eine Botschaft oder einen Zustand. Also sowas wie "Lampe an". 
Welcher Controller sich für Lampen zuständig fühlt, der hört dann 
darauf.

Nun kann es aber sein, dass ein Controller sich für mehr Botschaften 
zuständig fühlt, als er einzelne IDs matchen kann. Sinnvollerweise 
stehen diese Botschaften dann in einem Block, der mit einem ID/Mask-Paar 
durch binäres maskieren identifiziert werden kann.

Wenn das CAN-Netz langsam oder darin generell wenig los ist, dann ist 
kann man sich das allerdings ggf. auch sparen und ohne ID-Erkennung 
seitens des CAN-Controllers arbeiten.

von Mr.T (Gast)


Lesenswert?

Joachim schrieb:

> Muß ich wirklich erst die CAN-Referenz von Bosch lesen um die
> Zusammenhänge zu verstehen?
Das musst Du schon selbst wissen - bei mir hat Brain V1.0 gereicht.

von Bronco (Gast)


Lesenswert?

Du kannst mit der Maske z.B. definieren, daß in den Empfangspuffer 4 
alle Messages mit ID 0x1000 bis 0x100F gehen.
Dieser Puffer würde also die Messages mit ID 0x1000, 0x1001, 
0x1002...0x100F akzeptieren.
Wenn Du das machst, muß natürlich sichergestellt sein, daß zwischen zwei 
Messages, die in diesen Puffer gehen, genug Zeit ist, damit Du die erste 
rechtzeitig herausholen kannst, bevor die zweite kommt.

Wie A.K. schon sagt:
Eine Message geht nicht zwangsläufig an nur einen bestimmten Teilnehmer.
Es ist oft eher so:
Ein Gerät schickt unaufgefordert zyklisch eine Information (z.B. 
Temperatur von Sensor X) mit einer vorher festgelegten Message-ID weg, 
und jeder andere CAN-Teilnehmer kann selbst entscheiden, ob er diese 
Information haben will oder nicht.

von Joachim (Gast)


Lesenswert?

Dann hab ich wohl das Konzept bis jetzt falsch verstanden. Danke an die 
Helfer.

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.