mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CAN BUS Identifier


Autor: Tobi P (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian B. (fabs)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobi P (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Tobi P (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian B. (fabs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Tobi P (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Tobi P (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Für die die erst später gekommen sind... im Anhang der Code ( nur die 
ISR )

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.