Forum: Mikrocontroller und Digitale Elektronik protokoll


von Gill (Gast)


Lesenswert?

hallo.

was fur protokoll bzw.start und stopbits kann ich verwenden zwischen 
sender und empfanger.
die daten werden von empfanger im binarcode
standig gesendet.die daten werden dann fsk moduliert
und 900MHz ubertragen.wie kann ich auf der empfangsseite rausfinden wo 
der anfang und wo das ende ist.|10101111|01001001|00110101| usw.
wenn ich den empfanger aus und einschalte weiss ich nicht mehr wo mein 
anfang und das ende ist.es konnen  in einem Byte ale moglichen 
binarvarianten vorkommen.wie kann ich den anfang und ende markieren oder 
nur den anfang.
z.b.
startbytes|1 Databyte.|2. Databyte|...6.databyte|
startbytes|7 databyte |8.dada     |...12 databyte|

von Retro (Gast)


Lesenswert?

Das beste währe eine festgelegte 1/0-Folge die sonst niemals vorkommen 
kann. So als Anfangsmarke z.B. "00000000".

von Weide (Gast)


Lesenswert?

Hallo Gill,

deshalb nutzt man auch unter anderem den ASCII-Zeichensatz. Da können 
Zahlen von Buchstaben oder Steuerzeichen eindeutig unterschieden werden. 
Die Zahl zwei z.B. ist damit als Dezimalwert "52" (34h) festgelegt, die 
Zahl drei als Dezimalwert "53"(35h) usw.. Um eine zweistellige Zahl zu 
übermitteln, mußt Du jetzt zwar zwei (8-Bit)Binärfolgen übermitteln, das 
Protokoll wird länger, aber du hast jetzt die Möglichkeit, Steuerzeichen 
(Dein Startbyte) zu setzen, z.B. den Buchstaben "A", der dem Dezimalwert 
"65" entspricht. Oft werden andere Steuerzeichen verwendet, z.B. das "<" 
(Dezimal "60") und am Ende ein "Carriage Return" (da weiß ich jetzt den 
Wert nicht).
Die Umsetzung im Mikrokontroller ist eigentlich nicht so schwer wie's im 
Moment scheint. Man muß ja nicht den Ganzen ASCII Zeichensatz parat 
haben, sondern nur das Startzeichen und eventuell das Abschlusszeichen 
zum Vergleich und natürlich die Zahlen von 0 bis 9 , aber die braucht 
man zur Not noch nicht mal
als Tabelle abspeichern, sondern kann sie sich errechnen (Eingegangener 
Wert minus 50).

Gruß Weide

PS: ASCII-Tabellen findest Du zuhauf im Internet

von Siegfried (Gast)


Lesenswert?

Ich halte das Vorhaben für fast nicht durchführbar.

Wenn die Bitlängen alle gleich sind, hat der Empfänger kaum eine Chance 
zu sychronisieren.

Mal angenommen, man baut eine perfekten und unendlich aufwändigen 
Empfänger, dann müsste der einen eigen Takt haben, der um ein vielfaches 
höher ist als der des Senders (z.B. 64-fach) und dann eine eigene 
Abtastung in der Mitte von 2 Bitwechseln vollziehen.
Kommt jetzt eine lange Reihe von Einsen oder Nullen, so hat der Emfänger 
keine Chance, er würde aus der Synchronisation herauslaufen.

Alle anderen Lösungen haben eine zwangsweise Nachsynchronisation.
Fernseher = Zeilen und Bildimpuls
RS232 = 1,5 faches Startbit
HDLC = nach 4 gleichen Bits eine Bitwechsel usw.

Wie oben schon angedeutet könnte es mit bestimmten Steuerzeichen 
funktionieren. Dann kann allerdings nicht jedes beliebige Zeichen 
übertragen werden.

Siegfried

von Siegfried (Gast)


Lesenswert?

Jetzt fällt mir doch was ein.

Mit 900MHz ist wahrscheinlich nicht die "Bit-Frequenz", sondern deine 
Trägerfrequenz gemeint, oder ?!

Falls die Bitfolgen nicht zu schnell kommen, dann sollte das mit 
RS232-Bausteinen funktionieren. Die packen dann ein Startbit in der 
Länge des 1,5fachen eines Bits davor, 8 Datenbit, 1-2 Stopbit und ein 
Parity-Bit dazu. D.h. 8 Bit werden erweitert zu einem 10,5 Bit langen 
Frames). Der RS232 Empfänger synchronisiert das dann selbst. Die Bitrate 
sollte dann allerdings unterhalb von 115000 / 10,5 * 8 = 87619 Bit/s 
liegen, damit der Sender das ganze noch verarbeiten kann.

Siegfried

von Weide (Gast)


Lesenswert?

Hallo Siegfried,

Du hast Recht, selbst mit meiner ASCII Methode wäre es schwer bis 
unmöglich, irgendwo ein Startzeichen (Byte) herauszufischen. Ich schätze 
aber, dass sich das Ganze gerade bei Funkübertragung nicht auf ein 
Startbit syncronisieren lässt. Womöglich klappt's mit einer kurzen Pause 
zwischen letztem Datenpaket und neuen Startzeichen.


Gruß Weide

von Ralf Hochhausen (Gast)


Lesenswert?

Hallo zusammen,

man baut bei der Übertragung über HF normalerweise immer sog. 
Trainingssequenzen in regelmässigen Abständen in den Datenstrom ein. 
Diese dienen einmal dazu eine Rahmensynchronisation durchzuführen und 
dann noch eine Bitsynchronisation. Das könnte dann z.B. so aussehen:

Trainingssequenz(z.B. 
16Bit)|Datenwort1|Datenwort2|Datenwort3|Trainingssquenz|Datenwort1|....

Du könntest z.B. deine Datenwörter künstlich von 8 auf 12 Bit aufblähen 
und sagst dann einfach, das die folgende Bitfolge mit 12Bits dein 
Synchwort ist: "101010101010". Beim Einschalten des Gerätes muß dein 
Sender dann zunächst diese Bitfolge aussenden und anschließend die 
Datenbytes mit den zusätzlichen 4 Bits. Diese könnte man z.B. für einen 
Fehlerschutz vorsehen.
Der Empfänger wartet beim einschalten dann immer zunächst auf dieses 
Synchwort und synchronisiert sich dann mit dem Empfangsbitstrom. Danach 
kann er die Empfangsbits decodieren.
Zur Bitsynchronisation kann man auch verschiedene Codes verwenden, die 
z.B. eine '1' durch eine positive und eine '0' durch eine negative 
Flanke übertragen(Manchester-Code). Dadurch tritt bei jedem Bit ein 
Wechsel des Signalzustandes auf und es ist so möglich, sich auf den 
Bitstrom zu synchronisieren. Ich bin mir jedoch nicht sicher ob man 
diesen Code für einen FSK-Modulator verwenden kann. Falls nicht muß man 
die Bitsynchronisation mit einem Synchwort bewerkstelligen.

Gruß Ralf

von gill (Gast)


Lesenswert?

danke fur die vorschlage.das mit der trainingssequenz ist glaube ich 
nicht realisierbar.
denn mein sender sendet ununterbrochen daten.
d.h.die datenbits konnten die gleich form haben wie die 
trainingssequenz.dann triggert der empfanger auf falsche 
trainingssequenz.
meine arbeit besteht darin temperatur uber 8 sensoren uber den 
microcontroller AT90S8535 AD zu wandeln und zu multiplexen.
anschliessend werde ich meine daten fsk
mdulieren und an einen sender mit ft=915mHz draufzugeben.auf der 
empfangsseite empfange ich das signal mach wieder eine demodulation geb 
es wieder auf den microcontroller,demultiplexe es und habe am ausgang 
des microcontrollers eine analoge spannung.
das problem ist das meine databytes die gleiche form annehmen konnen wie 
die startbytes.
meine idee ist folgende:beim AD Wandler die referenzspgn. z.b.auf 5V zu 
setzen.Auf den eingang analogen eingang nicht mehr wie 5 V draufzugeben.
somit kann schon die bitfolge bei einem 8 bit wandler 11111111 nicht 
vorkommen.
dann sieht mein rahmen so aus:
|11111111|11111111|1.databyte|2.Data|3....|6..|
|11111111|11111111|7.data    |8 data|usw.
der startbyte 11111111 kann in den data nicht wegen der referenzspgn 
vorkommen.
ich muss jedoch mein startbyte so definieren:
11111111|11111111|denn mein data kann ja auch so 
aussehen:00001111|11110000.somit hatte ich wieder 8 einsen 
hintereinander.was meint ihr dazu?

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.