HC-05: Bytes gehen in Übertragung verloren

Gast #6179458
Lesenswert?
• ▲
▼
Hallo, ich benutze eine HC-05 Bluetooth Modul um Daten an meinen Rechner 
zu senden. Bei der Übertragung wird immer ein Bündel an Daten gesendet. 
Die Baudrate ist auf 115200 eingestellt. Start Bit ist 0, Stopp Bit und 
Parität Bit sind 1.
Gemessen habe ich am RX Pin mit einem Scope 115206,046 Baud. Anstiegs- 
und Abfallszeit sind 285ns. Das ist durch einen RC Tiefpass bedingt, um 
Rauschen auf der RX Leitung zu unterdrücken. Das Rauschen habe ich mit 
50mVeff gemessen.

Meiner Meinung nach zeigen diese Messungen keine Offensichtlichen 
Probleme. Allerdings werden nicht immer alle Bytes übertragen. Es gehen 
fast immer 5 bis 20 Bytes verloren. Wenn das Datenpaket nur aus leeren 
Bytes besteht, geht jedoch nie ein Byte verloren.
Besonders der letzte Punkt wundert mich.
Hat jemand eine Ahnung was hier los sein könnte? Ist es vielleicht der 
Computer der Probleme macht? Ich verbinde mich mit einem Üblichen 
Bluetoothmanager unter Linux und sammle die Daten via cat /dev/rfcomm0.
Gast #6179640
Lesenswert?
• ▲
▼
Wie groß sind deine Datenpakete und wie lange sind die Pausen 
dazwischen?

Eins solltest du wissen: 115200 Baud ist schon nahe am Maximum, was 
diese Module überhaupt schaffen. Wenn da nur der kleinste 
Übertragunsgfehler stört, hat das Modul bei kontinuierlicher Übertragung 
keine Zeit mehr, den Fehler durch Wiederholung zu korrigieren.

Sie funktionieren recht zuverlässig, wenn du kleine Pakete (z.B. 64 
Bytes) sendest und dann auf eine Empfangsbestätigung des Empfängers 
wartest, bevor du weiter sendest. Also Half-Duplex.
#6180195
Lesenswert?
• ▲
▼
Transmitter schrieb:
> Hat jemand eine Ahnung was hier los sein könnte?

Baudraten von 115200 und mehr brauchen bei Bluetooth Modulen immer 
Hardware Flußsteuerung (RTC/CTS flow control). Denn es können wie oben 
erwähnt im Modul die Puffer volllaufen - dann darf der µC keine Daten 
mehr senden, denn die gehen dann futsch.

Das erklärt auch warum mehrere Bytes verloren gehen, denn erst im 
nächsten Übertragungsintervall wird wieder Platz im Puffer frei.

Falls der Ziel-µC kein RTS/CTS kennt, kann man sich das auch in Software 
zusammen stricken - einfach den Zustand der RTS Leitung prüfen bevor man 
ein TX Byte sendet.
Gast #6181556
Lesenswert?
• ▲
▼
Hallo nochmal. Ein paar Stunden habe ich mich noch dran gesetzt. Das 
HC-05 Modul wird das Problem sein. Wenn ich die Daten per Kabel and 
einen Arduino und dann an den Rechner schicke klappt alles.
Mit einem Leeren Byte meine ich ein Datenbyte was komplet Null ist. also 
0x00. Streng genommen ist es ja auch nicht leer, entschuldigt meine 
Ausdrucksweise. Der Transmitter ist auf einem FPGA realisiert und sehr 
simpel gehalten. Also habe ich auch keine tollen Korrektur- oder 
Wiederholungs Features. Irgendwie sowas werde ich aber implementieren 
müssen da der Datenstrom etwa 10s anhält.
Gast #6181571
Lesenswert?
• ▲
▼
Transmitter schrieb:
> Das HC-05 Modul wird das Problem sein.

Da kannst du so viele Module probieren wie du willst. Ein anderes Modul 
kann dein Problem durch größere Puffer bestenfalls entschärfen, aber 
nicht lösen.

Das Problem ist, dass du in deiner Anwendung die Eigenschaften der 
Übertragungsstrecke nicht berücksichtigst hast.

Mache wie bereits empfohlen entweder Half-Duplex mit kleinen Paketen und 
Bestätigungen oder nutze die Handshake Leitungen.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.