Forum: Projekte & Code RS232 / 433MHz / Mancestercode / ATmega8 (Assembler)


von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

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

von manchester (Gast)


Lesenswert?

manchester

von Bernhard S. (bernhard)


Lesenswert?

Das ist mir so peinlich, wie ich im Beitrag Manchester geschrieben habe, 
sorry.

Bernhard

von manchester (Gast)


Lesenswert?

man findet es sonst nicht, weil 2 mal falsch geschrieben :-)

von Karsten (Gast)


Lesenswert?

Hallo, ich weiß der Beitrag ist schon ein bischen älter....
doch habe ich eine frage, mit welcher Baudrate arbeitet diese Schaltung?

von Wolfgang (Gast)


Lesenswert?

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.

von Chris Zeising (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Bernhard S. (bernhard)


Lesenswert?

> Warum so kompliziert?

Was meinst Du damit?

>Läßt sich mit auch mit der UART realisieren.

was denn?

von Chris Zeising (Gast)


Lesenswert?

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.

von Bernhard S. (bernhard)


Lesenswert?

>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)

von Chris Zeising (Gast)


Lesenswert?

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.

von Bernhard S. (bernhard)


Lesenswert?

>... 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

von Chris Zeising (Gast)


Lesenswert?

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.

von AGast (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.