Hallo, habe ein Problemchen mit dem Senden über CAN. Habe ein MOb definiert, dass alle CAN messages empfangen kann (Auswertung erfolgt im Interrupt). Wie kann ich verhindern, dass ich Nachrichten empfange, die der Controller über ein anderes MOb selber sendet? Gibt es beim AT90CAN128 irgendwo eine Einstellung, wo man das Empfangen eigener CAN Nachrichten disablen kann? Gruß Tille
>Gibt es beim AT90CAN128 irgendwo eine Einstellung, wo man das Empfangen >eigener CAN Nachrichten disablen kann? Wie soll das gehen? Ein CAN-Datenrahmen enthält keine Absenderinformationen, anhand derer man Nachrichten filtern könnte.
CAN mag nicht besonders, wenn sich Frames aus verschiedener Quelle nur im Body, nicht aber in der ID unterscheiden, da es dann bei gleichzeitigem Senden zu Fehler kommen kann. Folglich muss man ohnehin darauf achten, dass keine 2 Nodes die gleiche ID senden. Womit sich das Problem eigentlich erledigt, weil dann entsprechene Filter möglich sind. Kann allerdings passieren, dass der ID-Adressraum zu sehr fragmentiert und die Filtereinträge knapp werden. Notfalls kann man auch das immerhin 29 Bit lange EID-Feld in 3 Blöcke zerlegen: Zieladdresse, Quelladresse, Msgno. Dann ist man ziemlich dicht an quell/zieladressierten Frames, wie man sie aus Ethernet kennt.
Hallo, ist dir das wirklich passiert, dass du gesendete Frames im Empfangsbuffer hattest? Ich habe bis jetzt nur mit anderen CAN-Bausteinen gearbeitet (Freescale und Infineon), und dabei ist mir eigentlihc noch nie (bewusst) ein selbst gesendetes Frame untergekommen. Auch wenn ich keine Filter gesetzt hatte. Gruß, Heiko.
glaub ich auch nicht so recht - werde ich gleich mal probieren. Bis jetzt habe ich noch nie Filter im CAN-Controller benutzt. Alle Botschaften werden gelesen, Identifier ab in case-Schleife, wenn sich nichts passendes findet, ist es im Nirwana. Zeitprobleme hatte ich mit dieser Vorgehensweise noch nie. Ganz am Anfang hatte ich mal mit Filtern angefangen, hat sich dann aber als lästig bei Programmerweiterungen erwiesen (vergisst man schon mal zu ändern, oder baut sich gar neue Fehler ein:-).
Gibt welche: LPC2100/2200. Die haben zwar auch einen self-receipt Filter drin, der filtert aber so gut (zu gut), dass im Erratasheet drinsteht, mag möge diesen Filter doch bitte ausschalten ;-).
Danke ersteinmal, vielleicht versuche ich mein Problem noch etwas genauer darzustellen. Es geht um das address claiming bei J1939. Ich sende eine spezielle address claim Nachricht (z.B. id=0x18EEFF80). Nach dem Senden muss ich eine gewisse Zeit (250ms) warten, damit ich die geforderte Source Adresse (hier 0x80) benutzen kann. Sende in dieser Zeit ein anderes device ebenfalls diese address claim Nachricht (0x18EEFF80) dann müssen die Datenbytes ausgewertet werden und ggf. eine neue Adresse (z.B. 0x81) gefordert werden. Das heisst, ich sende selbst eine Nachricht und muss aber gleichzeitig auf genau diesen identifier scannen. Das Problem was ich habe ist, dass ich meine address claim Nachricht auf einem MOb sende und auf dem anderen MOb wieder empfange. Das Programm kann nun natürlich nicht unterscheiden von wo diese Nachricht kam und leitet den Vergleich der Datenbytes ein... Diese stimmen zu 100% überein... :-( Gruß Tille
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.