Forum: Mikrocontroller und Digitale Elektronik Datenübertragung mit Funkmodul -> Fehlererkennung


von Oliver _. (verleihnix)


Lesenswert?

Moin zusammen,

die SuFu hatte nicht so ganz zum Ziel geführt, daher hin mal meine 
Frage.

Ich habe vom Chinamann 433 MHz Funkmodule gekauft und will damit ganz 
einfache Daten wie Status, Zahlenwerte etc übertragen. Das ganze darf 
sehr langsam sein.

Nun die Frage, wie sollte ich in der Software eine Fehlererkennung 
aufbauen, einfach zB je 2 Zeichen am Ende und Anfang setzen, die der 
Empfänger uC kennt oder eine Checksumme bilden?
Ich dachte da nur an paar Zahlen übertragen, die dann am Empfänger eine
Funktion auslöst, mehr soll es nicht sein.
(Vernetzte Wegbeleuchtung und sowas :-) )

Ich dachte da an 1200Bd und ohne Rückkanal. Daher entweder ständig 
übertragen oder mit Paketen, mit der Hoffnung, dass das nach zB 10x auch 
verstanden wurde? Ich suche hier keine fertige Lösung, aber Ideen wie 
das gut umsetzen könnte. (mit ATMega88 oder Tiny25)

Für Tipps besten Dank.

Edit: Ich möchte nur Steuerbefehle übertragen, zB wenn die Gegenstelle 
11xxxxyy (yy Prüfsumme z.B.) empfängt, wird was geschaltet. Wobei xxxx 
der Gegenstelle bekannt ist, was dann zu tun ist.

Nein, ich füttere keine Trolle, alle anderen Danke für Ideen.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Oliver _. schrieb:

> Nun die Frage, wie sollte ich in der Software eine Fehlererkennung
> aufbauen

Indem du dir erstmal selber deine Anforderungen klarmachst.

> Checksumme bilden?

CRC-Checksumme ist schonmal mittelgut. Es gibt schlechteres aber auch 
wesentlich besseres.

> Ich dachte da an 1200Bd und ohne Rückkanal.

Ohne Rückkanal heißt: Es muß das genügen, was fehlerfrei durchkommt oder 
sich korrigieren läßt. Damit fällt alles aus, was ganz oder zum Teil 
darauf beruht, Daten erneut anzufordern.
Die Tendenz bei solchen Lösungen ist definitiv immer, den ohnehin arg 
gebeutelten Kanal mit weit überwiegend völlig nutzlosem Traffic noch 
weiter zuzustopfen. Außerdem: die beteiligten Geräte zu weit überwiegend 
unnützem Stromverbrauch zu zwingen.

Funk ohne Rückkanal ist meistens nur genau eins: kompletter Schwachsinn.

von Mike (Gast)


Lesenswert?

Oliver _. schrieb:
> Nun die Frage, wie sollte ich in der Software eine Fehlererkennung
> aufbauen

Bevor du Fehler erkennen kannst, brauchst du eine Kodierung deines 
Signals, dass die Erkennung überhaupt erlaubt. Du kannst zum Beispiel 
von deinem Datenblock eine Prüfsumme berechnen, die du zusätzlich 
überträgst und beim Empfänger mit der dort für die empfangenen Daten 
berechneten Prüfsumme vergleichst.
http://www.zlib.net/crc_v3.txt

von Oliver _. (verleihnix)


Lesenswert?

c-hater schrieb:

> ..... kompletter Schwachsinn.

Viel reden, aber nichts sagen leider auch...

von Mike (Gast)


Lesenswert?

c-hater schrieb:
> Funk ohne Rückkanal ist meistens nur genau eins: kompletter Schwachsinn.

Bei Broadcast stehst du immer genau vor diesem Problem. FEC ist dafür 
gängige Praxis.

Um Einzelsymbol abzusichern, kann man eine Kodierung mit z.B. 
Hammingabstand drei zwischen den übertragenen Symbolen wählen, was die 
Koorektur einzelner Bitfehler und die Erkennung von Doppelfehlern 
erlaubt. Mehrfachübertragung mit ausreichend zeitlichem Abstand erlaubt, 
trotz Burst-Fehlern die Daten heil rüber zu bekommen.

