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|
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
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
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
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
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
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?
Eine eigene Frage?
Dieser Thread ist über 24 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.