Datenrate berechnen

OP #630438
Lesenswert?

Hallo,

nachdem ich eben das Forum durchgekämmt habe und leider nichts passendes 
gefunden habe, nun meine Frage. Vielleicht hat ja jemand einen 
hilfreichen Tipp für mich...

Ich habe 3 Bussysteme (CAN, I²C, SPI), über die ich simpel Daten 
übertrage (läuft auch alles). Die Übertragung störe ich, um zu sehen, 
wie das einzelne Übertragungsmedium damit zurecht kommt.

Nun möchte ich gerne die jeweilige Datenrate berechnen, die jedes 
Bussystem erreicht. Ich habe mir überlegt, mit Timer/Counter zu 
arbeiten. Klar, die Rate ist dadurch eingeschränkt, wie viele Daten man 
überträgt (z.B. Standard CAN Frame mit 11 Bit Id. und 8 Byte Daten 
entspricht 110 Bit. Bei einer CAN Baudrate von 1 Mbit/s kommt man auf 
110 µs pro Frame.).

Hat vielleicht schonmal jemand sowas gemacht? Vielleicht für eines der 
Übertragungssysteme oder für ein anderes, welches als Beispiel dienen 
könnte?

Danke! Xine.
Gast #630452
Lesenswert?

So wie ich Dich verstehe interessiert Dich die Nutzdatenrate und nicht 
die tatsächliche Busclock? Die Busclock würde ja durch eine Störung auch 
nicht verändert.
Dafür würde ich mir für jedes Protokoll einen Receive Interrupt 
generieren und die Zeiten zwischen den IRQ's (also zwischen dem Empfang 
zweier gültiger Datenpaketen) ermitteln
OP #630469
Lesenswert?

Ach so, ja klar, die Nutzdatenrate interessiert natürlich!

Dachte daran, mit 2 Timern zu arbeiten. Einer startet, wenn 1 Byte 
ankommt, und stoppt, wenn das nächste Byte da ist. Der zweite tut das 
gleiche beim nächsten Byte. Immer abwechselnd. Weiss nur noch nicht, ob 
das so schlau ist...
Gast #630484
Lesenswert?

Was versprichst Du Dir davon? Da kommen soviele Pakete, die Zeit von 
jedem einzelnen kannst Du eh nicht betrachten. Ich würde das Irgendwie 
Mitteln. Wenn Du mit einem Atmel arbeitest zum Beispiel ein Timer im 
Capture Mode, der dir bei jedem Event (Interrupt) incrementiert. Und 
einen zweiten, der jede Sekunde einen interrupt auslöst indem Du dann 
den ersten Timer aussliest. Das Ergebnis wären byte/s.

Gruss Ralf
Gast #630562
Lesenswert?

Nee, das geht so nicht. Man muss Packete versenden und die ganzen 
Packete zaehlen. Da kann man N-byte Packete machen und die Senden. Auf 
der Anderen Seite muss man nur zaehlen wieviele (richtigen) Packete pro 
Sekunde noch ankommen multipliziert mal die Datenrate. Die Stoerung muss 
man natuerlich auch irgendwie quantifizieren. Wenn eine  Steoerung zu 
einem kaputten Packet fuehrt, so sich grosse Packete natuerlich 
benacchteiligt.
Gast #630574
Lesenswert?

Ich gehe davon aus, dass die Schnittstelle nur (richtige) Pakete zur 
verfügung stellt. Nimmt man zb. die can Schnittstelle des AT90can128 
wird diese wohl nur richtig empfange Pakete zur Verfügung stellen. 
Zumindest bei can da CRC.
Wieso mulitplizierst Du noch mit der Datenrate?
Gast #630589
Lesenswert?

Na, wenn der Frager MByte/sekunde will...
Ich sehe Probleme, die Stoerungen realistisch zu quantifizieren. Wenn 
man nur davon ausgeht, dass eine Stoerung ein Bit kaputt macht, eine 
bestimmte Menge pro zeit davon auftritt,  so hat man eine 
Mathematikuebung. Etwas Statistik. Aber wenig Realistisches.
Gast #630602
Lesenswert?

Das mit den MegaByte pro Sekunde will mir nicht in den Kopf...

Gut, er könnte ja eine bekannte Bytefolge übertragen. Zb. Gray Code dann 
ändert sich von Byte zu Byte immer nur ein Bit. Wenn er sich das erste 
Übertragene Byte merkt kann er sich ja die fehlerhaften Bytes (mehrere 
geänderte Bits) raussuchen.
Andere Frage wie er gezielt den Bus stört!?
Gast #634624
Lesenswert?

Der Zusammenhang von Stoerpulsenergie zu fehlerhaftem Bit ist eine Sache 
der Kopplung. Der Zusammenhang von gestoertem Bit zu brauchbarer 
Uebertrangungrate ist eine Sache des Protokolles. Ein CRC hinter jedem 
block erlaubt die gestoerten Bloecke zu verwerfen, und nochmals zu 
uebertragen. Wenn ein fehlerhaftes bit nun einen Block kaputtmacht sind 
grosse bloecke im Nachteil. Es gibt nun Protokolle, die die Blockgroesse 
der Fehlerhaeufigkeit anpassen. Das ist aber alles Zeug, das kann man 
gertadeaus rechnen, da muss man nichts messen. Zu messen gibt es nur die 
Kopplung der Stoerpulsenergie auf den Leiter und ab welchem Wert ein Bit 
kaputtgeht. Eine allenfalls weitergehende Frage kann sein welche Sorte 
von Stoerungen denn auftritt. Sind das statistisch verteilte einzelnen 
Entladungen, von zB 1ns Laenge, sind das ganze Gruppen von Pulsen, 
sogenannte Bursts. Bei diesem Thema kann man sich verlieren. Ob ein 
Zusammenhang von Labormessungen mit der Realitaet besteht ist eine 
andere Frage.
Gast #639074
Lesenswert?

Der CAN-Bus ist da sehr resistent, das stimmt. Da ist nur interessant, 
ab welchem Energielevel die Frames verworfen werden.
Bei SPI und I²C jedoch ist das ja nicht der Fall, die sind anfälliger 
für Störungen, da sie nicht über einen so umfassenden Schutz vor Fehlern 
verfügen wie CAN.
Ob diese Art von Störpulen in der Realität Verwendung findet: Ja. Jedoch 
nicht im alltäglichen Bereich.
Im Rahmen der Arbeit ist nun meine Aufgabe, die Rate zu ermitteln. Wie 
viel Sinn das macht, schau ich wenns fertig ist. :)
Hast aber Recht, wenn man das Thema nicht ausreichend einschränkt, kann 
man sich in der Tat darin verlieren.

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