433Mhz Funkmodule am ATMega8

Gast #4587728
Lesenswert?

Hallo,

ich möchte zwei ATMega8 via Funk miteinander verbinden. Die Entfernung 
beträgt ungefähr 8 Meter. Eigentlich muss nur 1 Bit übertragen werden 
wobei ein ganzes int von Vorteil wäre.

Bei Ebay habe ich für wenig Geld ein 433Mhz Set gefunden:
Sender: MX- FS- 03V
Empfänger: MX- 05V

Kann ich die Teile einfach an den RX/TX Port anschließen und Daten über 
den UART senden und empfangen oder gehört da noch mehr dazu? Wie 
störanfällig sind diese Teile gegenüber dem Müll im Äther? Werden 
Störungen bei Benutzen des UART unterdrückt?

Danke mal für die Hilfe

Thomas
Gast #4587733
Lesenswert?

Thomas schrieb:
> Kann ich die Teile einfach an den RX/TX Port anschließen und Daten über
> den UART senden und empfangen oder gehört da noch mehr dazu?

Nein, allerdings.

> Wie störanfällig sind diese Teile gegenüber dem Müll im Äther?
> Werden Störungen bei Benutzen des UART unterdrückt?

Das ist ein strohdoofer Empfänger. Woher soll der wissen, was Nutzsignal 
und was Störsignal ist?
Bevor es mit der Übertragung der eigentlichen Daten los geht, muss der 
Sender erstmal ein Vorspiel veranstalten, damit der Empfänger in 
Stimmung kommt. Dann muss die Synchronisation zwischen Sender und 
Empfänger folgen und erst dann kommen die eigentlichen Daten. Außerdem 
ist es sinnvoll, das Datentelegramm noch durch eine Prüfsumme 
abzusichern.
Gast #4587851
Lesenswert?

Thomas schrieb:
> Kann ich die Teile einfach an den RX/TX Port anschließen

Das macht überhaupt keinen Sinn denn die meiste Zeit
wirst du nur Schrott empfangen. Auf diese Weise wirst
du auch etwas (Schrott) empfangen wenn dein Sender gar
nichts sendet.

Für diese Module gibt es die sogenannte Virtual Wire Lib
auf Arduino-Basis die man sich auch so (um-)schreiben
kann dass sie ohne Arduino Software verwendbar ist.

Virtual Wire hat ein Protokoll das es ermöglicht
Schrott (Empfangsrauschen) von realen eingehenden Daten
zu unterscheiden. Es synchronisiert sich mit einem Header
ein und empfängt dann ein vorbestimmt langes Paket
welches mit einer Checksumme überprüft wird. Damit
hat man schon mal eine gewisse Datensicherheit. Die
Aufgabe des "Users" ist es noch, die Inhalte auszuwerten
ob das Datenpaket wirklich für den einen Empfänger
bestimmt ist.
Gast #4587864
Lesenswert?

W.A. schrieb:
> Das ist ein strohdoofer Empfänger.

Yes. Er kann nur 0 und 1 empfangen, und das tut er dauernd.
Wegen seines Komparators der immer irgendwo in der Mitte
schwebt macht er selbst aus dem FM Rauschen noch wilde
Bitfolgen und verwirrt damit jeden RS232 Empfänger.
Gast #4587925
Lesenswert?

Okay verstanden, danke für die Infos.

Ich könnte aber auch über einen Timer eine Art PWM Sequenz senden welche 
der Empfänger auswertet. Nur bei korrekter Reihenfolge und PWM Abständen 
würde der Empfänger das Empfangene als eine Log 1 erkennt. Ich muss mal 
das Oszi an das Empfangsmodul hängen um zu sehen was man sich so alles 
einfängt.

Nach dem „Virtual Wire“ werde ich mal schauen. Wenn ich eine fertige 
Funktion einbinden kann, welche mir die ganze Checksummen und 
Protokollverarbeitung macht wäre das ja die optimale Lösung.

Gruß
Thomas
Gast #4587932
Lesenswert?

