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
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 ;)
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.
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
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...
vielen Dank für die vielen Infos... ich werde sie nach und nach mal umsetzen und schauen was passiert. :-) Gruß Markus
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 !
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 ?
'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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.