Forum: Mikrocontroller und Digitale Elektronik CAN Identifier ermitteln


von Frank (Gast)


Lesenswert?

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?

von Daniel S. (daniel_s49)


Lesenswert?

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.

von Lutz H. (luhe)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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.

von Frank (Gast)


Lesenswert?

Ah ok. Das macht das ganze zwar nicht einfacher (da man die Register 
beschreiben muss), aber bestimmt besser.

dankeschön für die Antworten

von Wolfgang (Gast)


Lesenswert?

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.

von Frank (Gast)


Lesenswert?

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.

von Lutz H. (luhe)


Lesenswert?

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