Forum: HF, Funk und Felder RFM01/02 Bitfehler verkleinern


von stoney (Gast)


Lesenswert?

Gruß an Euch!

habe jetzt nach laaaaaangen probieren eine Verbindung zwischen RFM01 und 
RFM02 aufbauen können (Pollin Module 433MHz). Ich schleuse nach 
erfolgreicher Initialisierung (Hardware SDI) der Module einen Datenstrom 
mit 4800 bps extern (USART) über den FSK-Pin am RFM02 in den Mischer 
ein. Auf der Empfängerseite wird der Datenstrom aus dem DATA bin 
ausgelesen und über USART weggeschickt.

Das ganze klappt ganz gut ich habe sehr guten Empfang mein Oszi zeigt 
mir ein wunderbares Signal sowohl vor Sender und nach dem Empfänger.
Mein Problem sind Bitfehler die ohne jedes System auftauchen und mir 
meinen Datenstrom (bzw. einzelne Zeichen) unbrauchbar machen. Beim 
Datenstrom handelt es sich um ein GPS-Signal nach NMEA-0183 Standard.
In jeder Zeile des Protokolls tauchen mind. ein Zeichenfehler auf der 
auf einer Bitverfälschung basiert (im ASCII-Code binär angeschaut).

Da meine Übertragung auf Kabel beruht schließe ich Einstrahlungen aus. 
Auch ist mein Signal-Rauschabstand sehr groß...

Ist die PLL bzw. die FSK Modulation zu billig für einen ständigen 
Datenstrom?
Und meiner Erfahrung nach treten Bitfehler mit 10^-6 Wahrscheinlichkeit 
auf, bei mir viel zu häufig.

Bin dankbar für jede Idee von Euch.

von Andreas K. (a-k)


Lesenswert?

stoney wrote:

> Und meiner Erfahrung nach treten Bitfehler mit 10^-6 Wahrscheinlichkeit
> auf, bei mir viel zu häufig.

Ähmmm - du kriegst über eine ISM Funkstrecke einen Bitfehlerrate von 
1ppm und bist unzufrieden? Probleme gibt's...

Stichwort heisst hier: fehlerkorrigierenden Code verwenden.

von stoney (Gast)


Lesenswert?

Gruß,

nein nein nicht 1ppm bei mir...
Ich meinte nur ich erwarte eine Fehlerrate in dieser Größe. Meine liegt 
bei circa 1 Fehler pro 10 Zeichen (80 bit). Das ist mir zu hoch!

Eigentlich würde ich gerne von Euch wissen, ob das für die beschriebene 
Strecke als normal anzusehen ist oder ob da was falsch läuft...

Da das Datenformat ja 8n1 und fest ist, kann ich nicht mit Redundanz 
oder Parität arbeiten ohne den Protokoll Standard zu verletzen.
Ich bekomme zwar ne Prüfsumme mit aber die sagt mir ja nur das was 
falsch ist.

@Andreas:

woran genau denkst du da? (ich arbeite gerade an einer Software-Lösung 
die mir mit Hilfe von einer Maske die ich vorgebe (an Stelle x muß eine 
Ziffer stehen...) den String überprüft und wenn ein Fehler gefunden 
wurde mit einem gepufferten gleichen String (da alle 1s der neue 
Datensatz aus dem GPS kommt) vergleicht und ersetzt))

von Benedikt K. (benedikt)


Lesenswert?

Wie gross ist die Entfernung ?
Ich habe etwa 1 fehlerhafte Uebertragung alle 1kByte bei 10m quer durchs 
Haus mit 20kBaud.

von Martin L. (Gast)


Lesenswert?

Hast Du genug Taktwechsel im Code? Oder ist es sowieso Manchester 
codiert? Ansonsten kannst Du doch vor dem Funkkanal Redundanz einfügen 
und damit Fehler nachher herausrechnen. Braucht zwar u.U. noch einen uC 
vor dem Funkmodul - aber wenn es Dir so wichtig ist, wird es anders 
nicht gehen.

Viele Grüße,
 Martin L.

von stoney (Gast)


Lesenswert?

Gruß,

erstmal danke für Eure Antworten.

@Benedikt:
also die Entfernung über Kabel ca. 30m
Sende mit ca. -10dbm. Habe das ganze schon mal mit 60dB gedämpft da war 
immer noch die gleiche Fehlerrate wie wenn ich ein 1m langes Kabel 
verwende. (Kabel ist ein 50 Ohm Koaxkabel mit SMA-Steckern). Hast du 
noch irgendwelches schaltungstechnischen Aufwand betrieben? Sendest du 
mit Präambel jedes Byte einzeln oder auch so wie ich einen 
kontinuierlichen Datenstrom von extern?

