Forum: Mikrocontroller und Digitale Elektronik 433Mhz Funkmodule am ATMega8


von Thomas (Gast)


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

von Thomas (Gast)


Lesenswert?

Ich habe vergessen zu erwähen das es sich um eien OneWay Verbindung 
handelt!

von W.A. (Gast)


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.

von Thomas (Gast)


Lesenswert?

Hi, ich dachte das übernimmt alles der UART für mich?

Thomas

von holger (Gast)


Lesenswert?

>Hi, ich dachte das übernimmt alles der UART für mich?

Tut er aber nicht.

von Kurt (Gast)


Lesenswert?

Auf 433 läuft jede Funksteckdose,
auf 868 soll es etwas ruhiger sein

von Frickelfritze (Gast)


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.

von Frickelfritze (Gast)


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.

von Thomas (Gast)


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

von Frickelfritze (Gast)


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.

von Thomas (Gast)


Lesenswert?

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.

Gruß
Thomas

von Joachim B. (jar)


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?

von G. P. (gpnt)


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.

: Bearbeitet durch User
von Frickelfritze (Gast)


Lesenswert?

Joachim B. schrieb:
> was brauchst du noch?

Diese Dilettanten verwenden grundsätzlich keine Abblock-
Kondensatoren. Das wäre viel zu verwirrend für die Zielgruppe,
und sie zu verwenden wäre auch zu teuer. Und dann müsste
man auch noch begründen wofür die gut sein sollen.

von Joachim B. (jar)


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.

von Thomas (Gast)


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

von Thomas (Gast)


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

von Joachim B. (jar)


Lesenswert?

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

klasse sag nur nicht wo, damit andere auch extra suchen müssen wäre ja 
sonst zu informativ.

Ich liebe solche Antworten in einem Forum, erst fragen und dann nur 
vermelden habs gefunden.

von Thomas (Gast)


Lesenswert?

Sorry, war keine Absicht - hast natürlich recht!

Hier der Link:
https://groups.google.com/forum/#!topic/virtualwire/XZmWJB9TNXg

Irgendwo unten sind die Programme als Download.

Thomas

von Frickelfritze (Gast)


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.

von Frickelfritze (Gast)


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.

von Joachim B. (jar)


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.

: Bearbeitet durch User
von Frickelfritze (Gast)


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

von Joachim B. (jar)


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.

von Frickelfritze (Gast)


Lesenswert?

Joachim B. schrieb:
> ne aber du hast mich 2x zitiert als ich Arduino Links zeigte, was soll
> ich da denken?

Dass da wo der Aufbau gezeigt wird keine Abblock-Cs zu sehen
sind.

Dass auf den Arduinos welche drauf sind ist offensichtlich.

von Für unsere Gäschd nur des Beschd (Gast)


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.

von Für unsere Gäschd nur des Beschd (Gast)


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.

von Joachim B. (jar)


Lesenswert?

Frickelfritze schrieb:
> Dass auf den Arduinos welche drauf sind ist offensichtlich.

ja und auch da wird immer wieder über das Layout gemeckert!
Die Abblockkondensatoren reichen manchen Leuten nicht auf den Arduinos 
und bei Nachbauten wird manchmal noch mehr gespart!

rede dich nicht raus du hast zuwenig geschrieben als das man ahnen 
könnte worauf du dich beziehst!

von Thomas (Gast)


Lesenswert?

@Für unsere Gäschd nur des Beschd (Gast)
Laut der Homepage ist die Libary nicht für die AVR Familie umgesetzt 
worden. Wenn dann eventuell das auch irgend jemand die Lib auf ATMegas 
umgebaut hat.

http://www.airspayce.com/mikem/arduino/RadioHead/index.html

von Thomas (Gast)


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

von Frickelfritze (Gast)


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.

von Thomas (Gast)


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

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.