mikrocontroller.net

Forum: Compiler & IDEs Erfahrung bei der Adressierung eines CAN Bus


Autor: Daniel Düsentrieb (duesentrieb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe mir einen CAN Bus mit mehreren Knoten auf Basis Mega8-MCP2515 
augebaut.
Die Übertragung auf dem Bus funktioniert auch ohne weiteres.
Allerdings habe ich Probleme was die Adressierung angeht.
Meine Daten werden z.Zt. von jedem Knoten angenommen was so nicht sein 
soll.
Mittels Filter und Maske kann man festlegen dass nur bestimmte 
Nachrichten beim Knoten verarbeitet werden.
Leider komme ich damit nicht zurecht.

Wer hat Erfahrung in der Programmierung von Filter und/oder Masken?

Autor: Der Braten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stellt man das nicht über den Identifier ein?

ober habe ich dein problem falsch verstanden?

Autor: Helmut -dc3yc (dc3yc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Düsentrieb,

der CAN-Bus ist messageorientiert, das heisst eine Adressierung im 
herkömmlichen Sinne gibt es nicht. Jeder Knoten empfängt alle Telegramme 
des Busses, überprüft sie auf Korrektheit und bestätigt diese am Schluss 
des Telegramms. Kann ein Knoten ein Telegramm nicht richtig decodieren, 
sendet er ein sog. Errorframe und das Telegramm wird wiederholt. Siehe 
auch unter http://www.can-cia.org/

Was du nun bei deinem Controller einstellen kannst, sind die 
Messagefilter. Jede Message wird mit einem von dir gewählten Identifier 
gesendet. Damit kann man z.b. Prioritäten steuern (niedrige IDs werden 
zuerst gesendet), falls mehrere Knoten gleichzeitig senden wollen. Jeder 
Identifier sollte nur von einem Knoten gesendet werden. Mit diesen 
Filtern kannst du nun auswählen, welcher ID vom CAN-Controller zum 
Prozessor durchgelassen wird. Damit kannst du eine gewisse Vorauswahl 
treffen, welche IDs verarbeitet werden sollen. Du kannst aber auch die 
Auswahl der Software überlassen und alle ankommenden Messages empfangen.
Weiterhin gibt es Controller, die objektorientiert arbeiten. Das heisst, 
du musst dem Controller vorher sagen, welche IDs er weiterleiten soll. 
Dazu hat er eine gewisse Anzahl von Objektregistern, in die man 
verschiedene IDs reinschreiben kann.
Die CIA-Homepage beinhaltet sehr viel Interessantes, die solltest du dir 
dringend mal anschauen!

Servus,
Helmut.

Autor: Daniel Düsentrieb (duesentrieb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Helmut,

vielen Dank für deine Ausführungen. Ich denke mein Problem ist sehr 
Prozessorspezifisch. Ich versuche es mal zu erklären.

In der Beschreibung des CAN Controllers MCP2515 werden sowohl Masken als 
auch Filter beschrieben.
Ich denke dass ich das Prinzip grundsätzlich verstanden habe.

Mein Problem besteht darin, dass ich eine Nachrich mit einer ID sende, 
die dann aber nicht durch den Filter des Controllers gelangt.
Ein Beispiel aus meinem, in Bascom Basic geschribenen Programm

Gesendet wird unter der ID 33. Die ID wird auf die Standartregister des 
Senders wie folgt aufgeteilt:

Mcp2515_write_register Txb0sidh , &B00000001
Mcp2515_write_register Txb0sidl , &B00100000
Daran schließt sich die eigentliche Nachricht an.

Nach der Controllerbeschreibung müsste diese empfangene Nachricht nun 
mit dem folgenden Filter vom Controller in die Buffer geladen werden

Mcp2515_write_register Rxm0sidh , &B00000001
Mcp2515_write_register Rxm0sidl , &B00100000
Mcp2515_write_register Rxm0eid8 , 0
Mcp2515_write_register Rxm0eid0 , 0
Mcp2515_write_register Rxm1sidh , &B00000001
Mcp2515_write_register Rxm1sidl , &B00100000
Mcp2515_write_register Rxm1eid8 , 0
Mcp2515_write_register Rxm1eid0 , 0

Leider tut sie das aber nicht!
Erst wenn ich den Filter ausschalte, kommt die Nachricht durch. Und das 
verstehe ich nicht.

Da in der Beschreibung auch von der erweiterten Kennung gesprochen wird, 
und ich diese nicht berücksichtige, könnte das Problem daher kommen.

Kannst du dazu etwas sagen?

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo DD,

schau dir mal das pdf an. Du hast die Wirkung der Masken falsch 
interpretiert.
Der Auszug stammt vom PIC 18F4680, das ECAN-Modul ist aber prinzipiell 
wie in den MCP25xx aufgebaut.

>Erst wenn ich den Filter ausschalte, kommt die Nachricht durch. Und das
>verstehe ich nicht.

In der Tabelle siehst du warum, mit Filterbits==0 wird gar nichts 
gefiltert.

>Da in der Beschreibung auch von der erweiterten Kennung gesprochen wird,
>und ich diese nicht berücksichtige, könnte das Problem daher kommen.

Das ist nicht das Problem, wenn das EXIDEN-bit im RXBxSIDL nicht gesetzt 
ist wird Base Frame Format unterstützt.

Gruss,
Edson

Autor: Meister Eder (edson)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier das PDF

Autor: Daniel Düsentrieb (duesentrieb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
o.k. das verstehe ich. Steht auch so im MCP2515 Datenblatt.

Müssen immer Filter und Maske gesetzt werden?

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zusammenfassend kann man sagen:

Eine 'ungesetzte' Maske (RXMxSIDH+RXMxSIDL == 0) macht die Filterung 
unwirksam, alle eingehenden Identifier werden akzeptiert.

Wenn alle Masken-bits gesetzt sind (RXMxSIDH+RXMxSIDH == FFFFh) kommen 
nur die Identifier durch die Arbitrierung, die mit den 
Acceptance-Filtern identisch sind.

Gruss,
Edson

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.