Thomas schrieb:
> Ich könnte aber auch über einen Timer eine Art PWM Sequenz senden welche
> der Empfänger auswertet.

Ja dann mach mal. Da haben sich Leute schon Gedanken gemacht wie
man das macht. Irgendeine Sequenz senden, das kann jeder. Aber sie
sicher und eindeutig zu empfangen ist eine Kunst für sich. Der
Empfänger weiss nämlich nicht wann er anfangen soll. Und eine
Prüfsumme hast du bei deiner "PWM" vermutlich auch nicht.
#4588003
Lesenswert?

Thomas schrieb:
> Okay verstanden, ich werde mir das Thema "Virtual Wire" genauer
> anschauen. Gibt es irgendwo ein vernüftiges HowTo dazu, auf die schnelle
> habe ich nichts gefunden.

echt so schwer, ich fand das hier:
http://www.arduino-tutorial.de/2015/01/funkuebertragung-von-messwerten-mit-dem-rf-link-modul/

und das:
http://shelvin.de/433-mhz-datenuebertragung-mit-dem-arduino/

was brauchst du noch?
#4588004
Lesenswert?

Falls du es etwas einfacher in der Ansteuerung magst, kann ich dir die 
XBee Pro 868MHz Module empfehlen.
Die musst du einmalig mit dem Programm XCTU konfigurieren, wo du dann 
jeweils die Seriennummer des anderen Moduls einträgst.
Sind die Dinger einmal konfiguriert, verbinden die sich automatisch, 
sobald beide bestromt und in Reichweite sind.
Daten senden und empfangen geht dann ganz einfach über UART, alles 
weitere übernimmt der Mikrocontroller, der auf dem XBee drauf ist.

Edit: Der Nachteil ist, dass die Module relativ teuer sind.
#4588038
Lesenswert?

Frickelfritze schrieb:
> Diese Dilettanten verwenden grundsätzlich keine Abblock-
> Kondensatoren.

nun auf den fertigen Arduino Modulen sind ja welche, über Menge und 
Größe kann man trefflich diskutieren,
trotzdem ist es ein guter Hinweis wenn auch mit unpassenden Worten....


also an alle Nachbauer verpasst den +VCC nach GND noch an den 
Funkmodulen Abblock Cs Kerko 100nF-470nF und einen 47µF bis 100µF Elko 
damit die Funkmodule auch genügend Power beim Senden gebuffert bekommen.
Gast #4588702
Lesenswert?

Ich habe mir jetzt den Code und einge Threads zu VirtuelWire angeschaut. 
Den Arduino Code umschreiben das er mit einem ATMega8 läuft ist nicht 
ganz ohne. Die Portkonfiguration zu ändern ist kein Problem aber bei dem 
Timer und einigen anderen Funktionen bin ich Planlos.
Existiert keine fertige VirtuelWire Libary für die AVR Familie oder gibt 
es noch eine Alternative zu VW?

@Gianluca - danke für den Tip. Ich habe aber bereits zwei solche billige 
Module bestellt. Hätte den Aufbau gern mit denen gemacht.

Gruß
Thomas
Gast #4588744
Lesenswert?

Okay, habe eben doch noch Code gefunden wo jemand das VW auf einem 
ATiny85 realisiert hat. Den Code konnte ich einbinden und kompilieren. 
Mal schauen ob es mit den Modulen funtzt wenn diese da sind.

Thomas
Gast #4589194
Lesenswert?

Joachim B. schrieb:
> nun auf den fertigen Arduino Modulen sind ja welche, über Menge und
> Größe kann man trefflich diskutieren,

Da sind welche?
Von Mehrzahl kann man hier keine Rede sein. Ein müdes C
auf dem Empfänger-Modul, vermutlich deplaziert, kein
einziges auf dem Sende-Modul.

Ich rede hier von Abblock-Kondensatoren.
Gast #4589202
Lesenswert?

Thomas schrieb:
> Okay, habe eben doch noch Code gefunden wo jemand das VW auf einem
> ATiny85 realisiert hat.

