Forum: Mikrocontroller und Digitale Elektronik AT90CAN128


von Tille (Gast)


Lesenswert?

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

von fieser, klugscheissender Rahul (Gast)


Lesenswert?

>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.

von A.K. (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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.

von crazy horse (Gast)


Lesenswert?

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:-).

von A.K. (Gast)


Lesenswert?

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 ;-).

von Mike T. (tille)


Lesenswert?

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