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?
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.
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.
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
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.
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.
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.
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.
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