Das ist auch nur die Umsetzung des C++ Codes der Arduino Lib
auf normales C. Allerdings sehr unprofessionell und chaotisch.
Die Tabulation und Kommentare alleine sprechen Bände ....
Ausserdem leuchtet es nicht ein aus einer Lib zwei (receive
und transmit) zu machen, die Platzverhältnisse können es ja
nicht sein.
#4589227
Lesenswert?

Frickelfritze schrieb:
> Joachim B. schrieb:
>> nun auf den fertigen Arduino Modulen sind ja welche, über Menge und
>> Größe kann man trefflich diskutieren,
>
> Da sind welche?
> Von Mehrzahl kann man hier keine Rede sein. Ein müdes C
> auf dem Empfänger-Modul, vermutlich deplaziert, kein
> einziges auf dem Sende-Modul.

was genau ist auf dem Arduino Modul nicht zu verstehen?
Ich habe gerade auf dem nano328p 6 Cs gezählt und auf dem m2560 fange 
ich nicht erst mit zählen an.

Wenn du kritisierst das auf den 433MHz wenig Kondis sind, vielleicht 
reicht das ja so, zur Verwendung kann man bei der Integration 433MHz 
Teile am Arduino noch nachbessern, schrieb ich aber auch.

Wer unbedingt glaubt die 433 MHz Kaufteile verbessern zu müssen dem 
steht es doch frei dort KerKos und ElKos nachzurüsten.
Gast #4589246
Lesenswert?

Joachim B. schrieb:
> was genau ist auf dem Arduino Modul nicht zu verstehen?

Von Arduino habe ich nicht gesprochen.
Meine Kritik bezieht sich auf die Sende- und Empfangsmodule.

Und nur weil auf den Arduino-Modulen Abblock-Cs drauf sind
braucht man sich keineswegs drauf verlasssen dass es woanders
keine braucht.

Die Wirkung eines Abblock-Cs lässt nämlich nach wenigen cm
deutlich nach, je nach HF-Anforderungen....
#4589413
Lesenswert?

Frickelfritze schrieb:
> Von Arduino habe ich nicht gesprochen.

ne aber du hast mich 2x zitiert als ich Arduino Links zeigte, was soll 
ich da denken?

Frickelfritze schrieb:
> Diese Dilettanten verwenden grundsätzlich keine Abblock-
> Kondensatoren.

klar war das auf die Verschaltung Arduino und 433 MHz Modul gemünzt, ein 
häufiger Fehler.

Das du nun das Layout der Module meinst konnte ich nicht ahnen, dazu 
waren deine Worte zu sparsam.
Gast #4589461
Lesenswert?

Such mal nach "RadioHead" lib, das ist der Nachfolger von VirtualWire, 
genauer gesagt ist es eine Lib um diverse Sendebausteine abzusprechen 
wie nRF24x und halt auch solche 'doofen' ASK-Modul, so heisst der 
entspr. Part jetzt auch, früher hiess es VirtualWire. Wenn mich nicht 
alles täuscht sind dort auch verschiedene Implementierungen drinn für 
diverse Atmels.
Gast #4589468
Lesenswert?

Oder schau dir mal das Video an, da implementiert einer sowas Ähnliches 
wie VirtualWire, damit kapierst du worauf es bei so einem Protokoll 
ankommt, den Source gibts auch dazu.
https://www.youtube.com/watch?v=3Rs3SJBsiYE

Der Typ von der RadioHead-Lib hat auf seiner Seite auch ein PDF verlinkt 
das ASK-basierte Protokolle erklärt, darauf aufbauend hat er VirtualWire 
entwickelt, iirc, bin jetzt zu faul auf der Seite nachzuschauen.
Gast #4609618
Lesenswert?

Hi Zusammen,

