Forum: Mikrocontroller und Digitale Elektronik [assembler] manchester-code codieren/decodieren


von Richard X. (synq1e)


Lesenswert?

ich möchte mit einem avr µC digitale daten über funk übertragen und hab 
mir
deshalb ein funk sende/empfangsmodul bei conrad gekauft(Bestnr.:130428)

habe aber erst im nachhinein erfahren dass dieser sender ein manchester 
codiertes signal zum senden benötigt

es müssen ja wenn ich das richtig sehe die daten codiert zum sender und 
danach die empfangenen signale am empfänger wieder
decodiert werden.

nur tu ich mir beim codieren und decodieren ein wenig schwer, ich möchte 
die programme in assembler schreiben und jeweils einen µC zum
senden und empfangen verwenden.

ich wär über tipps oder beispielcodes, wie man das umsetzen kann dankbar

bitte sagt mir nicht dass es zu schwer für anfänger sei ;-)

ich will das echt hin bekommen und streng mich dementsprechend an

von Spess53 (Gast)


Lesenswert?

Hi

>ich will das echt hin bekommen und streng mich dementsprechend an

Du kannst es dir auch einfach machen. Bei den AT90PWMxyz gibt es einige, 
die eine EUSART besitzen. Die kann Manchester in Hardware.

MfG Spess

von Andreas B. (myratz)


Lesenswert?

Hallo Chris,

das Ansteuern eines Funkmoduls mit einem Manchester Code ist nicht ganz 
so einfach wie es auf den ersten Blick aussieht.
Bei einer "guten" Drahtverbindung brauchst Du Dich um Rauschen und 
sonstige Störungen nicht zu kümmern, bei einer Funkverbindung ist das 
anders. Zudem brauchst Du zur Modulation des Senders ein fast 
gleichsannungsfreies Signal, deshalb auch der Manchestercode.

In der Praxis sieht das von der Schaltung her etwa so aus:
1
  port1
2
  -----WIDERSTAND---------+
3
                          |                 C
4
                          +----------------| |----------> Funkmodul 
5
  port2                   |
6
  -----WIDERSTAND---------+

In der Ruhephase ist port1 auf high und port2 auf low, damit stellt sich 
am Kondensator Ubatt/2 ein.

Beim Senden, sind beide Ports entweder low (low-Symbol) oder high 
(High-Symbol).

Das Eigentliche Protokoll besteht aus einer steigenden Flanke für high 
und einer fallenden Flanke für low.
Damit es vom Empfänger richtig empfangen wird, sendet man als Takt-sync 
erst 16 mal "1" damit kann sich die PLL des Empfängers "einstellen". 
Danach sollte ein besonderes Muster als Frame-Sync kommen, z.B. langes 
Symbol, kurzes Symbol, langes Symbol. Dies kommt im normalen Code nicht 
vor, weil immer zwei kurze Symbole nacheinander kommen müssen.

Dann anschliessend die Datenbytes, gefolgt von einer "Frame Check 
Sequence" (FCS), das ist bis ca. 16bytes pro Frame ein LRC-Check (0x00 
XOR Byte1 XOR Byte2 .....) oder ein CRC Check.

Wie Du siehst, wird das ganze schon etwas aufwändig, wenn es richtig 
funktionieren soll.

Ich würde das ganze erst mal mit einem Kabel verbinden bevor Du mit dem 
Funken anfängst.

Aber es ist ein Interessantes Thema .... und überleg' Dir ob Du es nicht 
in C programmierst, damit wirds einfacher. Das ist eine ideale Anwendung 
für eine Finit State Machine (FSM) aber das ist ein anderes Thema....


Viel Spass,
Andreas

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Ich hab das einfacher gelöst...

Die Funkmodule können wohl nur "1" erkennen, weil dann der Sender 
eingeschaltet ist, und so die Frequenz erkannt werden kann.
"0" führt dazu, daß das Signal im Rauschen untergeht...

Ich nehme jedes Byte und wandle es in 2 Bytes um, indem ich jedes 
einzelne Bit in "01" oder "10" unwandle (verdopple). So gibt es max. 
2x"0" und der Empfänger funktioniert. Ansonsten gibt es normale Start- 
und Stop-Bits.

Funktioniert hier prima.

Vor dem Senden schaltet man den Sender für etliche Bits ein, dann 
schwingt sich alles ein und der Empfänger-UART hat einen passenden 
1-Pegel.

Bei Nichtbenutzung wird der Sender abgeschaltet...

von Andreas B. (myratz)


Lesenswert?

Bernd Rüter schrieb:

> Die Funkmodule können wohl nur "1" erkennen, weil dann der Sender
> eingeschaltet ist, und so die Frequenz erkannt werden kann.

Das ist so nicht generell richtig. In Deinem Fall wird die Modulation 
über das Ein/Ausschalten des HF-Signals des Senders gemacht. Die meisten 
Funkmodule arbeiten aber mit FM-Modulation, dann geht das so nicht.

> Ich nehme jedes Byte und wandle es in 2 Bytes um, indem ich jedes
> einzelne Bit in "01" oder "10" unwandle (verdopple). So gibt es max.
> 2x"0" und der Empfänger funktioniert. Ansonsten gibt es normale Start-
> und Stop-Bits.
>
> Funktioniert hier prima.

Wie siehts denn bei schwachem Empfangssignal aus, -100dbm z.B. Gehts 
dann auch noch?

von Bernie (Gast)


Lesenswert?

Hab es neulich so ähnlich wie
> Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
gemacht.

Allerdings ist dieses Funkmodul 130428 von C wirklich
nicht sehr überzeugend. Bei nur 1 m Abstand klappt es gerade
mal mit 600 Bd.  - Sooo teuer ist Kupfer nun auch nicht...

von Andreas B. (myratz)


Lesenswert?

Ich hab mir mal das Datenblatt des Moduls angeschaut:
AM-Modulation, 2KHz Bandbreite.

D.H. nach Abtasttheorem kannst Du maximal 1KHz Signale übertragen. Im 
Fall der Manchester Codierung heißt das für kurze Symbole Minimalzeit 
1ms, demnach sind Lange Symbole 2ms lang.

von Mac (Gast)


Lesenswert?

Bernd Rüter schrieb:
> Ich hab das einfacher gelöst...

> Ich nehme jedes Byte und wandle es in 2 Bytes um, indem ich jedes
> einzelne Bit in "01" oder "10" unwandle (verdopple).

Das ist Manchester Kodierung :)

von H.Joachim S. (crazyhorse)


Lesenswert?

Nagele die Funkmodule als warnendes Beispiel an die Wand - zusammen mit 
einem grossen Zettel: "erst informieren, dann kaufen"

Irgendwie bekommt man die schon zum laufen - sinnvoll ist es nicht. Du 
wirst jede Menge Zeit verplempern. Es gibt genügend Funkmodule (auch zum 
kleinen Preis), die dir das Leben einfacher machen.

von Richard X. (synq1e)


Angehängte Dateien:

Lesenswert?

wäre das eine gute alternative für "einfachere" bedienung  eines funk 
moduls ?, verstehe ich das richtig das hier alles bei dem
chip über SPI programmiert wird ?

und wo finde ich angaben dazu wie die einstellungen programmiert werden
weil da steht : - programmierbare TX-Frequenz-Abweichung (von 15 bis 240 
kHz)
    - programmierbare Empfänger-Bandbreite (von 67 bis 400 kHz)

(datenblatt angehängt)

von Andreas B. (myratz)


Lesenswert?

Tja, das ist schwierig. Auf den ersten Blick sieht das geeignet aus, 
aber ....

Da fällt mir spontan ein:
- Zulassung duch RegTp?
-> falls nicht, würde ich es ausserhalb eines Abschirmkäfigs nicht 
benutzen. Die Folgen könnten eventuell teuer werden.

Aber ich bin kein HF Spezialist, vielleicht gibts ja ein Band, wo jeder 
ohne Zulassung rumfunken kann.

Vielleicht gibts hier im Forum einen Spezialisten?

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.