Forum: Mikrocontroller und Digitale Elektronik Implementierung des Manchester-Codes/Hammingcodes zur Funkübertragung?


von Manuel M. (Gast)


Lesenswert?

Hallo Leute,
Schon seit längerem habe ich hier zwei Funkmodule (Linx Technologies 
TXM-433-LR und RXM-433-LR) rumliegen, die ich letztes Wochenende mal zum 
Leben erweckt habe.
Datenblatt: 
http://www.linxtechnologies.com/Documents/TXM-xxx-LR_Data_Guide.pdf

Nachdem der in den Appnotes beschriebene Rauschfilter nicht funktioniert 
hat, hab ich einfach den analogen RSSI-Ausgang des Empfängers angezapft, 
durch einen Komperator durch - schon hab ich ein wunderschönes Digitales 
Signal.

Das ist aber soweit kein Problem, Datenübertragung von UART zu UART 
funktioniert! Aber: nur auf einer Distanz Luftlinie von ca. 100m (mit 
10mW Sendeleistung). Darüber hinaus kommt nurnoch Müll am Empfänger an.

Jetzt erst bin ich im Datenblatt der Funkmodule darauf gestossen, dass 
diese keine interne Fehlerkorrektur/Modulation haben - was vorne 
reinkommt, kommt hinten wieder raus...

Nun bin ich über die Mikrocontroller.net Seite zum Thema 
"Funkübertragung 433MHz" gestossen - wo berichtet wird dass man mit 
billigen Aurel-Funkmodulen Distanzen von 1km überbrücken kann...
Das hat mich dann doch sehr verwundert, das müsste mit meinen Modulen 
doch auch möglich sein...

Mein Problem ist aber, wie verpacke ich die Daten richtig?
Ich hab was gelesen von Manchester-Kodierung, die kann ich in MikroBasic 
auch mit wenigen Zeilen realisieren, das Ergebnis ist aber immernoch 
Müll.

Wie würdet ihr so ein Problem angehen? im Forum habe ich nicht viel zu 
dem Thema gefunden, ausserdem bin ich Funktechnisch nicht so sehr 
erfahren...

Ziel ist, ein Mikrocontroller soll alle 2 Stunden Messwerte über 
Software-UART entgegennehmen, diese "verpacken" und dann über ein Pin 
auf den Funksender geben. Die Gegenstelle empfängt diese Daten wieder, 
und schickt sie über UART an den Computer.

Könnt ihr mir dabei helfen, diese Protokolle (Manchester, Hamming, 
etc... ich blick da nicht ganz durch) zu verstehen/zu nutzen?

LG,
Manuel

von PeterL (Gast)


Lesenswert?

Moinsen,

Manuel M. schrieb:
> Könnt ihr mir dabei helfen, diese Protokolle (Manchester, Hamming,
> etc... ich blick da nicht ganz durch) zu verstehen/zu nutzen?

Sicher, mit welchem Compiler/Sprache arbeitest du denn? Benedikt hat ja 
für die RFM-12 Module mal was geschrieben, such im forum mal nach "RS232 
Funkbrücke" war glaub in C

Manuel M. schrieb:
> Das hat mich dann doch sehr verwundert, das müsste mit meinen Modulen
> doch auch möglich sein...

Da ist garantiert mehr drin! Kenne zwar deine Module nicht, aber laut 
dem Datenblatt vom Sender kann der ja bis zu 500mW. Ich hoffe aber doch, 
du hast dein Modul ordentlich auf 10mW begrenzt, oder?
Eben, auf die Richtige Modulation/Übertragung kommt es an!
Probier mal für den Anfang, jedes Bit zweimal zu senden, einmal normal, 
und einmal invertiert, hinten drann dann noch den CRC. Im Empfänger 
einfach die Bits wieder richtig zusammenbauen. Eine 
Empfangs-/Prüfroutine (mithilfe vom CRC) solltest du eigentlich recht 
einfach zusammengeschustert bekommen...

Ist natürlich nicht perfekt, aber probier mal ob du damit mehr 
Reichweite hinbekommst.
Ansonsten schau dir einfach mal Benedikts Routinen für das RFM12 an, 
oder kuck mal den Source auf der Seite "Funkübertragung mit 433MHZ" 
nach, da war (glaub ich) auch ein source (leider in ASM).

Hoffe das hilft dir!

peterli

von Manuel M. (Gast)


Lesenswert?

Ok, Danke klingt ja schon mal gut. Werde ich morgen auf Arbeit mal 
ausprobieren, da hab ich auch ein besseres Oszi ;-)
Ist diese art der Fehlerkorrektur eine Alternative zum Hamming-Code? 
Kann diese Methode überhaupt etwas korrigieren?
Manchester-Code verwende ich jetzt, verhindert immerhin die Störungen 
beim Anfang des Sendens...

Kann mir nicht irgendjemand Tipps dazu geben?

LG,
Manuel

von Rainer (Gast)


Lesenswert?

