Forum: Mikrocontroller und Digitale Elektronik HM-11 Bluetooth Modul- hat das eine Fehlerkorrektur?


von Reinhard T. (reinhard_t884)


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

von Wolfgang (Gast)


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.

von Harald A. (embedded)


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.

von Reinhard T. (reinhard_t884)


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)

: Bearbeitet durch User
von Noch ein Kommentar (Gast)


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.

von Reinhard T. (reinhard_t884)


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.

von Jim M. (turboj)


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.

von DerEinzigeBernd (Gast)


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.

von Wolfgang (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.