Guten Abend,
ich habe mal eine Frage zur CAN-Kommunikation. Eine CAN-Nachricht hat
neben den eigentlichen Daten auch einen 11-Bit, bzw. 29-Bit Identifier.
Wie bekommt jetzt der Mikrocontroller mit, dass die Nachricht für ihn
ist? muss man dazu im Code des Mikrocontrollers bei einer einkommenden
Nachricht die Daten abfragen?
z.B.
if(Nachricht & 0xE000000... == 111){
...
}
wobei 0xE00000... die ganze CAN-NAchricht ist und nur bei der ID die
entsprechenden Bits 1 hat. Hier ist die ganze ID
00000000111
So würde der Mikrocontroller die Nachricht nur ausführen, wenn der
Itendifier 111 ist.
Oder wird das anders gemacht?
Frank schrieb: > Wie bekommt jetzt der Mikrocontroller mit, dass die Nachricht für ihn > ist? "der Mikrocontroller" also. Bisschen unspezifisch. Im Zweifel steht die Antwort im Datenblatt ;-) Ich hatte für CAN bisher nur den AVR AT90CAN128 in der Hand und der macht die Filterung auf den Message Identifier in Hardware. Die Identifier (ID und Maske; siehe Datenblatt), die du empfangen willst, schreibst du in ein Register und das CAN-Modul löst nur dann einen Interrupt aus, wenn ein Frame mit der richtigen ID empfangen wurde. Alle anderen Frames ignoriert er und deine Software bekommt davon nichts mit.
Frank schrieb: > Oder wird das anders gemacht? Mal etwas anders denken. Die Nachrichten werden empfangen. Was die einzelnen Bits in den Nachrichten an welcher Stelle steh,t ist bekannt. Was diese bedeuten auch (kann alles mögliche sein). Das Programm wertet dann die Information aus und macht was sinnvolles. Der Gedanke die Nachricht auszuführen ist etwas zu eng gedacht.Es muss nicht unbedingt ein Steuerkommando enthalten sein.
lutz h. schrieb: > Das Programm wertet > dann die Information aus und macht was sinnvolles. Du hast anscheinend die Frage nicht gelesen. Es ging um die Auswertung des Identifiers und das macht oft eben nicht das Programm, sondern die Hardware vom CAN-Interface.
Ah ok. Das macht das ganze zwar nicht einfacher (da man die Register beschreiben muss), aber bestimmt besser. dankeschön für die Antworten
Frank schrieb: > Das macht das ganze zwar nicht einfacher Na irgendwie schon. Sonst wäre der Prozessor bei einem Bus, auf dem ein bisschen was los ist, nur mit Dekodieren und gucken "bin ich gemeint" beschäftigt und hätte entsprechend wenig Zeit für andere Dinge, ganz abgesehen von den Anforderungen an ein entsprechend echtzeitfähiges Programm.
einfacher finde 'ich' das nicht, da ich die register beschreiben muss und da immer so meine schwierigkeiten habe. Aber ich habe ja auch gesagt, dass es bestimmt besser ist.
Wolfgang schrieb: > sondern die > Hardware vom CAN-Interface. stimmt, meine Antwort war etwas neben der Frage.
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.