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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.