Der Manchester-Code sorgt dafür, das deine Daten gleichspannugsfrei 
sind. Dafür ist die Bitrate dabei doppelt so hoch wie die Datenrate. Für 
die Sicherheit der Datenübertragung bringt das IMO nicht sonderlich 
viel.

Bei den Hamming-Codes werden Zusatzbits hinzugefügt, so dass sich 
größere Symbolabstände ergeben (grob: gesendete Zeichen unterscheiden 
sich um mehr als ein Bit). Durch diese Redundanz können viele Fehler 
erkannt und in Grenzen auch korrigiert werden.

Gruß
Rainer

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Rainer schrieb:
> die Sicherheit der Datenübertragung bringt das IMO nicht sonderlich
Man kann beweise das ein Wiederholungscode keine Verbesserung bringt.
Bei den RFM Modulen bringt aber eine Kodierung auch nicht soviel, hatte 
damals etwas mit Benedikt darüber gechattet, Ergebnis war, das entweder 
das Byte korrekt ankommt, oder garnicht, scheint also intern schon eine 
Fehlerkorrektur vorzunehmen.
Um den Gleichspannungsanteil gering zu halten kann man auch einfach ein 
Bitstuffing durchführen, was all diese Maßnahmen bringen hängt aber sehr 
stark vom Modul ab, am besten wäre es das Analoge Signal zu erhalten 
dann kann man sehr viel mehr rausholen.

von Manuel M. (Gast)


Lesenswert?

Läubi .. schrieb:
> am besten wäre es das Analoge Signal zu erhalten

Sowas in der Richtung hatte ich auch versucht... Allerdings fehlt mir 
nurnoch ein Sehr schneller ADC dafür, dann wär da sicher mehr drin oder? 
;-)
Derzeit tut es einfach ein LM324 als Komperator mit nem Poti um die 
"Empfindlichkeit" einzustellen...

Läubi .. schrieb:
> Um den Gleichspannungsanteil gering zu halten

Den halte ich derzeit mithilfe des Manchester-Codes ziemlich klein ;-) 
Kostet mich in MikroBasic nur wenige Code-Zeilen und hat zumindest das 
Problem mit den bei Sendeanfang zerstückelten Bits behoben.


Läubi .. schrieb:
> Man kann beweise das ein Wiederholungscode keine Verbesserung bringt.

Heisst das, es ist nicht unbedingt sinnvoll, sich soviel Gedanken mit 
Hamming-Code und co zu machen, sondern lieber die Daten einfach auf gut 
Glück mehrfach senden, in der Hoffnung der Empfänger kriegt von den 
10-100 Wiederholungen eine korrekte Version?

Vielen Dank schonmal für eure Hilfe!

von Rainer (Gast)


Lesenswert?

Läubi .. schrieb:
> ..., scheint also intern schon eine
> Fehlerkorrektur vorzunehmen.

Die RXM-xxx-LR/TXM-xxx-LR Module von Linx machen gar nichts digitales 
mit den Daten, d.h. beim Sender wird einfach der Träger mit dem 
digitalen Eingangssignal moduliert. Beim Empfänger wird es demoduliert 
und über einen Schmidt-Trigger ausgegeben.

Gruß
Rainer

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Manuel M. schrieb:
> Heisst das, es ist nicht unbedingt sinnvoll, sich soviel Gedanken mit
> Hamming-Code und co zu machen, sondern lieber die Daten einfach auf gut
> Glück mehrfach senden,
NEIN! genau umgekehrt ;)
Wobei, wenn du es dir leisten kannst eine derart viel Bandbreite zu 
verschwenden, kann man mit einem passendem Code noch etwas rausholen, 
wiederholen bringt nur was wenn die Daten verloren gingen.

Rainer schrieb:
> beim Sender wird einfach der Träger mit dem
> digitalen Eingangssignal moduliert
puh... na dann muß man wirklich etwas mehr Aufwand treiben.

Manuel M. schrieb:
> Allerdings fehlt mir nurnoch ein Sehr schneller ADC
> dafür, dann wär da sicher mehr drin oder?
"Mehr drin" bezieht sich eigentlich immer darauf, das man mit weniger 
"Zusatzbits" eine bessere Fehlerkorrektur erreicht, ein bischen was 
findest du z.B. hier:
http://www14.informatik.tu-muenchen.de/konferenzen/Jass05/courses/4/papers/Pavol_Hanus.pdf
Wenn dir die Datenrate egal ist, und du nur eine hohe Fehlerkorrektur 
haben möchtest ist es erstmal egal, der Kanal sollte aber eine 
Fehlerwahrscheinlichkeit < 0.5 haben ;P

Oder man steigt auf andere Finkmodule um, die schon alles "an Board" 
haben, den auch wenn das Thema Kanalkodierung äußerst spannend ist, so 
steckt der Teufel doch häufig im Detail, und ich denke dein Hauptziel 
ist ja nicht die feinheiten der Datenübertragung zu ergründen ;)

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.