www.mikrocontroller.net

Forum: Projekte & Code Manchester Coding


Autor: Manni (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Dieses Thema wurde hier im Forum schon öfters diskutiert. Habe aber
bisher noch keinen fertigen Assembler Code dazu gesehen. Da ich diesen
selber auch benötige, habe ich mal einen einfachen und schnellen
Algorithmus zusammen geschrieben und getestet.

Der Algorithmus kann noch schneller gemacht werden, wenn man die
Fehlerabfrage im Decoding weg lässt.

Kommentare immer gerne erwünscht.

Gruss Manni

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehlt da nicht ne ganze Menge ?

Wie stellt man die Baudrate ein ?

Welcher Pin ist der Ausgang, welcher der Eingang ?

Das Hauptproblem dürfte aber die Synchronisierung sein und nicht die
Dekodierung. Daher empfiehlt es sich, beim Senden bitweise zu kodieren
bzw. beim Empfang zu dekodieren.


Peter

Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll da fehlen ? Hier gings erst mal darum, eine EINFACHEN
Algorithmus for die Kodierung / Dekodierung zu definieren.

Für die RF Datenübetragung sehe ich dann drei Möglichkeiten:

Variante 1: Die zwei Bytes in den UART schicken, an dem der AM
Transmitter hängt. Den Receiver Output dann nach UART RX Pin und nach
dem Auslesen wieder dekodieren. Das ist zwar gemauschelt (Start/Stop
Bit) aber dürfte wohl auch gehen.

Variante 2: Wie oben, jedoch den Receiver Output auf INT und dann mit
einer Zeitroutine die Synchronisierung zum Auslesen realisieren. Jedoch
gleiches Problem wie oben.

Variante 3: Nix mit UART, sondern zeitgesteuerte Routinen für den
Transmit- und Receive Chain. Dann sollte der Gleichspannungsanteil
exakt Null sein. Frage ist nur, ob sich der Aufwand für die paar Meter
Entfernung zwischen RX und TX lohnt.

Ich werde die erste Variante ausprobieren und dann wieder berichten.

Gruss Manni

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Was soll da fehlen ?"

Na wie gesagt, eben das wirklich Wichtige.


Wie hast Du Dir denn die Synchronisation vorgestellt ?

Wenn Du einmal aufm flaschen Bittakt liegst, dann wars das.

Deshalb hat man üblicher Weise eine Routine, die bei jedem Halbbit
darauf testet, ob die vereinbarte Präambel empfangen wurde und erst
dann weiß man ja, wo die erste Phase des ersten Bits eines Datenbytes
ist.

Einfach willkürlich irgendwelche 16 Bitphasen dem Decoder zu füttern,
muß einfach schief gehen.

Gerade bei Funk muß man mit Störungen und nötiger Neusynchronisation
rechnen.


Und daß UART auch nicht das Geringste mit Manchester zu tun hat, hatten
wir schon mal.

Aber bei Funk ist ja die Datenrate eh nicht so hoch, daß man es nicht
mit Bit-Banging (Timerinterrupt+Software) schafft.


Peter

Autor: Benedikt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nur zur Vollständigkeit:
Hier mal meine Routinen für den Manchester Encoder/Decoder in C mit den
Routinen von Manni.
Die Routinen sind weder optimiert, noch sonst wie besonders gut,
funktionieren aber...
Übertragen werden Datenblöcke mit beliebiger Länge.

Da man die Daten beim Manchestercode quasi doppelt überträgt (einmal
negiert/einmal normal), könnte man auf diese Art nicht irgendwie
Übertragungsfehler korrigieren ?
Hat jemand in dieser Richtung schonmal was gemacht ?

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bendikt,

nenne Dein Programm doch bitte statt "manchester.c" besser
"mein_irgendwie_mit_UART_gebasteltes_eigenes_Protokoll.c"


Sonst wundern sich viele Leute, warum sie damit keinen Manchester-Kode
senden können bzw. kein Empfänger für Manchester-Kode diesen Kode
entziffern kann.


Ein Programm nach etwas zu benennen, womit es nicht das geringste zu
tun hat, ist doch irreführend !


Peter

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@peter dannegger
Dann sollte besser der ganze Thread gelöscht werden, da dieser dann
genausowenig mit Manchester zu tun hat.

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Benedikt,

Warum ?

Der ursprüngliche Beitrag behandelt doch den Manchester-Kode.

Bloß wenn Du das ganze noch durch die UART nudelst, ist es eben keiner
mehr. Daher hat nur Dein Beitrag nichts mit Manchester zu tun.

Du kannst z.B. mit der UART nie ne RC5-Fernbedienung aufbauen, da diese
nunmal Manchester kodiert ist.


Peter

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RC5 zwar nicht, aber um Daten via Funk zu übertragen schon.

Was entspricht beim UART nicht Manchester ?
Wenn man jedes Bit invertiert, dann sind maximal 2Bitzeiten high oder
Low, einschließlich Start und Stopbit.
Wenn man jetzt noch entsprechende Signale vor dem ersten Datenbyte zum
Einschwingen des Empfängers sendet, dann wird das ganze gut genug.

Der UART ist beim Empfang sogar um einiges besser als wenn man es per
Software macht: Bei den USARTs von AVR und Co wird das Signal mehrfach
abgefragt und der Wert genommen, der am häufigsten vorkommt.
Dagegen fragen die Softwareempfänger den Pegel nur einmal ab.

Mit dem obigen Code übertrage ich Daten mit billigsten 433MHz
Sender/Empfänger. Funktioniert wunderbar.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habe mir ein 433 MHz Sende/Empangsmodul bei Conrad gekauft!
Nur leider hab ich das Datenblatt nicht genau gelesen, und somit
überlesen das ich Manchester Codierte Signale bräuchte!
Habe mal in den Sender ein Rechteck mit 1kHz gegeben, aber leider kann
ich da am Empfänger nix messen davon?
Kann mir jemand weiterhelfen wie ich nur ein Tastersignal damit
übertragen bekomme?
Sollte die Realisierung mit Hilfe eines uC nötig sein, so hätte ich
schon noch ein Paar PIC`s daheim?

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also 1kHz Rechteck sollten eigentlich auch so am Empfänger wieder
ankommen.
Ich hatte das mal ausprobiert und konnte 50Hz bis 50kHz Rechteck damit
übertragen. 1kHz sollte optimal sein.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hab ich auch gedacht, ich normalen 1kHz Rechteck mit 50%Duty Cycle
und U(Spitze Spitze 4V)!
Ich glaub, ich werde das Set bei Conrad reklamieren?
PS: In der Anleitung heißt es max Bandbreite ca 2kHz, mit diesem hast
du keine 50kHz übertragen bekommen, oder gehts doch, nur stark
gedämpft?

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 50kHz kommen ziemlich sauber an, zumindest wenn Sender/Empfänger
nahe sind (ca. 2m).
Allerdings ist damit die Bandbreite etwas höher als zulässig, daher die
Einschränkung auf 2kHz.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hehe, das Problem taucht erst auf, wenn man sie durch eine Wand funken
lässt, da kommt nicht mehr viel von den 50kHz an.

habe aber auch gute Ergebnisse mit 1kHz DC 50%

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann reklamiere ich das Teil!
Vielen Dank

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Alex
Wie hoch ist deine Betriebsspannung vom Sender ?
Leg mal stabile 12V an, und schau ob sich dann was tut.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also der Empfänger hat 5 V!
Hatte am Sender auch 5V dran und ging nichts!
Ebenso 9V aus einer Blockbatterie am Sender hat nix gebracht!
Laut Datenblatt darf Spannung am Sender 3-12V sein!

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey leute hier habe ich mal den richtigen beitrag gefunden.

Hab mir die Manchester.c angeschaut kann mir noch jemand die
manchester.h von Benedikt geben ?

Gruß Andreas

Autor: Marco S. (masterof)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
abo

Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Verursacher dieses Thema's möchte ich mich noch Mal zu dem Thema
äußern, speziell zum Thema, "Wie soll ich mein Ding denn nennen".

Speziell möchte ich zu dem Kommentar (06.02.2006) von Peter zurück
kommen, der da war:

 -- nenne Dein Programm doch bitte statt "manchester.c" besser
"mein_irgendwie_mit_UART_gebasteltes_eigenes_Protokoll.c" --

Meine Intention, diesen Code hier ins Forum zu stellen, war
ausschließlich dazu vorgesehen, die/das "Manchester" Coding/Dekoding
Verfahren anhand von einem einfachen assembler code zur Verfügung zu
stellen (inkl. C-Code Anleitung, wie Benedikt es dann verwendet hat).

In diesem Sinne könnte man noch eine ganze Menge andere
"Modulations-Codes" implementieren, wie z.B. NRZ, NRZ-L, Bi-Phase-L,
Bi-Phase-M oder S, um nur die Standard Verfahren aufzulisten.

Der "Manchester" Code stellt keinen Anspruch an irgendein
Übertragungs-Protokoll, das wesentlich aufwendigere Mechanismen
benötigt.

Wenn aber dann hier im Forum darüber sinniert wird, ob man einen
Beitrag löschen soll, nur weil er einen "Namen" hat, der dem einen
oder anderen nicht gefällt, dann überlege ich mir doch sehr schnell, ob
ich meine Codes hier weiter veröffentlichen soll.

Speziell an Peter:
Dass du natürlich über einen großen Erfahrungsschatz zum Thema uC
Programmierung / Elektronik verfügst, wird hier nie einer bestreiten.
Aber ein bischen Zurückhaltung bei Beiträgen, die von "uC-Hobbyisten"
kommmen, die aber auf anderen Gebieten auch was drauf haben, auch
wenn's nur die Satelliten-Telemetrie ist, solltest du dir vielleicht
doch mal auferlegen.

Trotzdem bin ich begeisteter Verfolger dieses Forum, weil ich hier auch
noch ne Menge lernen kann. Und besten Dank für alle Beiträge an ALLE !

Gruß Manni

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo  Manni hast du das mit Manchester hinbekommen???

Das Thema würde mich auch mal interressieren

Gruß Andreas

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Manni

"Speziell an Peter:
Aber ein bischen Zurückhaltung bei Beiträgen, die von
"uC-Hobbyisten"
kommmen, die aber auf anderen Gebieten auch was drauf haben, auch
wenn's nur die Satelliten-Telemetrie ist, solltest du dir vielleicht
doch mal auferlegen."


Du hast den Sinn meiner Ausführungen überhaupt nicht verstanden !

Es ging doch darum, daß das, was hinten aus ner UART rauskommt kein
Manchester mehr ist.

Und das hat überhaupt nichts damit zu tun, ob jemand Anfänger oder
Profi ist.

Wenn etwas falsch ist, dann muß man das doch sagen dürfen.

Und dann werde ich nen Teufel tun und mich zurückhalten, nur weil
jemand Anfänger ist.


Peter

Autor: geli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter Dannegger
Das Niveau im Beitrag und anderen Beiträgen kann man hier deutlich
erkennen!

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.