CAN Nachricht mit bestimmter ID empfangen

Gast #4107843
Lesenswert?
• ▲
▼
Hallo,
ich verschicke can-nachrichten von einem dspic30f zu einem anderen. dies 
funktioniert auch schon. Jetzt möchte ich gerne nur Nachrichten mit 
einer bestimmten ID empfangen. Zum testen versende ich zwei mal die 
selbe nachricht, jedoch mit einer anderen ID.
Empfangen werden sollen die Nachrichten mit der ID:
0x00, 0x01, 0x02, 0x03, 0x04

beim Sender habe ich setze ich das Register zum Testen
C1TX0SID = 0x0005 // soll empfangen werden
C1TX0SID = 0x0009 // soll nicht empfangen werden

dazu noch die Frage muss ich das bit 'RX IDE' setzen?

wie kann ich es aber jetzt machen, dass nur die Nachricht vom richtigen 
sender empfangen wird?
Habe es wie folgt gemacht
C1RX0FSID = 0x0000;
C1RX1FSID = 0x0005;
C1RX2FSID = 0x0009;
C1RX3FSID = 0x000D;
C1RX4FSID = 0x0011;

Das hat nicht funktioniert. Nur wenn ich
C1RX0FSID = 0x0005
gesetzt habe, ist die Nachricht durchgekommen.
wie kann muss ich das machen, dass alle gewollten NAchrichten 
durchkommen?

Johannes
Gast #4107967
Lesenswert?
• ▲
▼
Ich kenn jetzt den dsPIC30 nicht, aber normalerweise gibt es da zwei 
Register pro MessageBuffer.
Im 1. Register definierst Du, welche Bits des Identifiers verglichen 
werden sollen (Maske).
Im 2. Register definierst Du, wie diese Bits stehen müssen, damit die 
Nachricht angenommen wird.
Damit kannst Du selektieren, welche Bits relevant sind (und 
übereinstimmen müssen) und welche ignoriert werden sollen.

Bsp:
Du willst folgende IDs empfangen:
0x500, 0x501, 0x502, 0x503

=> Die letzten beiden Bits sind nicht relevant, die anderen sind es
=> Die Maske wird auf 0xFFC gesetzt
=> Der Vergleichsweit wird auf 0x500 gesetzt
Dann macht die Hardware in etwa dieses:
1
if ((empfangeneID & Maske) == Vergleichswert) 
2
{
3
    NachrichtInMessageBufferEmpfangen();
4
}

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.