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
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.
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.
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)
:
Bearbeitet durch User
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.
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.
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.
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.
Reinhard T. schrieb: > Einzelne Werte sind scheinbar 0 oder 1024. (AD Wandler vom Mega 328p) Wert von 1024 aus einem 10-Bit AD-Wandler halte ich für einen Fehler in der verarbeitenden Software.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.