Forum: Mikrocontroller und Digitale Elektronik CAN Nachricht mit bestimmter ID empfangen


von Johannes (Gast)


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

von Bronco (Gast)


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
}

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.