Forum: Mikrocontroller und Digitale Elektronik Datenrate berechnen


von Xine L. (xine)


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.

von Ralf (Gast)


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

von Xine L. (xine)


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

von Ralf (Gast)


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

von Seff (Gast)


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.

von Ralf (Gast)


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?

von Seff (Gast)


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.

von Ralf (Gast)


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!?

von Xine L. (xine)


Lesenswert?

Der Bus wird gestört, indem gezielt Störpulse in die Leitung 
eingekoppelt werden.

von Seph (Gast)


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.

von xine (Gast)


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.

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.