Hallo. Ich taste mich grad an den CAN BUS ran und finde keine Antwort auf folgende Frage: Ich empfange die Nachrichten über die Interrupt Routine. Diese wird bei jeder eingehenden Nachricht ausgelöst. Alle Nachrichten kommen in MoB1 an. Wie kann ich die Nachrichten innerhalb der ISR anhand des Identifier unterscheiden, wenn der MoB die ID´s 0 - 100 zulässt ? Beispiel: Wert a hat ID 100 und soll in Variable a gespeichert werden;; Wert b hat ID 101 und soll in Variable b gespeichert werden. Kann ich innerhalb der ISR das CAN Identifier Mask Register dazu benutzen ? Ein kleines Beispiel in C wäre traumhaft... Ich benutze den AT90CAN128
Du kannst direkt das MOb ID Tag Register (CANIDT1-4) auslesen. da steht der empfangene ID Tag drin. Anhand dessen kannste dann entscheiden, was zu tun ist. Schau dir mal die AVR-Lib von Atmel für den CAN128 an. Die ist zwar erstmal nicht Int-basiert sondern pollt, aber die hat sehr schöne Strukturen vordefiniert mit denen man dann einfacher auswertbare Ergebnisse bekommt. Gruß Fabian
Tobi P schrieb: > Wie kann ich die Nachrichten innerhalb der ISR anhand des Identifier > unterscheiden, wenn der MoB die ID´s 0 - 100 zulässt ? > Beispiel: > Wert a hat ID 100 und soll in Variable a gespeichert werden;; > Wert b hat ID 101 und soll in Variable b gespeichert werden. Warscheinlich nur ein Tipfehler aber Wert b (ID 101) sollte gar nicht angenommen werden.
Fabian B. schrieb: > Du kannst direkt das MOb ID Tag Register (CANIDT1-4) auslesen. da steht > der empfangene ID Tag drin. Anhand dessen kannste dann entscheiden, was > zu tun ist. Also könnte ich die ID der Nachricht dort auslesen und innhalb der ISR mit switch/case arbeiten...??? Könnte es wirklich so einfach sein ?
Daniel schrieb: > Tobi P schrieb: >> Wie kann ich die Nachrichten innerhalb der ISR anhand des Identifier >> unterscheiden, wenn der MoB die ID´s 0 - 100 zulässt ? >> Beispiel: >> Wert a hat ID 100 und soll in Variable a gespeichert werden;; >> Wert b hat ID 101 und soll in Variable b gespeichert werden. > > Warscheinlich nur ein Tipfehler aber > Wert b (ID 101) sollte gar nicht angenommen werden. Ja natürlich Tippfehler. sagen wir mal ID#s sind 99 und 100
Ja, Tobi, es ist so einfach ;-) Wobei du dir erstmal aus den zwei bis vier Registern deinen Wert zusammenbauen mussst. Siehe auch Seite 263 im Datenblatt des AT90CAN128, Abschnitt 19.11.3 Gruß Fabian
Ich werd´s morgen ausprobieren. Fabian, ich werd dafür sorgen das dein Name in Zukunft in Weihnachtsliedern aufgenommen wird. Vielen Dank für die schnelle Antwort.
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.