ich habe es jetzt auf 2 ATMega8 am laufen und übertrage immer ein 
Zeichen abwechselnd. Das Telegramm hat eine Länge von 200ms wenn ich es 
mit dem Oszi aufzeichne. Alle 200-300 Telegramme habe ich ein 
fehlerhaftes Telegramm (vw_rx_bad) was denke ich im grünen Bereich ist. 
Bei Zeiten kleiner 200ms fürs komplette Telegramm geht die Fehlerrate 
hoch. Bei kleiner 50ms ist jedes zweite Telegramm für die Tonne.
Ich habe die Daten von der angegebenen Quelle verwendet. Ging eigentlich 
ganz gut nur der Code ist echt nicht aufgeräumt. Hat ein wenig gedauert 
zu verstehen was wie wo warum gemacht wird.

Danke

Thomas
Gast #4609714
Lesenswert?

Thomas schrieb:
> Das Telegramm hat eine Länge von 200ms wenn ich es
> mit dem Oszi aufzeichne. Alle 200-300 Telegramme habe ich ein
> fehlerhaftes Telegramm (vw_rx_bad) was denke ich im grünen Bereich ist.
> Bei Zeiten kleiner 200ms fürs komplette Telegramm geht die Fehlerrate
> hoch. Bei kleiner 50ms ist jedes zweite Telegramm für die Tonne.

Die Länge eines Telegramms gibt nur unzureichend die Übertragungs-
verhältnisse wieder. Aus einer Länge kann nicht beurteilt werden
welche Bitrate eingestellt ist da die Paketgrösse fehlt. Auch ist
die Angabe einer Fehlerrate sinnlos wenn nicht die Entfernung und
die Bitrate angegeben ist.

Wenn man annimmt dass die Übertragung noch "weit im rauscharmen
Bereich" stattfindet werden die meisten Fehler wohl dadurch
auftreten dass, bedingt durch die Breitbandigkeit des Empfängers
(keine Schmalbandselektion vorhanden), beliebig Störungen in
diesem vielgenutzten Frequenzbereicht das zu übertragende
Telegramm zerschiessen.
Gast #4611266
Lesenswert?

Frickelfritze schrieb:
> Thomas schrieb:
>> Das Telegramm hat eine Länge von 200ms wenn ich es
>> mit dem Oszi aufzeichne. Alle 200-300 Telegramme habe ich ein
>> fehlerhaftes Telegramm (vw_rx_bad) was denke ich im grünen Bereich ist.
>> Bei Zeiten kleiner 200ms fürs komplette Telegramm geht die Fehlerrate
>> hoch. Bei kleiner 50ms ist jedes zweite Telegramm für die Tonne.
>
> Die Länge eines Telegramms gibt nur unzureichend die Übertragungs-
> verhältnisse wieder. Aus einer Länge kann nicht beurteilt werden
> welche Bitrate eingestellt ist da die Paketgrösse fehlt. Auch ist
> die Angabe einer Fehlerrate sinnlos wenn nicht die Entfernung und
> die Bitrate angegeben ist.
>
> Wenn man annimmt dass die Übertragung noch "weit im rauscharmen
> Bereich" stattfindet werden die meisten Fehler wohl dadurch
> auftreten dass, bedingt durch die Breitbandigkeit des Empfängers
> (keine Schmalbandselektion vorhanden), beliebig Störungen in
> diesem vielgenutzten Frequenzbereicht das zu übertragende
> Telegramm zerschiessen.



Okay, folgende Parameter habe ich von der Quelle übernommen:

VW_MAX_MESSAGE_LEN = 30
VW_RX_RAMP_LEN = 160
VW_RAMP_ADJUST = 9
VW_RX_SAMPLES_PER_BIT = 8
VW_HEADER_LEN = 8

Wie schon oben beschrieben sende ich nur 1 Character. Die Entfernung 
beträgt ungefähr 12 Meter allerdings über 2 Stockwerke mit Betondecken! 
Die Fehlerrate ist nicht merklich gestiegen nachdem ich Sender und 
Empfänger in verschiedenen Stockwerken plaziert habe. Ich habe den 
Sender 24h abgeschaltet und die VW Funktion hat keinen Schrott in mein 
Programm durch Störungen durchgelassen. Für meine Anwendung ist es 
super, ich bin zufrieden.

Thomas

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren