Ein kleines Beispiel, wie ein RS232 Signal per Funk (z.B. 433MHz Module) übertragen werden kann. Die Codierung efolgt über den Manchaster-Code. Der Sender verfügt über einen 256 Byte großen Puffer, kann aber ohne weiteres noch aufgebort werden. Störsignale werden hinreichend erkannt und durch die genaue Impusanalyse weitestgehend unterdrückt. Protokollaufbau: Drei Startbits teilen den Empfänger mit, dass noch 8 Daten-Bits folgen. Wärend ein Bit übertragen wird, achtet der Emfänger darauf, dass ein Flankenwechsel im richtigen Zeitfenster erfolgt. Ist der Flankenwechsel nicht plausibel, werden alle Bits des Datenpaketes als ungültig deklariert und der Empfänger wartet erneut sehnsüchtig auf den nächsten Datenstrom. Das Übertragungs-Protokoll ist relativ einfach gehalten, 3 Startbits und 8 Datenbits. Theoretisch könnte man es auf 1 Startbit (Synchronisations-Bit) und 8 Datenbits reduzieren. Ohne weiteres könnte man noch weitere Adress-Bits hinzufügen, wenn mehrere Empfänger bzw. Sender bedient werden sollen. Bernhard
Das ist mir so peinlich, wie ich im Beitrag Manchester geschrieben habe, sorry. Bernhard
man findet es sonst nicht, weil 2 mal falsch geschrieben :-)
Hallo, ich weiß der Beitrag ist schon ein bischen älter.... doch habe ich eine frage, mit welcher Baudrate arbeitet diese Schaltung?
Karsten schrieb: > Hallo, ich weiß der Beitrag ist schon ein bischen älter.... > doch habe ich eine frage, mit welcher Baudrate arbeitet diese Schaltung? Guckst du im Code, was da steht.
Warum so kompliziert? Läßt sich mit auch mit der UART realisieren. Die verwendete Baudrate beträgt in dem Fall das zehnfache der ge- sendeten.
> Warum so kompliziert? Was meinst Du damit? >Läßt sich mit auch mit der UART realisieren. was denn?
Gemeint ist die Ansteuerung des Sendemoduls. Laut Datenblatt (QFM-RX1) sollte das Tastverhältnis min. 40 max. 60% betragen. Die Ursache dafür ist der Decoder, der nach dem PLL-Prinzip arbeitet und daher bei längeren Phasen mit konstantem Level "ausrastet". Daher auch die Verwendung des Manchester Code. Ich fand es jedenfalls einfacher und naheliegender das mit der seriellen Schnittstelle zu realisieren. Ist jedenfalls getestet und funktioniert recht gut.
>Ich fand es jedenfalls einfacher und naheliegender das mit der >seriellen Schnittstelle zu realisieren. Ist jedenfalls getestet >und funktioniert recht gut. Kleine Anmerkung: Es ist manchmal besser, Lösungsvorschläge etwas detailierter zu begründen und zu erläutern, erspart Rückfragen. Fragen: Ich vermute, Du speist die seriellen RS232-Daten vom Prinzip direkt in ein TX-Sendemodul? (Auf diverse Intervaceschaltungen wollen wir jetzt nich eingehen, das ist ein anderes Thema) Und das RX-Empfangsmodul stellt Dir die Daten wieder zur Verfügung? Du verzichtest demnach komplett auf eine Manchester-Codierung? (Es gibt ja mehrere Arten einer Manchester-Codierung) Meine Meinung dazu: Es funktioniert, aber (und jetzt bitte weiter lesen) es kann Probleme mit der Zuverlässigkeit der Datenübertragung geben. Was wäre, wenn bei mehrere hintereinander gesendete Datenbytes die Start und die Datenbits die gleichen Pegel aufweisen? (Datenbyte= "0" bzw. "255", ev. vorhandene Stop-Bits vernachlässigt) Das Tastverhältnis ist dann schon nicht mehr im geforderten Bereich :-( Wenn die Empfangsbedingungen zu wünschen übrig lassen, in Gebäuden ist man manchmal froh, wenn die kleinen Sendeleistungen den Empfänger im Nachbarzimmer zuverlässig erreichen. Meine Erfahrung, habe dazu viele Versuchsserien gefahren, gerade die "preiswerten Empfangsmodule" benötigen eine Übertragungsverfahren, bei dem das optimale Tasverhältnis angestrebt wird. (z.B. Manchester)
Nun ja. Du hast da absolut recht. Aber wohl meinen Programmcode nicht gelesen. Der Trick besteht darin, die Byts in Bits zu zerlegen und dadurch einen steten Wechsel zu erzeugen. Jedes Byte, dass über die serielle läuft, besteht aus 10 Bit. 1 Startbit, 8 Daten und einem Stopbit. Durch die Beschränkung auf zwei Byte, nähmlich 0xF8 und 0xE0 erhält man zwei Signale mit einem Tastverhältnis von 6 zu 4 bzw. 4 zu 6. Und schon hat man eine 1 oder eine 0. Mal 8 und das Byte ist komplett. Daher ist die ursprüngliche Baudrate etwa das zehnfache der gesendeten. Ich habe meine Module mit 38k4 betrieben, was letztendlich auf ca. 3k8 hinauslief. Über die Reichweite kann ich dabei nicht klagen.
>... Aber wohl meinen Programmcode nicht gelesen. Ein Assemblerprogramm liest man nicht einfach mal so, die einzelnen Befehle versteht man schon, aber der Komplettzusammenhang ist nicht immer gleich erkennbar. >Der Trick besteht darin, die Byts in Bits zu zerlegen.... Das macht auch mein Programm, während der Bit-zerlegung des Daten-Bytes wird gleich noch bei jedem einzelnen Bit die Manchester-Codierung vorgenommen. Die USART-Einstellung spielt keine Rolle, "jede" USART-Einstellung (Parität, Baudrate usw) ist möglich. Wurde ein serielles Byte empfangen, dann beginnt eine spezielle Prozedur, um dieses Daten-Byte per HF zu senden. Die Prozdedur beginnt mit dem sogenannten "Einschwingen", Dummys werden gesendet, damit der oder die Empfänger sich auf die HF-Signale einstellen können.... Das ist ein bewährtes Verfahren, hab noch keinen Hersteller von Funk-Sensoren gefunden, der es nicht so macht. Mag sein, dass Deine Empfänger unter den derzeitigen physikalischen Bedingungen sehr gut funktionieren, kannst Du es auch für andere garantieren? ...Und erst dann werden diverse Bytes (s.Protokollaufbau) und das eigentliche Daten-Byte, natürlich alles per Manchester, gesendet. Die HF-Baudrate kann durch die Timer-Einstellung auf die Funkmodule angpasst werden. Mir fällt gerade ein, der Protokollaufbau ist noch verbesserungsfähig, er könnte so gestaltet werden, dass eventuell fehlerhafte Bits herausgerechnet werden können (s. UKW-RDS-Protokoll) Gut, dass wir nochmal darüber geredet haben :-) Grundanliegen meines Beitrages war nicht die einfache, sondern eine "zuverlässige" Datenübertragung. Bernhard
Ok. Letzter Versuch. Meine Routinen wandeln mit Hilfe der UART die Bits in Manchester Code um. bzw. hieraus wieder zurück. Nix Protokoll. Unterste Layer wenn Du so willst. Eigentlich nur eine von vielen Möglichkeiten.Allerdings schlicht, kompakt und leicht implementierbar. Nicht mehr aber auch nicht weniger. Was die Zuverlässigkeit der Übertragung betrifft, wäre wohl ein CRC die Methode der Wahl.
Durch CRC werden die übertragenen Daten geprüft, auf die Qualität der Datenübertragung hat CRC keinerlei Einfluss. Manchester Kodierung verbessert die Datenübertragung (bzw. Reichweite).
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.