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