CAN BUS Identifier

Gast #1621172
Lesenswert?

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
#1621179
Lesenswert?

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
Gast #1621185
Lesenswert?

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.
Gast #1621190
Lesenswert?

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 ?
Gast #1621193
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren