Hallo zusammen,
ich habe die Logik (theorie) des Decodierens und entcodierens
von Signalen in der Funkübertragung ( 433 Mhz ) so weit verstanden
(denke ich;-) und
würde das gerne einmal in der Praxis nachvollziehen wollen (am
einfachsten
mit einer sehr einfach Manchester Codierung nur in eine Richtung).
Hierzu benötige ich ja einen 433 Mhz sender und empfänger,
welchen Microcontroller könnt Ihr mir für die Programmierung empfehlen
und
wie müsste ich in der Programmierung des Microcontrollers vorgehen!? Was
mir an Wissen noch fehlt ist folgendes (Beispiel mit 433 Mhz Sender und
Empfänger) Wenn ich ein Signal über den Sender losschicke (damit meine
ich
nicht durch einen Encoder angereicherten, sondern einfach z.B. 3 volt in
die Datenleitung des Senders für exakt 10,5 sek. gehalten, und würde
gerne
dieses Signal an der Empfängerseite auswerten ( so nach dem Motto, ist
das
ankommende Signal auf 1 und exakt 10,5 sek. lang ?) <-- genau so
funktionieren ja auch die Protokolle, oder ?
Würde mich über Eure hilfe freuen. Zu meinem Background kurz erwähnt,
bin
Software Entwickler habe auch ein gutes Verständnis für Elektronik.
Hi Georg,
danke für den link, schaue ich mir an....
Wenn der Sender auf 433 MHZ ein Signal sendet, bedeutet das ja auf der
Empfängerseite, das ein Signal mit 433 Mhz ankommt, so weit so gut, aber
wie
kann der Microcontroller (falls er nicht von vorne herein auf die 433
MHZ
eingestimmt ist !? ) dieses Signal synchron auswerten? Wie muss
sich das ein Laie vorstellen ? es kommt ja auf der Empfängerseite ein
"Stream" , wie wird dieser Stream dann auf der Empfängerseite "geparst",
bzw. woher weiss der Empfänger das ein SendeBlock begint und ein
SendeBlock
endet !???
Vielen Dank.
Grüsse
Diagonal
> welchen Microcontroller könnt Ihr mir für die Programmierung empfehlen
jeden
> wie müsste ich in der Programmierung des Microcontrollers vorgehen
Kommt auf den Mikrocontroller an. Zuerst mal würde ich mir eine
geeignete IDE suchen und ein Tutorial dazu. Parallel dazu das bzw die
Datenblätter und Programming Manuals des Chipherstellers lesen.
> Wenn ich ein Signal über den Sender losschicke (damit meine> ich nicht durch einen Encoder angereicherten, sondern einfach> z.B. 3 volt in die Datenleitung des Senders für exakt 10,5 sek.> gehalten, und würde gerne dieses Signal an der Empfängerseite> auswerten ( so nach dem Motto, ist das ankommende Signal auf 1 und> exakt 10,5 sek. lang ?)
Nein, so einfach ist das nicht. Diese Funkmodule funktionieren nicht wie
Kabel. Du musst das Signal kodieren und das verzerrte Signal
empfängerseitig dekodieren.
> genau so funktionieren ja auch die Protokolle, oder ?
Nein, sie funktionieren völlig anders.
> ich habe die Logik (theorie) des Decodierens und entcodierens> von Signalen in der Funkübertragung ( 433 Mhz ) so weit> verstanden (denke ich;-)
Nein. Fange nochmal von vorne an.
> Wenn der Sender auf 433 MHZ ein Signal sendet, bedeutet das ja auf> der Empfängerseite, das ein Signal mit 433 Mhz ankommt
Beim Empfänger kommt immer ein Rauschen von allem an, was durch die Luft
schwirrt. Er filtert sich eine bestimmtes Frequenzband heraus und
demoduliert es (z.B. per AM oder FM). Wenn ales gut läuft, entspricht
das demodulierte Signal ungefähr (niemals genau) dem ursprünglich
gesendeten Signal.
> kann der Microcontroller (falls er nicht von vorne herein auf die 433> MHZ eingestimmt ist !? ) dieses Signal synchron auswerten?
Mikrocontroller können ana,oge Signale nicht direkt auswerten -
jedenfalls nicht mit so hoher Frequenz.
> woher weiss der Empfänger das ein SendeBlock begint und ein> SendeBlock endet !???
Woran man erkennt, daß du überhaupt nichts verstanden hast. Der Sender
sendet ein eindeutiges Kennzeichen, dass der Empfänger wiedererkennen
muss. Wenn ich Dir zum Beispiel fortlaufend Grimms Märchen vorlese,
erkennst du den Anfang jedes Märchens an den Worten "Es war einmal".
diagonal schrieb:> Wie muss sich das ein Laie vorstellen ? es kommt ja auf der Empfängerseite ein> "Stream" , wie wird dieser Stream dann auf der Empfängerseite "geparst",> bzw. woher weiss der Empfänger das ein SendeBlock begint und ein> SendeBlock endet !???
Wie gesagt, ich wollte auch wissen, wie der Mikrocontroller die
ankommende Impulsfolge verdaut.
Genauer gesagt, ich fragte nach dem etablierten Verfahren.
diagonal schrieb:> Zu meinem Background kurz erwähnt,> bin Software Entwickler habe auch ein gutes Verständnis für Elektronik.
Wenn das wirklich so ist, dann sollte es für dich kein großes Problem
sein, den Quellcode RCSwitch.cpp zu analysieren und das Verfahren zu
verstehen.
https://github.com/sui77/rc-switch
( Alternativ "RadioHead"
http://www.airspayce.com/mikem/arduino/RadioHead/ )
Georg M. schrieb:> Genauer gesagt, ich fragte nach dem etablierten Verfahren.
Es gibt keines und alle. Will heißen, daß du dich nur daran halten
sollst, den Sender nicht dauernd eingeschaltet zu lassen, sondern dir
eine Art Sendepaket ausdenken mußt, das möglichst kurz sein soll, denn
alle anderen senden auf der gleichen Frequenz und wollen "ihr" Gerät ja
auch empfangen.
Ebenso mußt du damit rechnen, daß es Kollisionen gibt. Und die umso
häufiger, je länger dein Sendepaket dauert.
Auch ist es so, daß dein Empfänger nicht unbedingt die klappe hält, wenn
grad nix empfangen wird, sondern dann zumeist breitbandiges Rauschen an
dein µC-Pin abliefert.
So, du mußt also deine Sendesignale (Ein- und Aus-Zeiten) vom Rauschen
unterscheiden, selbige aufnehmen und das so empfangene Paket prüfen, ob
es überhaupt von deinem Sender stammt.
Wie du das machst und welche Codierung du wählst, st deine Sache, das
macht jeder anders - allein schon, um sich von den anderen Sendern zu
unterscheiden, denn das ist nötig.
Also nicht die Quellen anderer analysieren, sondern ein eigenes
Protokoll konzipieren.
W.S.
diagonal schrieb:
>würde das gerne einmal in der Praxis nachvollziehen wollen (am>einfachsten>mit einer sehr einfach Manchester Codierung nur in eine Richtung).
Manchester Codierung ist nicht einfach, die brauchst du aber nur,
wenn sich Daten mit Gleichspannungsanteil nicht übertragen lassen,
zum Beispiel wenn sich ein Übertrager oder ein Kondensator im
Signalweg befindet. Ansonsten geht es auch mit der einfacheren
seriellen RS232 Übertragung. Du mußt also erst mal herausfinden,
ob dein Sender und Empfänger das kann, also ob sich dauer an aus
(1 oder 0) übertragen läßt. Manchester Codierung brauchst du
zum Beispiel wenn du Daten wie früher auf Kassettenrecorder
aufzeichnen willst, oder mit einem Funkgerät am Mikrofoneingang
übertragen willst.
Les dir die Doku zu VirtualWire durch, dort gibts nen link auf ein PDF
wie man on the air formate/protokolle designed, das erklärt schon das
Wichtigste, danach mal die Datenblätter z.B. des Si4432 oder CC110 oder
ähnliche durchlesen, dann wirst oh Wunder merken dass die irgendwie alle
ähnlich aufbaut sind und danach hoffentlich verstanden warum das so ist
und warum man dort gewissen Dinge schon 'in Hardware' reingepflanzt hat.
Bevor du deinen eingenen Sender/Dekoder an einen echten Sender hängst
testest du dein Protokoll über Kabel, das eleminiert schon mal viele
Fehlerquellen. Erst wenn dein Protokoll 'steht' kannst du das mit
TX/RX-Bausteinen testen. Vielleicht wirst du auch schon weit davor auf
den Trichter kommen dass ein eingenes Protokoll überflüssig ist, weil es
das schon i.o.g. Form schon fertig gibt, das muss man nicht nochmal
erfinden, nur den Sinn und den Aufbau dieser Formate begriffen haben,
davon bist du noch weit entfernt.
Hallo,
danke für die zahlreichen Beiträge.
Ich würde gerne erst einmal mit Kabel anfangen um ein Protokoll
aufzubauen bräuchte hierzu Unterstützung, die Infos von Euch sind ja
alle nett gemeint, nur ist der Einstieg doch noch mit Wissenshürden
verbunden.
Wenn Ihr mir eine ganz einfache Anleitung zum aufbauen eines eigenen
einen Protokoll über Kabel geben könntet wäre ich Euch sehr verbunden.
Viele Grüsse
diago
Das Aufbauen von Protokollen ist nicht einfach und man kann das auch
nicht im Rahmen so einer Diskussion mal eben schnell aus dem Ärmel
schütteln. Für manche Protokolle haben Menschen ihren Doktortitel
bekommen. Andere lernen so etwas im Rahmen einer mehrjährigen
Ausbildung.
Dir wurden bereits die richtigen Stichworte gegeben (Manchester
Codierung und VirtualWire). Lies dich in diese Themen ein. Oder kauf Dir
eine Buch-Reihe über Nachrichtentechnik. Wenn du sie nicht verstehst
oder keinen Bock auf Lernen hast, dann verwende eine fertige Library.
Kannst du auch das nicht, dann vergiss das Projekt.
Fang mal damit an: https://www.pjrc.com/teensy/td_libs_VirtualWire.html
Hi,
wie kann ich die Signale eines 433 mhz Empfängers kontinuierlich auf dem
PC aufzeichnen ? Ich möchte hier durch sehen können welche Signale oder
wie die Signale am Empfänger ankommen (am besten Rechteck), um dann
hieraus ableiten zu können ob mein gesendetes Signal auch ankommt und
wie es aussieht, z.B. 3 sek. lang auf 1 und 5 sek. lang auf 0 ...?
Ich habe noch ein hilfreiches Dokument für Dich gefunden:
https://www.uni-koblenz.de/~physik/informatik/studienarbeiten/toeppi.pdf
Jetzt solltest du aber wirklich erstmal lesen anstatt weiter deine
blutigen Anfängerfragen zu stellen.
> wie kann ich die Signale eines 433 mhz Empfängers kontinuierlich> auf dem PC aufzeichnen
Argh!
Zum Beispiel mit einem Logikanalyzer undd er dazugehörigen Software.
Oder indem Du dir einen Mikrocontroller programmierst, der das Signal
irgendwie in serieller Form per USB an den Computer sendet. Die
Aufzeichnung erfolgt dann mit einem Terminalprogramm oder meinetwegen
auch Matlab.
Oder mit einem digitalem Speicheroszilloskop.
Applepi@gmx.net A. schrieb:> Hi,>> wie kann ich die Signale eines 433 mhz Empfängers kontinuierlich auf dem> PC aufzeichnen ? Ich möchte hier durch sehen können welche Signale oder> wie die Signale am Empfänger ankommen (am besten Rechteck), um dann> hieraus ableiten zu können ob mein gesendetes Signal auch ankommt und> wie es aussieht, z.B. 3 sek. lang auf 1 und 5 sek. lang auf 0 ...?
Eine Möglichkeit ist z.B., sich einen SDR ("Software defined
radio")-fähigen DVB-T-Stick zu besorgen. Gibt's ab ca. 10 Euro und ist
ein unglaublich vielseitiges Spielzeug.
Eine andere Möglichkeit ist z.B., einen typischen 433MHz-Empfänger
einfach an die Soundkarte Deines PCs anzuschliessen. Neben den Pins zur
Stromversorgung haben diese 433MHz-Empfänger einen digitalen Ausgang,
auf dem die per 433MHz empfangenen Daten als digitales Rechtecksignal
ausgegeben werden, und häufig auch noch einen analogen Datenausgang.
Diesen Datenausgang (wenn vorhanden, würde ich persönlich eher den
analogen Ausgang nehmen) kannst Du (evtl. mit einem kleinen
Spannungsteiler zur Reduzierung der Ausgangsspannung) einfach an den
Line In-Eingang Deiner PC-Soundkarte anschliessen, und mit einem
beliebigen Audio-Programm wie Audacity kannst Du Dir dann ganz einfach
ansehen, was der 433MHz-Empfänger so empfängt.
Was Dir dabei übrigens vermutlich auffallen wird, was Dir bislang
vielleicht gar nicht so richtig bewusst ist: Wenn gerade kein
433MHz-Sender sendet, dann geben diese typischen 433MHz-Empfänger an
ihrem Digitalausgang üblicherweise keinen konstanten Pegel aus (also
high oder low), sondern eine Art digitales Rauschen.
Such mal auf Youtube nach Kevin Darrah und in seiner Videoliste nach
einem Video (RF Link Tutorial heisst es glaube ich) wo er mit einem
solchen Modul wie du es hast ein simples Protokoll aufbaut, dort erklärt
er auch Manchestercodierung und setzt ein halbfertiges Arduinosketch
(nur empfangen) um. Der erklärt schon mal einige Dinge was so ein
Protokoll haben sollte.
Danach schaust du dir Virtualwire näher an, nicht wie man es einfach
nutzt, sondern den Sourcecode und die Doku, das enthält einfach alles
was ein simples aber robustes Protokoll haben sollte und wie das mit
Interrupts usw umsetzt.
Wenn du noch keinen Plan von MC-Programierung, z.B. einem Arduino hast,
dann wird das eh nix. Dann beschäftige dich erst mal mit den Grundlagen
eines Microcontrollers, wie z.B. einem Arduino, den gibts günstig vom
Chinesen, endlos viele Beispiele, Doku, ...
Kauf dir auch einen billigen USB-Logicanalzer von Salae, der kostet als
Nachbau von Chinesen deutlich weniger, damit kannst du das was du
sendest/empängst am jeweiligen Pin abgreifen und aufzeichnen, die
mitgelieferte Software zeigt dir exakt die Timings an. Er kann auch
andere Protkolle erkennen wie SPI, I2C, das brauicht man auch immer
wieder wenn man mit MCs hantiert, ist also auch für andere Dinge
nutzbar.
Der SDR-Stick bzw. die Soundkarte liefert dir u.U, nicht die richtigen
Timings, optisch stimmts (wenn man Erfahrung hat und es auf Anhieb
erkennt), schaut man sich die Werte an stimmen sie manchmal nicht, weil
die Audiosoft mit der hohen Samplerate des SDR-Rippers nicht
klarkommt,.... da ist viel davon abhängig wie man den richtig anspricht,
manche Software hat da einige Macken, die erkennen Protkolle die man gar
nicht verwendet (rtl_433 z.B.), usw. sprich viele weitere Fehlerquellen
die man sich evt. aufhalst, ist auch viel zu nervig im Handling, der
Logicanalyzer ist einfach zu handhaben und man sieht sofort das
Ergebniss ohne grosses Gefummel.
SDR-Stick würde ich erst verwenden wenn dein Protokoll über Kabel
funktioniert aber dann brauchst du das eigentlich nicht mehr, ausser
kurz zu prüfen ob das Ding sendet und auch wirklich deinen Code. HAtte
ich auch mal das Problem, funkte aber nix kam an. Mit SDR aufgezeichent
was er sendet, tja nix weil falscher Pin angeschlossen. Die Sticks sind
auch ganz brauchbar um zu schauen was sonst noch auf der Frequenz
rumfunkt und evt deinen Sender manchmal stört wenn er nur sporadisch
funktioniert.
rtl_433 (das nutzt man über einen SDR-Stick) kann auch Virtualwire
automatisch erkennen und dekodieren, ist dafür evt. auch hilfreich.
So eine Datenübertragung ist ganz einfach und ich habe es vor kurzer
Zeit umgesetzt. Da ich über die technischen und gesetzlichen
Voraussetzungen dafür verfüge, habe ich mir einen Sender und einen
Empfänger selbst gebaut. Aber das geht genau so gut, schneller und kaum
teurer, wenn man gekaufte Module verwendet. Aber auch gekaufte Module
müssen den gesetzlichen Vorschriften entsprechend betrieben werden.
Den Sende MC habe ich mit dem Sender verbunden und den Empfänger mit dem
Empfangs MC.
Der Empfänger gibt ohne Signal KEIN "digitales Rauschen" ab, sondern das
Signal für 0. Wenn ich den Sender von seinem MC einschalten lasse, dann
gibt der Empfänger das Signal für 1 ab.
Darauf aufbauend kann man bei gedrückter Taste am Sender ein LED
Lämpchen am Empfänger leuchten lassen, und bei los gelassener Taste es
wieder erlöschen lassen. Dazu musst du auf beiden MCs jeweils ein Port
abfragen und ein anderes Port setzen. Es würde sogar ohne MCs
funktionieren. Aber man kann darauf aufbauend im MC jedes Protokoll
umsetzen, das Sender und Empfänger übermitteln können. Im einfachsten
Fall kann man jeweils nur einen Zustand übermitteln und die Baudrate hat
bei jedem Übermittlungsverfahren irgendwo eine Grenze. Aber sonst:
Baudot Code, Manchester, RZ, Morse Code und einiges mehr. Das darf man
sich nach den gegebenen Notwendigkeiten aussuchen.
Einer, der über sich sagt: "Software Entwickler habe auch ein gutes
Verständnis für Elektronik", hat da sicher kein Problem damit, die
einzelnen Protokolle nach zu lesen.
72 und 55, John
John schrieb:> Der Empfänger gibt ohne Signal KEIN "digitales Rauschen" ab, sondern das> Signal für 0. Wenn ich den Sender von seinem MC einschalten lasse, dann> gibt der Empfänger das Signal für 1 ab.
In diesem Fall wäre ich Dir dankbar, wenn Du einen Link zu einem
entsprechenden Empfänger posten könntest. Ich habe nämlich mehrere
unterschiedliche 433MHz ASK/OOK-Empfänger, und die geben alle eine Art
digitales Rauschen aus, wenn nichts gesendet wird.
Das hat mich schon immer angekotzt - wenn es also auch Modelle gibt, bei
denen das nicht der Fall ist, dann bin ich sehr interessiert.
Hallo Joachim,
tut mir leid, einen Link zu einem nachbaufähigen Empfänger habe ich
nicht. Mein Empfänger ist Eigenbau und die Entwicklung ist noch nicht
abgeschlossen, so dass ich auch da mit keiner publikationsfähigen
Schaltung dienen kann.
Ich weiss nicht, ob du in der Lage bist so etwas selbst zu entwickeln,
oder einen Empfänger zu modifizieren. Je nach Grundlage, gibt es
verschiedene Ansätze:
Manche Empfänger haben einfach eine agc, die auch das Rauschen auf
Nutzsignalhöhe raufregelt. Da kann man die agc so einschränken, dass sie
vorher an eine Schwelle kommt, wo nicht weiter rauf geregelt wird.
Pendelempfänger kann man daran hindern, dass sie ohne ausreichend hohes
Nutzsignal anschwingen. Man muss sie nur nach einer bestimmten Zeit
löschen (quench). Das hat dann noch den Vorteil, dass der Empfänger ohne
Sendersignal unhörbar bleibt.
Schau dir einfach das, was so ungenau als digitales Rauschen beschrieben
wird, mit einem Skop oder über die Soundkarte des PC an. Da sieht man
oft sehr schnell, wie man das mit dem MC unterscheiden kann. Sehr häufig
hilft ein "exponential moving average" filter als single pole tiefpass.
Das braucht so gut wie keinen Speicherplatz im MC.
Meistens ist aber dieses Rauschen in den Sendepausen, kein Problem, weil
die Präambel der Sendung dem Empfänger sich auf das Signal einzustellen
und nach der Sendung kommt das Rauschen erst nach einer bestimmten Zeit.
John
Hi,
wie kann ich am Empfänger eines 433 Mhz funkmoduls die Frequenz messen ?
Beim Sender kann ich das ja über den Oszillator (gibt es hier noch eine
andere Möglichkeit--> Stichwort SDR ?)
Vielen Dank.
Grüsse
diagonal
Die Empfangsfrequenz ist aufgedruckt.
Zu welchem Zweck und was genau willst du messen?
Bei deinem jetzt gegebenen Kenntnisstand kannnst du nur fertige Produkte
anwenden. Zu mehr Kenntnissen wirst du mit ein paar kurzen Antworten im
Forum auch nicht kommen, denn es fehlen GRUNDLAGEN. Da hilft nur
recherchieren und lernen. Die nötigen Informationsquellen, gibt dir jede
Suchmaschine im Internet aus.
Ein Tip: Hör auf, die Leute, von denen du etwas willst (Information zum
Beispiel), anzulügen. Damit stellst du dich selbst in Abseits. Du hast
weder Elektronik Grundkenntnisse noch Grundkenntnisse in digitaler
Datenübertragung wie ein "Software Entwickler" sie hat. Wenn die Art und
das Niveau deiner Fragen nicht zu deinen Behauptungen passt, wird ganz
schnell sichtbar, was Sache ist.
Hallo nochmal,
sorry das ich hier sehr einfache frage stellen, aber das ist ja der Sinn
des Forums:
zu meiner Frage:
wenn ich einen 433 Mhz Sender ( APK Modulation) habe und dieser als
dateneingang einen Pegel von ca. 3 Volt erwartet und das Datensignal 1
Mhz hat, wie kann ich das Signal auf der Empfängerseite über Raspberry
pi3 filtern ?
Vielen Dank und habt nachsicht mit leuten die nicht eure Sprache
sprechen ;-)
Viele Grüße
diago