@Martin:
Also USART bzw. EIA-232 ist NRZ kodiert. Wenn ich mir meine Daten 
anschaue sind da reichlich Pegelwechsel vorhanden. Sender und Empfänger 
haben ja die selbe Datenrate mit der sie das Signal abtasten da geht, 
glaube ich, nichts verloren. Wenn daß so wäre, müsste ich mit bestimmten 
Zeichenfolgen (viele Nullen) ja den Fehler reproduzieren können. Er ist 
aber zufällig verteilt.
Der uC ist schon vom initialisieren vorhanden (PIC 16FXX) und könnte 
auch benutzt werden... werde mal überlegen was sich da machen lässt.

falls noch jemand mit ähnlichem Aufbau arbeitet:
Ich bin an Euren Fehlerraten interessiert und an Euren Erfahrungen im 
Umgang mit Bitfehlern.

von Benedikt K. (benedikt)


Lesenswert?

stoney wrote:
> also die Entfernung über Kabel ca. 30m

Nur damit ich das richtig verstehe: Du hast die RFM ueber Kabel 
verbunden, nicht per Funk ?

> Hast du
> noch irgendwelches schaltungstechnischen Aufwand betrieben? Sendest du
> mit Präambel jedes Byte einzeln oder auch so wie ich einen
> kontinuierlichen Datenstrom von extern?

Ich sende die Daten direkt ueber das RFM12, ganz ohne Manchester oder 
aehnliches. Nur nach einem Byte mit dem Wert 0x00 oder 0xFF wird 0xAA 
gesendet, damit nicht ueber laengere Zeit keine Pegelwechsel vorhanden 
sind. UART hat ja mindestens 2 Flanken auf 10bit, das sollte eigentlich 
reichen.

von Michael U. (amiga)


Lesenswert?

Hallo,

bin auch etwas verwundert.
4800 Baud gehen über 30m auch mit Klingeldraht und RS232 Pegel ohne 
Fehler...

Welchen Sinn soll da eine HF-Übertragung haben?

Gruß aus Berlin
Michael

von stoney (Gast)


Lesenswert?

Ja Ihr habt mich richtig verstanden. Ich sende mit dem RFM über Kabel, 
der Sinn mmh... also ich übertrage das SAT-Signal vom meiner Antenne 
(mit ZF ca 950 bis 2GHz) auf einem Kabel mit dem GPS Träger von 433 MHz. 
Das ganze geht dann runter zu mir und wird dort wieder in SAT+GPS 
zerlegt.

Aber da ich momentan ja nur GPS mit dem RFM übertrage und noch gar keine 
SAT-ZF dazu, kommt es nicht zu Störungen durch Überlagern der Bänder.

Mal zu den RFM01/02 Einstellungen, vielleicht hab ich da was falsch 
verstanden:

RFM02(Sender)
gleiche Frequenz und Baudrate wie RFM01, Sendeleitung eben so das ca. 
-11dbm rauskommen, +/- 90 KHz Modulationsabstand vom Träger, Clk für PIC 
10Mhz, 15pF load Kapazität, Sleep, Power und Wake up erstmal aus, TX bit 
sync brauche ich ja für den Übertragungsmodus nicht?

RFM01(Empfänger)
gleiche Frequenz und Baudrate wie RFM02, 200 Khz Bandbeite, RSSI- 
Schwelle bei -61 (LNA Gain 0), Wake up/low duty erstmal aus, AFC aus, 
Digitales Filter ohne clock recovery und ebenso 10 Mhz und Kapazität wie 
oben.

Grüße!

von Martin L. (Gast)


Lesenswert?

Bastel mal ein Dämpfungsglied rein. Ich vermute Du mutest dem Empfänger 
einen viel zu hohen Pegel zu ...

von Michael U. (amiga)


Lesenswert?

Hallo,

irgendsowas hatte ich geahnt, macht Sinn... ;)

Ansonsten würde ich auch Übersteuerung des Empfängers vermuten, die 
Kabeldämpfung ist ja merklich kleiner als die Dämpfung über eine 
Luftstrecke.

Gruß aus Berlin
Michael

von stoney (Gast)


Lesenswert?

Gruß,

@Michael:
Das klingt schon logisch an Übersteuerung hab ich auch schon gedacht, 
werde auf jeden Fall mal mit der Dämpfung experimentieren...

Mir stellt sich jedoch die Frage:
Wo kommen die Bitfehler den her?
Die Modulation verhindert definitiv Bitverfälschungen auf dem Weg zum 
Empfänger.
Und vor dem Sender bzw. hinter dem Empfänger hab ich nur noch einen 
MAX232 Wandler für die TTL-Pegelanpassung. Also: Sender oder Empfänger 
sind die wohl die Fehlerquelle. Ist der VCO der PLL zu langsam oder wie?

