Forum: Projekte & Code Manchester Coding


von Manni (Gast)


Angehängte Dateien:

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

von peter dannegger (Gast)


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

von Manni (Gast)


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

von peter dannegger (Gast)


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

von Benedikt (Gast)


Angehängte Dateien:

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 ?

von peter dannegger (Gast)


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

von Benedikt (Gast)


Lesenswert?

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

von peter dannegger (Gast)


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

von Benedikt (Gast)


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.

von Alex (Gast)


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?

von Benedikt (Gast)


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.

von Alex (Gast)


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?

von Benedikt (Gast)


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.

von Simon K. (simon) Benutzerseite


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%

von Alex (Gast)


Lesenswert?

Dann reklamiere ich das Teil!
Vielen Dank

von Benedikt (Gast)


Lesenswert?

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

von Alex (Gast)


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!

von Andreas (Gast)


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

von Marco S. (masterof)


Lesenswert?

abo

von Manni (Gast)


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

von Andreas (Gast)


Lesenswert?

hallo  Manni hast du das mit Manchester hinbekommen???

Das Thema würde mich auch mal interressieren

Gruß Andreas

von peter dannegger (Gast)


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

von geli (Gast)


Lesenswert?

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

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.