www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CAN: Latentzeit messen!


Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe bereits mit einem Mikrocontroller, der mit einer 
CAN-Schnittstelle ausgestattet ist, die Latenzeit mal mit einem Oszi 
gemessen. Wenn eine bestimmt CAN-Nachricht eintrifft, dann wurde am Pin 
von einem Port X auf +5V gezogen und anschließend gleich wieder auf 0V.
Was mir dabei aufgefallen ist, dass der Pin nicht erst nach dem Ende der 
CAN-Nachricht auf +5V gezogen wurde, sondern ziemlich am Anfang der 
CAN-Nachricht.
                       ____________________ 
______________
CAN-Nachricht:_______|  -                    |______________|   _
Portpin:      _________| |_____________________________________| 
|___________


Warum ist der kurze Impuls vom Portpin nicht nach dem Ende der 
CAN-Nachricht zu sehen?

Hat sich schon jemand mit der Latenzeitmessung auf einem 
Mikrocontrollersystem befasst?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gratuliere! Du hast eine Maschine entwickelt, mit der sich die Zukunft 
vorhersagen lässt. Zwar nur im Millisekundenbereich, aber ein Anfang ist 
gemacht.

M.a.W: Bischen mehr Info. Controller, Pins, lesbares Bild, Zeiten, ...

Autor: Steffen Ge. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Oh, ich sehe gerade die obige Skizze ist total verzogen.
Im Anhang hab ich nochmals eine zeichnung erstellt.
Leider konnte das oszi keine Bilder abspeichern.

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja eigentlich müsste der Portpin erst nach dem Ende der CAN-Nachricht 
auf +5V gezogen werden oder?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehlt immer noch: Zeitachse (Millisekunden, Stunden, Jahre, ...) und 
dazu die CAN-Rate.

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok das hab ich mir nicht aufnotiert. Ich werde nnächste Woche am Montag 
nochmals die Messung durchführen. Dann kann ich auch genau die Zeit hier 
angeben.

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Übertragungsrate steht bei mir auf 100kBaud fest. Die 
CAN-Nachrichten sende ich von einem PC aus. Alle 200ms wird eine 
CAN-Nachricht vom PC an den Mikrocontroller gesendet. Der Zeitabstand 
zwischen Anfang von der CAN-Nachricht und dem Portpin liegt in etwa im 
Mikrosekundenbereich.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Passt die angezeigte Dauer des Frames zur erwarteten Dauer?

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was meinst du genau? Wie könnte ich dies ermitteln?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anzahl Bits im CAN-Frame zählen. Multipliziert mit der Dauer eines Bits 
und ein paar Prozent Stopfbits obendrauf ergibt das die zu erwartende 
Länge des Frames.

Dauert der angezeigte Frame erheblich länger, dann ist das nicht 1 Frame 
sondern mehere. Warum auch immer (z.B. Error-Frame).

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Begriff Latentzeit stimmt doch nicht oder? Es müsste Latenzzeit 
heissen.
Stimmt dies?

>>Anzahl Bits im CAN-Frame zählen. Multipliziert mit der Dauer eines Bits
>>und ein paar Prozent Stopfbits obendrauf ergibt das die zu erwartende
>>Länge des Frames.

Muss ich da die komplette Zeit vom CAN-Frame überprüfen?

Hat hier jemand schon mal so eine Zeitmessung durchgeführt?

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Begriff Latentzeit stimmt doch nicht oder? Es müsste Latenzzeit
heissen.
Stimmt dies?

>>Anzahl Bits im CAN-Frame zählen. Multipliziert mit der Dauer eines Bits
>>und ein paar Prozent Stopfbits obendrauf ergibt das die zu erwartende
>>Länge des Frames.

Muss ich da die komplette Zeit vom CAN-Frame überprüfen?

Hat hier jemand schon mal so eine Zeitmessung durchgeführt?

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

so nun habe ich eine Oszi. Mit dem Oszi habe ich soeben festgestellt, 
dass die Telegrammlänge (ganze CAN-Nachricht) insgesamt 1ms lang ist.
Die Baudrate steht bei mir aug 100kBaud und die CAN-Nachricht wird alle 
200ms von dem PC aus zu dem Mikrocontroller gesendet. Ich komme nie auf 
die 100kBaud.

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Oszi habe ich nun beobachtet, dass die Latenzzeit zwischen Ende 
des CAN-Telegramms und +5V Anstieg des Portpins ca. 27ms beträgt.
Das ist doch nocht akzeptabel oder? Ich muss dazu sagen dass ich dazu 
keinen Interrupt verwende, sondern das Empfangen der CAn-Telegramme 
erfolgt in dem Hauptprogramm in der while(1) Schleife.

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja mit Interrupt, liegt die Latenzzeit nur noch bei ca. 180us.
Das ist ja schon viel viel besser.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> so nun habe ich eine Oszi. Mit dem Oszi habe ich soeben festgestellt,
> dass die Telegrammlänge (ganze CAN-Nachricht) insgesamt 1ms lang ist.

Das wären dann bei 100Kbps ungefähr 100 Bits inkl. Stopfbits. Wäre 
möglich, aber die zu erwartende Länge kann ich nicht erraten. die Bits 
musst du schon selber zählen.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähhm - fing dein Problem nicht umgekehrt an? Mit einer negativen 
Latenzzeit? Oder war die so gross, dass sie zufällig schon in den 
nächsten Frame reinfiel?

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss ich alle Bits vom komplette CAN-Telegramm zählen?

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Ähhm - fing dein Problem nicht umgekehrt an? Mit einer negativen
>>Latenzzeit? Oder war die so gross, dass sie zufällig schon in den
>>nächsten Frame reinfiel?

Ja du hast recht. Ich hab am falschen CAN Anschluss gemessen.

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Messung am CAN-Eingangspin:

Die Länge des CAn-Telegramms: 5 * 100us = 500us

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Baudrate wurde auf 250KBaud erhöht.

Messung am CAN-Eingangspin:

Die Länge des CAn-Telegramms: 2 * 100us = 200us

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versende nur 1 Datenbyte vom PC an den Mikrocontroller.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann passt das doch. 500µs bei 100Kbps sind 50 Bits. Ein kompletter 
11bit Frame mit 8 Bytes liegt bei grob 100. Sehe ich das richtig: Ein 
500µs Frame hat hintenweg nochmal 180µs Latenz drin. Das ist das doch 
ganz ordentlich. Hast du eigentlich überhaupt noch ein Problem?

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, dann ist das schon korrekt so.
Noch ein Problem habe ich:

In der while(1) Schleife ist die Latenzzeit zwischen Ende CAN-Telegramm 
und +5V Anstieg des Portpins 27ms groß.
Wenn ich das ganze in einer Interruptroutine packe, dann ist die 
Latenzzeit wesentlich kürzer und liegt bei ca. 180us bzw. 200us.
Warum ist die while(1) Schleife zu zeitlastig?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Warum ist die while(1) Schleife zu zeitlastig?

Da niemand ausser dir diese Schleife je gesehen hat, und ebenso viele 
Leute wissen, mit welcher Plattform du arbeitest, wär's ein Wunder wenn 
sich da schnell eine Antwort findet.

Autor: Steffen Ge. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende einen 8Bit Mikrocontroller.
ALs Compiler benutze ich den Keil C51 (uVision3.0).

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.