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
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
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
"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
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 ?
@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
@peter dannegger Dann sollte besser der ganze Thread gelöscht werden, da dieser dann genausowenig mit Manchester zu tun hat.
@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
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.
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?
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.
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?
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.
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%
@Alex Wie hoch ist deine Betriebsspannung vom Sender ? Leg mal stabile 12V an, und schau ob sich dann was tut.
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!
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
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
hallo Manni hast du das mit Manchester hinbekommen??? Das Thema würde mich auch mal interressieren Gruß Andreas
@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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.