Hat da jemand von Euch ne Idee wo die Fehler liegen?

von Michael U. (amiga)


Lesenswert?

Hallo,

vom Prinzip sind die Funkmodule auf Daten angewiesen, die möglichst 
keinen Gleichspannungsanteil haben. Deshalb Manchester-Codierung o.ä.

Wenn Du normale UART-Daten schickst und z.B. eine 0 sendet, dann gibt es 
nur eine H/L-Flanke am Begin des Startbits, dann ändert sich über alle 
Bitzeiten garnichts bis das Stopbit beginnt.
In dieser Zeit konnen Regelung, PLL, was-weiß-ich machen, was sie 
wollen. Auch durcheinanderkommen...

Vielleicht wäre eine primitive Modulation einfacher gewesen, Oszillator 
mit den UART-Daten tasten ond zum Empfang einen NE567?

Frequenz irgendwo bei 200-300kHz? Allerdings weiß ich nicht, ob da 
Filter nötg werden, falls Sat-Receiver/LNB/Multiswitch diesen Bereich 
noch kurzschließen.

Gruß aus Berlin
Michael

von stoney (Gast)


Lesenswert?

Gruß,

@Michael:
im Prinzip verstehe ich ja worauf du hinaus willst. Jedoch tritt dieses 
Problem bei jedem Zeichen auf. Wenn ich also vor dem Empfänger einen 
Rechner, und nach dem Sender einen Rechner über UART mit den Modulen 
verbinde und über HyperTerminal einfach mal ein Zeichen (ASCII) mit 
vielen Bitwechseln schicke kommen die selben zufälligen Fehler wie wenn 
ich Zeichen mit wenig Flankenwechsel schicke.

z.B: "j" (01101010) selbe Fehlerrate wie "0" (01100000) und das mit 
zufälligen Abständen zwischen den Fehlern.

von Martin L. (Gast)


Lesenswert?

Bei zu großen Leistungen am Empfänger kommt es durch Nichtlinearitäten 
zu der sogenanten Intermodulation. Besonders schilmm sind die 
Intermodulationsprodukte dritter Ordnung. (Hat was mit der aproximation 
der Nichtlinearität in einer Taylorreihe zu tun.)
Diese verfälschen das Signal und verschlechtern das SNR. Und das erhöht 
dann wieder die Bitfehlerwahrscheinlichkeit.

Viele Grüße,
 Martin L.

von Benedikt K. (benedikt)


Lesenswert?

Sendest du immer nur jeweils ein Zeichen, oder mehrere hintereinander ?
Wenn du immer nur eines schickst, dann liegt das ganz einfach daran, 
dass sich der Empfänger erst auf das Signal einstellen muss, da dieser 
ein Hochpass eingebaut hat. Versuche also mal mehrere Zeichen direkt 
aufeinander zu schicken, und schau ob dann immer noch in jedem Zeichen 
Fehler auftreten.

von stoney (Gast)


Lesenswert?

Gruß,

nochmals Danke für Eure Hilfe,

@Martin:
Das Intermodulationsproblem ist mir bekannt, ich werde mal schauen ob 
ich mit Dämpfung etwas erreichen kann.

@Benedikt:
Nun das kommt auf die Definition von "direkt aufeinander" an ich habe 
die Wiederholrate der Tastatur schon mal mit langsam und schnell 
ausprobiert und dann einfach eine Taste gedrückt gelassen.
Folge: keinerlei Veränderung sowohl bei ca. 1 Zeichen pro Sekunde als 
auch ei max. Geschwindigkeit treten die Bitfehler mit gleicher 
Verteilung auf. Wie gesagt ich werde mit der Dämpfung vom Empfänger 
nochmal etwas rumspielen, vielleicht bringt das ja doch was.

Ich melde mich sobald ich was rausgefunden habe!

von Benedikt K. (benedikt)


Lesenswert?

stoney wrote:

> Nun das kommt auf die Definition von "direkt aufeinander" an

Direkt aufeinander heißt: Direkt nach dem Stopbit eines Zeichens kommt 
Lückenlos das Startbits des nächsten Zeichens.
Wenn du die per Hand sendest, dann ist das viel zu langsam.

von stoney (Gast)


Lesenswert?

Gruß,

Problem gelöst. Nach 3 Tagen probieren habe ich die Frequenzauslenkung 
des Senders mal auf 60 Khz reduziert, und siehe da, es funktioniert 
fehlerfrei.

Vielen Dank an alle die sich um mein Problem gekümmert haben. Ihr wart 
echt SUPER!

P.S.: Da ich in der Firma die entsprechenden Messgeräte habe --> falls 
jemand irgendwelche Verläufe oder Graphen von dem RFM01/02 braucht 
einfach hier anfragen.

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.