Forum: HF, Funk und Felder Einfaches OOK Protokoll?


von Rick Sanchez (Gast)


Lesenswert?

Ich habe mir aus China eins dieser billigen 433 MHz 
Sender/Empfängerpaare besorgt (der Empfänger ist keines dieser 
schrottigen Audions sondern ein Superhet, also schon was besseres). Was 
wäre denn so das einfachstmögliche Protokoll für den Start, nur um ein 
1/0 Signal zu senden? Ich habe mir überlegt: der Sender sendet ein fixes 
1kHz Signal, eine Sekunde lang. Der Empfänger sucht nach einem 1kHz 
Signal. Aber wie sucht man nach einem Signal einer bestimmten Frequenz 
mit einem uC? Meine erste Idee wäre, den Empfänger an einen Capture-Pin 
anzuschließen und den uC die Zeit zwischen zwei steigenden Flanken 
messen zu lassen. Sobald sagen wir mal 100 Perioden nacheinander erkannt 
wurden schaltet er einen Ausgangspin. Könnte das hinhauen?

Der nächste Schritt wäre dann ein komplexeres Protokoll, das Daten 
übertragen kann, evtl. mit Fehlerkorrektur. Gibts da eine Übersicht 
welche Protokolle es gibt? Oder kann mit jemand ein paar Protokolle 
nennen, am besten aufsteigend von einfach bis komplex?

von Hanswurst (Gast)


Lesenswert?

Das ist eine unzureichend formulierte, unzureichend recherchierte Frage.

Leider.

Zunächst einmal ist der Ansatz, den Du Protokoll nennst lediglich die 
unvollständige Festlegung einer Zuordnung zwischen zwei Signalen. 
Genauer: Die Zuordnung zwischen einem von zwei möglichen Zuständen (0 
oder 1) zu einem Vorgang (1 KHz Schwingung). Ein weiterer Zustand oder 
Vorgang fehlt. Und das ist noch kein "Prokotoll".

Das sind zwar nur Konventional-Erbsen, aber sie können im weiteren wegen 
ihrer Fehlerhaftigkeit hinderlich werden.

Bitte lies einmal unter: https://de.wikipedia.org/wiki/Netzwerkprotokoll 
was man unter einem "Protokoll" üblicherweise versteht. Und nenne uns 
von der Liste 
https://de.wikipedia.org/wiki/Netzwerkprotokoll#Aufgaben_eines_Protokolls 
das, was Dein Protokoll eigentlich leisten soll. Übrigens ist die 
englische Wikipedia bei so etwas oft auch hilfreich.

von Rick Sanchez (Gast)


Lesenswert?

Mein lieber Hanswurst, es scheint mir, als ob du einer von jenen bist, 
die gar kein Interesse daran haben, irgendjemandem zu helfen oder 
überhaupt irgendetwas Sinnvolles beizutragen, sondern den kleinsten 
Fehler in der Fragestellung als Anlass nehmen, den Fragesteller 
niederzumachen. Ich denke, meine Fragen waren so formuliert, Hanswurst, 
dass sie nur mit bösem Willen missverstanden werden konnten.

von B e r n d W. (smiley46)


Lesenswert?

Hallo Rick

Es gibt dieses 7 Schichten OSI Modell
https://de.wikipedia.org/wiki/OSI-Modell

1. Die unterste Schicht ist die Hardware Layer, bei dir die Funkstrecke.

2. Die zweite Schicht ist das Sicherungslayer. Du definierst ein Byte 
für den Anfang und eins für das Ende, das sieht dann z.B. so aus:

Anfang, Länge N, Checksumme, Daten[0] ..... Daten[N-1], ENDE

3. Vermittlungsschicht
In den Daten[0...N-1] können wieder beliebige Informationen versteckt 
sein, wie z.B. woher, wohin...

Es müssen nicht alle Schichten implementiert werden,
Du könntest ein Byte als Datentyp definieren, damit lassen sich schon 
256 verschiedene Typen darstellen. Es empfiehlt sich, den Inhalt dieser 
Datentypen systematisch/strukturiert aufzubauen.

Gruß, Bernd

von Gerhard O. (gerhard_)


Lesenswert?

Siehe Dir mal den Artikel von Alberto Ricci-Bitti (Circuit Cellar) in 
der Link an:

http://faculty.petra.ac.id/resmana/private/circuit-cellar/Wireless%20Monitoring%20System.pdf

Dort wird eine Möglichkeit so ein Funkprotokol im Detail erklärt und 
anhand eines praktischen Projekts demonstriert.

Die Original C Quellen sind hier erhältlich:

ftp://ftp.circuitcellar.com/pub/Circuit_Cellar/2004/167


Vor Jahren portierte ich seine 68HC908 Quellen auf PIC und adaptierte 
sie für meine eigenen Zwecke für eine kleine Telemetrieanwendung und 
hatte damit sehr gute Ergebnisse. Die Radioverbindung ist ziemlich 
robust mit seinem Verfahren. Als Radios verwendete ich allerdings die 
TXM und RXM Module der Firma Linx welche aber mit Deinen ähnlich sind 
und nichts am Prinzip ändert.

Die von mir adaptierten PIC Quellen für mein Referenz Design kann ich 
Dir überlassen. Für den Sender nahm ich einen 12F864 oder 16F684( kann 
mich nicht mehr erinnern ) im 14-pin DIP Gehäuse. Für die 
Empfangsdekodierung und Terminal Interface dient ein gerade vorhandener 
16F877A in einer einfachen Bord. Die zeitkodierten Sender Bits werden 
von einer 10kHz ISR mit Störfilter abgetastet und ausgewertet und die 
Radio Baudrate liegt bei mir um ca. 1kB/s. Das Datenpaket ist als 
Struktur verschiedenster Datenlänge ausgeführt und hat 64bit mit 
Checksumme.

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Rick Sanchez schrieb:
> Der nächste Schritt wäre dann ein komplexeres Protokoll, das Daten
> übertragen kann, evtl. mit Fehlerkorrektur. Gibts da eine Übersicht
> welche Protokolle es gibt?

