mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CAN identifier als Trigger


Autor: martinW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich bin gerade am tüfteln, ob ein CAN-Bus meine Anforderungen erfüllt 
und komme nicht weiter...deshalb würde ich mich über ein paar hilfreiche 
Kommentare sehr freuen!
Zu meinem Problem: Ich möchte auf einem CAN-Bus nicht nur Daten 
übertragen, sondern auch ein CAN-Telegramm als Trigger verwenden, auf 
welches dann möglichst_schnell ein Event im uC folgt. Kann ich dazu 
auch den Identifier alleine verwenden? So, dass wenn ein CAN-Telegramm 
mit der ID x kommt ich sofort weiß, dass mein Trigger-Ereignis gestartet 
werden kann ohne, dass ich erst die restlichen Bits des Telegramms 
einlesen muss?

Sollte das nicht gehen, stimmt dann folgende Überlegung für ein 
komplettes Telegramm?
Ein CAN-Telegramm mit einem Datenbyte hat 54Bit (ohne Stuffing). Bei 
einer Übertragungsrate von 1Mbps wären das dann 54us Übertragunszeit 
(natürlich ohne Verzögerunszeiten durch Transceiver, 
Wellenausbreitungszeiten etc.) Oder mache ich hier einen grundlegenden 
Überlegungsfehler?

Danke&Gruß
Martin

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ganz ist mir nicht klar was du machen willst.

Aber ich denke mal es wird daran scheitern, dass du beim CAN Bus keine 
garantierten Latenzzeiten bekommst.

Angenommen deine Nachricht benötigt tatsächlich 54µs Übertragungszeit, 
wie willst du sicherstellen, dass sie sofort gesendet wird.
Wenn erst mal 100 andere höher priorisierte Telegramme über den Bus 
gehen, kann das deine Nachricht schon erheblich verzögern.

Vielleicht schreibst du einfach noch etwas genauer was du machen 
möchtest.

Autor: martinW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmals für Deine Antwort!

Der Traffic wird minimal sein. Am Bus hängen ein uC und 2 Geräte, die 
jeweils möglichst schnell und mit konstanter Zeit-Differenz auf ein 
Telegramm des C167 reagieren sollen (Trigger). Des Weiteren gibt es auch 
eine bidirektionale, prinzipiell zeitunkritische und nicht sehr häufige 
(mehrere hundert ms zw. Telegrammen) Kommunikation (Stati, Ergebnisse 
etc.). Um die Reaktionszeit kürzer zu machen, dachte ich mir, dass ich 
für die Trigger-Erkennung vielleicht nur den Identifier im jeweiligen 
Gerät auswerten brauche. Also insgesamt 4 IDs (Trigger Gerät 1, Trigger 
Gerät 2, Daten Gerät 1, Daten Gerät 2) Ob das so einfach geht, wie ich 
mir das vorstelle weiß ich jedoch leider nicht, da ich aus der trockenen 
Theorie leider nichts diesbzg. herauslesen konnte.

Ansonsten muss ich wohl als Trigger ein normales Datentelegramm mit der 
Information "Trigger" an das Gerät senden, was geschwindigkeitsmäßig 
theoretisch noch im grünen Bereich ist. Theoretisch! Hast Du eine Idee 
wie lange die Verarbeitungszeit ("uC sendet Telegramm" bis "Event wird 
beim Gerät erkannt") unter obigen Voraussetzungen ungefähr sein wird? 
Also 54us + Physik oder muss ich noch andere, nicht genannte Faktoren 
berücksichtigen?

Danke & viele Grüße

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Konfiguriere die Mailboxen 1-4 einfach auf die 4 benötigten IDs (= in 
der Maske alle Bits auf 1 setzen und in den IDs die benötigten Werte 
eintragen). Wenn die Daten nicht relevant sind, dann verwende Frames mit 
einem data length code von 0, damit entfällt dieser Overhead.

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und verwende als Trigger die ID 0, denn die gewinnt die Arbitrierung 
immer.
Ansonsten kommt nur noch die Interrupt-Latenzzeit hinzu.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eher 0, 1, 2 und 3 ;-)

Autor: Willivonbienemaya .. (willivonbienemaya)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, so ist das machbar.
die niedrigsten IDs nehmen, und keine Daten mitschicken.

Ich nehm mal an der C167 hat einen CAN Controller onboard?

Dann dekodiert er die CAN Nachricht direkt während dem Empfang und löst 
mit minimaler Verzögerung einen Interrupt aus.
weiter kann dir die Theorie nicht helfen. Wenn dus genauer wissen 
willst, musst du sowas testweise aufbauen und mit einem Scope messen wie 
groß die Latenz ist.

Was ist das denn für eine Anwendung, bei der du einen Trigger brauchst?

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es könnte vielleicht noch schneller gehen, wenn Du zum Triggern gezielt 
einen Bus-Error (z.B. 20 Bit langen Dominant-Pegel) erzeugst, der dann 
einen Error-Irq auslöst.

Ähnlich wie bei der Seriellen einen Parity-Error oder Break-Signal 
(Framing-Error).


@Alex (Gast) "Eher 0, 1, 2 und 3 ;-)"
?? könntest Du das mal bitte näher erläutern?

Autor: martinW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich danke Euch allen für Eure Hilfe und für die Geduld beim 
Herauskitzeln was ich eigentlich will (auch das war ein wichtiger 
Prozess bei mir;) !!!

alles Gute weiterhin

Martin

Autor: martinW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, vergaß ich total:
Die Anwendung ist ein Geschwindigkeitsmessgerät mit externen Kameras, 
welche eben zum richtigen Zeitpunkt ausgelöst werden sollen.

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.