Forum: Mikrocontroller und Digitale Elektronik CAN: Latentzeit messen!


von Steffen Ge. (Gast)


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?

von Andreas K. (a-k)


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, ...

von Steffen Ge. (Gast)


Angehängte Dateien:

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.

von Steffen Ge. (Gast)


Lesenswert?

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

von Andreas K. (a-k)


Lesenswert?

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

von Steffen Ge. (Gast)


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.

von Steffen Ge. (Gast)


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.

von Andreas K. (a-k)


Lesenswert?

Passt die angezeigte Dauer des Frames zur erwarteten Dauer?

von Steffen Ge. (Gast)


Lesenswert?

Was meinst du genau? Wie könnte ich dies ermitteln?

von Andreas K. (a-k)


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).

von Steffen Ge. (Gast)


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?

von Steffen Ge. (Gast)


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?

von Steffen Ge. (Gast)


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.

von Steffen Ge. (Gast)


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.

von Steffen Ge. (Gast)


Lesenswert?

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

von Andreas K. (a-k)


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.

von Andreas K. (a-k)


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?

von Steffen Ge. (Gast)


Lesenswert?

Muss ich alle Bits vom komplette CAN-Telegramm zählen?

von Steffen Ge. (Gast)


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.

von Steffen Ge. (Gast)


Lesenswert?

Messung am CAN-Eingangspin:

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

von Steffen Ge. (Gast)


Lesenswert?

Baudrate wurde auf 250KBaud erhöht.

Messung am CAN-Eingangspin:

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

von Steffen Ge. (Gast)


Lesenswert?

Ich versende nur 1 Datenbyte vom PC an den Mikrocontroller.

von Andreas K. (a-k)


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?

von Steffen Ge. (Gast)


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?

von Andreas K. (a-k)


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.

von Steffen Ge. (Gast)


Lesenswert?

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

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.