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
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
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
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
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.
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!
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
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 ;)