mikrocontroller.net

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


Autor: Bernhard S. (bernhard)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: manchester (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
manchester

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist mir so peinlich, wie ich im Beitrag Manchester geschrieben habe, 
sorry.

Bernhard

Autor: manchester (Gast)
Datum:

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

Autor: Karsten (Gast)
Datum:

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

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris Zeising (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Warum so kompliziert?

Was meinst Du damit?

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

was denn?

Autor: Chris Zeising (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Chris Zeising (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chris Zeising (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: AGast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.