von Oliver _. (verleihnix)


Lesenswert?

Mike schrieb:
> Du kannst zum Beispiel
> von deinem Datenblock eine Prüfsumme berechnen, die du zusätzlich
> überträgst und beim Empfänger mit der dort für die empfangenen Daten
> berechneten Prüfsumme vergleichst.

So in der Art dachte ich mir sowas, evt würde ich in einem Byte
mit 11 beginnen, dann 4 bit Nutzdaten und die letzten beiden Prüfbits.

Es sollen ja nur Steuerbefehle angenommen werden, und das recht simpel 
ohne Rückkanal.

von c-hater (Gast)


Lesenswert?

Oliver _. schrieb:

> Viel reden, aber nichts sagen leider auch...

Wenn du selbst eine derart drastisch formulierte Kernaussage nicht als 
Aussage erkennen kannst, dann ist bei deiner Wahrnehmung irgendetwas 
ganz schwer gestört...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Du kannst auch einfach ein Byte übertragen und danach das mit 0xFF 
verXORrte nochmal. Im Empfänger XORst du das erste mit dem zweiten Byte 
und wenn da nicht null rauskommt, wirfst du beide Bytes weg. Ist wegen 
der doppelten Bytezahl nicht so effektiv, aber hilft, wenn da nur ein 
Byte gestört wird, die anderen kommen durch.

von c-hater (Gast)


Lesenswert?

Mike schrieb:

> Bei Broadcast stehst du immer genau vor diesem Problem. FEC ist dafür
> gängige Praxis.

Jepp. Allerdings recht hoher Programmieraufwand und großer Overhead für 
die Redundanz. Sprich: Es stopft den Kanal zu. Weil die Redundanz eben 
so hoch gewählt werden muß, daß sie auch unter schlechtesten Bedingungen 
noch ausreichend ist.

Genau deswegen ist jeder bidirektionale Ansatz i.d.R. vorzuziehen. Der 
fordert Redundanz nämlich nur in dem Maße, wie die aktuellen Bedingungen 
des Kanals es erfordern.

Das geht eben nur dann nicht, wenn ein Broadcast funktional erforderlich 
ist.

von Mike (Gast)


Lesenswert?

c-hater schrieb:
> Funk ohne Rückkanal ist meistens nur genau eins: kompletter Schwachsinn.

Deine Aussage ist ziemlicher Schwachsinn. Beschäftige dich einfach mal 
mit Übertragungstechnik und der Theorie dahinter.

von Mike (Gast)


Lesenswert?

c-hater schrieb:
> Genau deswegen ist jeder bidirektionale Ansatz i.d.R. vorzuziehen. Der
> fordert Redundanz nämlich nur in dem Maße, wie die aktuellen Bedingungen
> des Kanals es erfordern.

Natürlich ist man mit bidirektionaler Übertragung in Bezug auf 
Kanalauslastung und Redundanz günstiger dran. Aber optimale 
Übertragungsrate ist hier offensichtlich nicht das Problem und die 
Zielrichtung der Frage.

Gegenüber Einzelsymbol Absicherung wäre eine Blocksicherung mit deutlich 
weniger Redundanz verbunden. Bei unidirektionaler Übertragung kann es 
natürlich vorkommen, dass der Kanal völlig dich ist. Dagegen helfen dann 
nur redundante Übertragungswege (z.B. Verwendung mehrerer Funkkanäle 
oder besser noch Funkkanäle auf verschiedenen Frequenzbändern).

von Oliver _. (verleihnix)


Lesenswert?

Mike schrieb:
> Aber optimale
> Übertragungsrate ist hier offensichtlich nicht das Problem und die
> Zielrichtung der Frage.

Man erkennt eben sofort, wer die Fragestellung verstanden hat
und wer nur mangels Privatleben die Zeit totschlagen muss.

