Forum: Mikrocontroller und Digitale Elektronik Funkmodule, RS232, manchester code


von HAL9000 (Gast)


Lesenswert?

Hallo,
Arbeite gerade an schaltungen mit Funkverbindung (868mhz AM, die teile
von Conrad) für uC zu PC bzw uC zu uC verbindungen, um RS232 zu
ersetzen. Die Module sind aber ne reine Funkstrecke, die Signale
sollten eigentlich somit noch Manchester-codiert werden.
Gibt es Tricks, um über standard RS232 (RX/TX) nen ähnlichen Effekt zu
erreichen, in dem man bestimmte Byte-folgen sendet ? (zB
charakterzeichen die besonders häufig 0/1 wechsel haben) Oder muss ich
definitiv n eigenes Protokoll normal über I/O Pins aufbauen ? Wie würde
das Softwareseitig aussehen ? (weiß noch nicht so recht, wie ich flanken
erkennen soll, und somit auch den Takt)

Ich hab testweise natürlich auch schonma ohne Manchester das ganze
einfach direkt an RS232 rangepappt. (PC zu uC und über kabel zurück zu
PC)
Ulkig ist, dass es auf kurze Distanzen (1-2m) auch ohne Manchester
wunderbar funzt, wenn ich alle 5 zeichen ein Leerzeichen zwischen
sende. Aber auch nur bei 9600 baud, alle anderen raten gehen nicht, und
das obwohl die Funkmodule fürne Bandbreite von 2khz sind.
Aber bei >3m distanz kommt nur noch Müll an.

Was für möglichkeiten gibts, die Übetragungssicherheit zu erhöhen, aber
möglichst "nah" am RS232 standard zu bleiben ?

schonmal danke und grüße, HAL9000

von Beeblebrox (Gast)


Lesenswert?

Also von der Reichweite sind meine auch nicht so der Brüller (habe das
einfache 433MHz Teil von Conrad). Ich habe da nen Draht an die Antenne
gelötet (70cm glaub ich bei 433MHz), damit komme ich zumindest durchs
Zimmer. Wenn Du also nur Schaltsignale senden willst kannst Du Dir ja
Bitmuster aussuchen in denen nicht grade 5 Nullen hintereinander
gesendet werden. Für Daten musst Du wohl auf Manchester ausweichen.
Vielleicht ist das auch garnicht so schwierig zu implementieren: Ein
regelmäßiger Interrupt (Doppelt so schnell wie die Grundfrequenz) macht
den Flankenwechsel und beachtet dabei den Datenpuffer. Natürlich kostet
es Zeit bis das so funktioniert wie gewünscht. Aber ich würde den Code
dann vielleicht auch mal gebrauchen können ;)

von HAL9000 (Gast)


Lesenswert?

jo die 433er und 868er sind baugleich nur andere quarze...
naja und das senden von manchester ist ja einfach, aber das empfangen,
dann muss man ja die Abtastung höherfrequent sein, um die Taktrate und
fehler zu erkennen.
Außerdem hab ich bemerkt, dass die Funkstrecke nicht nur probleme wegen
mehreren gleichsignalen hat, der dreht auch willkürlich ne menge bits
durch die gegend wie normale störungen, habe jetzt folgendes
beschlossen:
Bits in ganze Bytes codieren, und zwar in 00001111 oder 11110000, und
jeweils im higher und lowerbyte gucken, wo die anzahl einsen überwiegt.
das sollte sowohl gegen gegen Bitdreher durch störungen als auch gegen
gesamte synchronisations-verschiebung sicher sein...

naja wenn jemand noch schlaue lösungen oder kommentare hat, trotzdem
gerne immer her damit.

von Markus Reichert (Gast)


Lesenswert?

Hallo,

ich sitze auch gerade mit meinen neuen 433Mhz-Modulen von Conrad vor
meinem PC und versuche mit Hilfe des STK500 mal ein paar Daten vom uC
zum PC zu senden - aber bei mir kommt nur Müll an, und das bei jeder
Baudrate.

Habt ihr die Module direkt an den uC gehängt oder an die RS232-Pegel?
Ich habe nämlich beides probiert und es funzt vorne und hinten nicht.
;-)

Vielleicht habt ihr mir einen Tip, damit ich mal einen sinnvollen
Anfang finde. :-)

Danke und Gruß
Markus

von HAL9000 (Gast)


Lesenswert?

