HM-11 Bluetooth Modul- hat das eine Fehlerkorrektur?

OP #7352939
Lesenswert?

Hallo,

hat dieses Modul eigentlich eine eingebaute Fehlerkorrektur oder sollte ich mich darum selber kümmern? Ich habe hin und wieder Probleme mit falschen Werten und weiß noch nicht genau woran es liegt.

https://wiki.seeedstudio.com/Bluetooth_V4.0_HM_11_BLE_Module/

Gruß Reinhard

Gast #7352943
Lesenswert?

Reinhard T. schrieb:

Ich habe hin und wieder Probleme mit falschen Werten und weiß noch nicht genau woran es liegt.

Du könntest untersuchen, ob die Fehler bei der Übertragung entstehen oder woanders. Erzeuge vor dem Senden eine Prüfsumme und übertrage die zusammen mit deinen Werten. Wenn du beim Empfänger auch wieder die Prüfsumme berechnest und mit der empfangenen vergleichst, wärest du schon einen Schritt weiter.

#7352946
Lesenswert?

Fehlende oder falsche Bytes? Auch wenn die BT Strecke selbst sicherlich eine Checksumme pro Frame macht heißt das ja noch lange nicht, dass im Fehlerfall wiederholt wird. Das kann das Modul kaum leisten, da eine allgemeine Firmware nicht wissen kann, was da so kommt. Es ist ja auch so, dass ein BT Frame abgesetzt wird, wenn a) die maximale Länge erreicht ist oder b) für x Millisekunden keine weiteren Bytes kommen. D.h. man sollte konsistente Datenframes bilden, diese noch einmal selber mit einer einfachen Checksumme versehen, diesen in einem Rutsch ohne Unterbrechung versenden und am besten auch einen einfachen Framezähler einbauen. Die Empfangsseite quittiert dem Sender einen empfangenen Frame. Falls keine Quittung kommt nochmal senden. Und falls es sich überschneidet (warum auch immer) weiß der Empfänger anhand des Framezählers, dass diese Info bereits verarbeitet wurde. Dieser Framezähler kann eine einfache Variable sein, die von 0..255 durchläuft und wieder von vorne beginnt.

OP #7352952
Lesenswert?

Wolfgang schrieb:

Du könntest untersuchen, ob die Fehler bei der Übertragung entstehen oder woanders.

Harald A. schrieb:

Fehlende oder falsche Bytes?

Vielen Dank für die schnelle Antworten. Ich muß das noch genau untersuchen, wollte bloß wissen ob da was korrigiert wird. Morgen zeichne ich die Daten mal auf und gehe der Sache nach.

Edit: Einzelne Werte sind scheinbar 0 oder 1024. (AD Wandler vom Mega 328p)

Gast #7352959
Lesenswert?

Du könntest auch in die Doku schauen, ob du bei nicht korrigierbaren Fehlern einen Fehlerstatus abfragen kannst.

Entweder bekommst du damit eine Liste der abgefangenen Fehler, oder du weißt, dass du alles selbst behandeln musst.

OP #7352968
Lesenswert?

Noch ein Kommentar schrieb:

Du könntest auch in die Doku schauen, ob du bei nicht korrigierbaren Fehlern einen Fehlerstatus abfragen kannst.

Ich habe da nichts gefunden.

Das Problem sollte aber leicht zu lösen sein, bin schon froh das ich den Fehler eingrenzen konnte. Ich übertrage die Werte eines EKG Moduls und einzelne Werte sind manchmal um ca. 50 Bit nach oben oder unten versetzt. Oft auch um 100, 150 oder 200 Bit. Ich hatte da überhaupt keine Erklärung dafür, vorhin ist es mit aufgefallen. Die Nulllinie liegt bei 512 Bit und ich bilde immer aus 10 Werten den Mittelwert. Offensichtlich sind immer wieder einzelne oder mehrere Werte 0 oder 1024. Das lief auch sehr lange ohne Probleme, in letzter Zeit kamen aber immer öfter diese Fehler.

#7353440
Lesenswert?

Reinhard T. schrieb:

Ich übertrage die Werte eines EKG Moduls und einzelne Werte sind manchmal um ca. 50 Bit nach oben oder unten versetzt. Oft auch um 100, 150 oder 200 Bit.

Dir ist klar das ein EKG Signal mit 1-4mV Pegel ein bis zu 300mV Gleichtakt Spannung zwischen den Elektroden haben darf (Elektrochemie)? Das gibt eine ordentliche Verschiebung des Nullpunktes...

HM-11 verliert Daten wenn der BTLE Puffer voll läuft und man keine Flussignale (RTS/CTS) des UARTs verwendet. Das sind aber immer ganze Bytes.

Gast #7353458
Lesenswert?

Reinhard T. schrieb:

Ich übertrage die Werte eines EKG Moduls und einzelne Werte sind manchmal um ca. 50 Bit nach oben oder unten versetzt.

Du solltest nicht Rohdaten (d.h. einfach irgendwelche Bytes) übertragen, sondern ein /Protokoll/ verwenden, mit dem Du erkennen kannst, wo zusammengesetzte Werte anfangen und ob es Übertragungsfehler gibt.

Eine einfache Variante davon wäre die Übertragung als Klartext mit Dezimalzahlen, und als Trennzeichen z.B ein Zeilenvorschub.

Um den Wert 512 zu übertragen, müsstest Du statt der beiden Bytes 0x02 0x00 die Zeichenfolge 512\n, also die Bytes 0x35 0x31 0x32 0x0d verwenden.

Da Ziffern nur im Bereich zwischen 0x30 und 0x39 liegen können, ist klar, daß jedes andere empfangene Byte entweder das Trennzeichen zum Abschluss einer Übertragung (0x0d) oder aber ein Übertragungsfehler sein muss.

Dieser Übertragung kann man auch mit einem einfachen Terminalprogramm wie z.B. Teraterm /zusehen/.

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