Jedenfalls hat Matthias Sch. eine gute Lösung aufgezeigt und werde das 
auch so machen. Ich werde einfach testen, ob 10 Pakete mit zB 1 Sekunde 
Versatz
in meiner Umgebung ausreichen oder nicht. Wenn ja, wird die Sendung bis 
zur nächsten Steuermeldung eingestellt.

Signale mit über 1µV habe ich hier an der Rundstrahlantenne selten 
gemessen, eher im Bereich von 0,08µV, was dann schon weiter entfernte 
Sender sind
und somit für mein Nahfeld reichen sollte. Die Module senden mit 10dBm,
je nach Antenne schon ein guter Wert.

von c-hater (Gast)


Lesenswert?

Mike schrieb:

> c-hater schrieb:
>> Funk ohne Rückkanal ist meistens nur genau eins: kompletter Schwachsinn.
>
> Deine Aussage ist ziemlicher Schwachsinn. Beschäftige dich einfach mal
> mit Übertragungstechnik und der Theorie dahinter.

Das solltest du dann wohl auch den Entwicklern aller üblichen 
Funktechnologien empfehlen: GMS, UMTS, LTE, BT, WIFI usw. usf. Alle 
diese Technologien arbeiten (wann immer möglich) mit bidirektionalem 
Schlagabtausch. Und der Kram funktioniert...

Haben die alle sich deiner Meinung nach nicht hinreichend mit 
"Übertragungstechnik und der Theorie dahinter" beschäftigt? Dann stellt 
sich allerdings die Frage, warum du mit deiner Lösung nicht längst den 
Weltmarkt beherrschst...

An der mangelnden Nachfrage nach spektraler Effizienz bei Lösungen zur 
Kommunikation per Funk kann es wohl jedenfalls nicht liegen...

von tastendrücker (Gast)


Lesenswert?

c-hater schrieb:

>Das solltest du dann wohl auch den Entwicklern aller üblichen
>Funktechnologien empfehlen: GMS, UMTS, LTE, BT, WIFI usw. usf. Alle
>diese Technologien arbeiten (wann immer möglich) mit bidirektionalem
>Schlagabtausch. Und der Kram funktioniert...

Naja, wenn sich die Kommunikationspartner auch gegenseitig etwas zu 
sagen haben, dann ist ein Rückkanal wohl zwingend notwendig.

Aber wenn es nur Einen gibt, der ansagt, dann kann man sich den 
Rückkanal wohl sparen und die Übertragung mit einer weitaus 
kostengünstigeren Fehlererkennung ausrüsten.

von tastendrücker (Gast)


Lesenswert?

>Fehlererkennung

oder noch besser natürlich: Fehlerkorrektur.

von FEC (Gast)


Lesenswert?

Wie wär's wenn man die Daten mit dem Hamming Code codiert und falls 
Bündelfehler wahrscheinlicher sind auch noch interleaved?

von FEC (Gast)


Lesenswert?

Sorry für den doppelpost, man könnte die Daten aber auch 
faltungscodieren.

von Oliver _. (verleihnix)


Lesenswert?

soo, habe zwar noch nicht viel gemacht, aber der Sender ist fertig
und werden am Empfänger mit Logic Analyzer sauber decodiert, dass ganze 
mit 300bd. Man muss nur vorher ein Byte mit 0 senden, damit der Sender
einschwingen kann, sonst fehlen ein paar bits.
Selbst im Keller noch 5µV gemessen, da sollte das Signal draußen mit 
anderen Teilnehmern klar kommen, ist aber recht wenig los hier.
Ohne Daten bzw. Input auf Masse geht der Sender nach ca 300ms aus, was 
ja besser für den Rest der Umgebung ist.

Zum Hintergrund, ich habe mit LEDs (3W und 10W) den Weg zur Tür und 
Carport beleuchtet, mit IR Meldern vom China-Mann und etwas AVR-Technik. 
Da noch Platz ist, will ich je ein 433MHz Rx nachrüsten und einen 
kleinen Handsender, der dann eine Bewegung simuliert.

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.