also kann ja ma so die schritte sagen, die ich verfolgt bin:
- erstmal ein einwandfreien uC proggen, um fehler dort auszuschließen,
am besten an kabel-gebundenes RS232 testen, und zwar einen
"Echo"-tester, also einer, der einfach das, was er an RX bekommt,
wieder an TX ausspuckt. So kann man einfach alles vom PC aus testen,
das was man ihm schickt, soll er auch wieder zurückspucken.
- Hab nun PC -> MAX232 -> Funk -> -> Transi -> uC -> MAX232 -> Draht ->
PC gemacht.
- Die Conradmodule vertragen auch direkt RS232 pegel, und 5V für RX vom
uC reicht auch über Transi, also PC -> Funk -> Transi -> uC..... geht
auch
- mit nem vernünftigen Terminalprogramm (Hypterterminal ist voll für
die Tonne) was senden und gucken was ankommt.
- es hilft am Empfängersignal direkt noch vor der Transistufe ma ne LED
anzuheften, wenn die rumflackert, sendet der Sender schonma korrekt.
- bei mir war 9600 baud die einzige Baudrate, die halbwegs was
vernünftiges produzierte.
- Bedenke, dass du ab 1-2 meter enorme Übertragungsfehler bekommst, da
kommt man leider nicht um ne Manchestercodierung oder was besseres
(siehe mein letzten post) aus...
- analysier deine Daten mal binär, da sieht man sehr gut, wenn bits
umgedreht sind, oder die ganze Zeichenfolge bitweise verschoben ist
(weil RS232 ja 8 bit pakete nimmt, wenn das Startbit verschoben ist,
ist natürlich das komplette drauffolgende Paket schrott)
- Die besten ergebnisse bekam ich, wenn ich vorweg 01010101 und dann
ein Leerzeichen (00100000) gesendet habe und alle 5 zeichen ein
leerzeichen dazwischen...
- die ersten Zeichen sind sehr wichtig und immer kaputt, nach 3-4
zeichen ists eingependelt und der burst danach kommt auch meistens heil
an. also immer am besten nen string mit 20-30 zeichen senden, testet
sich am besten.

aber wie gesagt, ein vernünftiges übertragungssicheres protokoll
(wenigstens manchester) sollte man schon irgendwann einbauen, wenn man
über das "spielen" hinaus ist, und wirklich was sinnvolles anfangen
möchte...

von Markus Reichert (Gast)


Lesenswert?

vielen Dank für die vielen Infos...

ich werde sie nach und nach mal umsetzen und schauen was passiert.
:-)

Gruß
Markus

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Also, wir arbeiten auch mit 869 MHz.

Die Empfänger sind recht preiswerte Typen von einem Italiener, der bei
Hy-Line verkauft wird. Die haben auch passende Sender, aber die haben
nicht genug Rums, darum nehmen wir 500mW-Sender von ARF.

Man muß sich mit der Materie etwas beschäftigen!
Bei AM-Modulation:
Der Sender ist an, wenn er eine "1" sendet und aus, wenn eine "0"
kommt.

Ist der Sender aus, schwingt der Empfänger wild rum !

Manchester-Code ist ja ganz nett, aber ich habe es angenähert !

Ich sende zuerst mal so 5-10 Zeichen $55 oder auch $AA, d.h. Zeichen
mit stark wechselnden Bit-Folgen. Darauf kann sich der Empfänger
einschwingen und die RS-232 findet START- und STOP-Signale.
Dann kommt 1 Zeichen zum Erkennen des Anfangs (bei mir $96 wegen
Hannover) und dann sende ich meine Nutzlast.
Diese habe ich codiert: Je Bit übertrage ich 4 Bit.
0=$5, 1=$A (jeweils stark wechselnde Bits)
01=$5A
01100111= $5A $A5 $5A $AA
Damit habe ich einen stark wechselnden Bitstrom, mit dem sich Sender
und Empfänger finden. Es sind halt nicht viele "1" oder (schlimmer)
"0" hintereinander.
Richtigen Manchestercode erzeugt man nicht so einfach mit dem UART, da
müßte man dann jedes Bit einzeln "von Hand" erzeugen...

Es läuft!

Gelegentliche Übertragungsfehler (schon allein, weil es auch andere
Sender gibt) müssen bedacht werden !

von HAL9000 (Gast)


Lesenswert?

hallo,
das ist natürlich nette übertragungsssicherheit mit doppelten
manchestercode (0101 für 0 und 1010 für 1) allerdings hab ich noch ne
Frage: neben einzelnen Bitfehlern (die so ja erkannt und korrigiert
werden können) hab ich das größte Problem mit der
synchronisations-verschiebung, und das wäre bei 0101 / 1010 codierung
ja Fatal, da das eine zum anderen wird.
tritt das problem bei deiner methode auch auf, oder ist das
vernachlässigbar ?

von Axel R. (Gast)


Lesenswert?

'Nabend

U.a. Simon hat bei seiner Propellerclock gezeigt, wie man Manchester
codiert und wieder decodiert. Kann man dieses einfache Prinzip nicht
hierauf auch verwenden? Nehmt doch auch einen 1KHz Träger, den ihr in
der Phase umtastet. Geht das nicht?

Viele Grüße
AxelR.

von Bernhard S. (bernhard)


Lesenswert?

Ein Beispiel für Assembler-Freunde:

Beitrag "RS232  433MHz  Mancestercode / ATmega8 (Assembler)"

Bernhard

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.