Guck mal im Internet danach, wie in den 80er jahren der ZX-Spectrum 
seine Daten auf Audiokassette gespeichert und wieder gelesen hat. das 
war - wenn ich mich recht erinnere etwa so:
- Präambel mit einer bestimmten Frequenz
- Startpuls mit deutlich kürzerer Zeit
- Datenblock mit Bitkennung durch Einzelpuls lang oder kurz

was man dann in so einem Datenblock an höheren Dingen tut (z.B. Adler32) 
ist ne andere sache.

W.S.

von Gerhard O. (gerhard_)


Lesenswert?

W.S. schrieb:
> Rick Sanchez schrieb:
>> Der nächste Schritt wäre dann ein komplexeres Protokoll, das Daten
>> übertragen kann, evtl. mit Fehlerkorrektur. Gibts da eine Übersicht
>> welche Protokolle es gibt?
>
> Guck mal im Internet danach, wie in den 80er jahren der ZX-Spectrum
> seine Daten auf Audiokassette gespeichert und wieder gelesen hat. das
> war - wenn ich mich recht erinnere etwa so:
> - Präambel mit einer bestimmten Frequenz
> - Startpuls mit deutlich kürzerer Zeit
> - Datenblock mit Bitkennung durch Einzelpuls lang oder kurz
Da hat ja Alberto auch so gemacht. Logik 1 = 333us, Logik 0 = 670us.
Es lohnt sich bestimmt sich anhand dieses Artikels mit der Materie zu 
beschäftigen. Durch praktische Einarbeit gewinnt man auch Einblick.

Ganz wichtig ist der Präambel um den Daten Bit Slicer der üblichen 
Schaltungen zu "trainieren" damit sich am Comparator die richtige 
Referenzspannung einstellt.
>
> was man dann in so einem Datenblock an höheren Dingen tut (z.B. Adler32)
> ist ne andere sache.
>
> W.S.

von Hanswurst (Gast)


Lesenswert?

Rick Sanchez schrieb:
> Mein lieber Hanswurst, es scheint mir, als ob du einer von jenen bist,
> die gar kein Interesse daran haben, irgendjemandem zu helfen oder
> überhaupt irgendetwas Sinnvolles beizutragen, sondern den kleinsten
> Fehler in der Fragestellung als Anlass nehmen, den Fragesteller
> niederzumachen. Ich denke, meine Fragen waren so formuliert, Hanswurst,
> dass sie nur mit bösem Willen missverstanden werden konnten.

Was erweckt in Dir diesen Anschein?

Die Frage nach einer Übersicht über Protokolle habe ich beantwortet, in 
dem ich Dir einen Link auf den Wikipedia-Artikel gegeben habe. Danach 
hattest Du ja auch gefragt.

Einen bösen Willen kann ich, insbesondere weil meine Kritik sachbezogen 
war, hier nicht erkennen. Persönliche Angriffe liegen nicht vor - nicht 
einmal unterschwellig. Ich weise daher die Unterstellung entschieden 
zurück.
Es sei denn Du kannst mir überzeugend konkret belegen worin genau ein 
"niedermachen" ausgedrückt wird.
Ein sachliches Urteil, auch wenn es Dir nicht gefällt oder sogar falls 
es falsch ist, ist noch kein "niedermachen". Das ist Unsinn.

von Gerhard O. (gerhard_)


Lesenswert?

Rick Sanchez schrieb:
> Was
> wäre denn so das einfachstmögliche Protokoll für den Start, nur um ein
> 1/0 Signal zu senden? Ich habe mir überlegt: der Sender sendet ein fixes
> 1kHz Signal, eine Sekunde lang. Der Empfänger sucht nach einem 1kHz
> Signal. Aber wie sucht man nach einem Signal einer bestimmten Frequenz
> mit einem uC? Meine erste Idee wäre, den Empfänger an einen Capture-Pin
> anzuschließen und den uC die Zeit zwischen zwei steigenden Flanken
> messen zu lassen. Sobald sagen wir mal 100 Perioden nacheinander erkannt
> wurden schaltet er einen Ausgangspin. Könnte das hinhauen?

Falls Du nur mit einem 1Khz Ton was steuern möchtest kann man das wie 
von Dir vorgeschlagen mit dem Capture/Timer Subsystem eines uC 
verwirklichen und ist überhaupt kein Problem.

Übrigrens mußt Du noch wissen, dass solche einfache "rohe" Empfänger 
ohne Eingangssignal nur randomierte digitale Rauschsignale produzieren. 
Deshalb ist auch der Präambel so wichtig. Aus diesm Grund sind UART 
Peripherien für Radio Zwecke vollkommen ungeeignet für die Dekodierung 
der Daten.

Es geht aber übrigens in diesem Fall noch einfacher ohne uC: Mit dem 
NE567 PLL IC könnte man das 1kHz signal eindeutig erkennen und damit 
einen Schaltausgang zur Verfügung zu haben. Man kann mehr wie einen 567 
verwenden. Holtek hat auch einige Chipsets die für Fernsteuerungen 
geeignet sind.

Für Datenübertragungen ist der Circuit Cellar Artikel ein zuverläßiger 
Einarbeitungs Artikel und war mir zumindest auch sehr nützlich. Lese ihn 
Dir wenigstens durch.

Viel Erfolg und Spaß!

Grüße,
Gerhard

: Bearbeitet durch User
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.