Ich möchte einige Daten zwischen 2 AVR's per Funk übertragen. Die nötige 433MHz Hardweare hab ich schon, bin aber noch auf der Suche nach einem guten Protokoll für die Übertragung (incl. Manchester Kodierung) Hat da einer einen Tipp?
Einfache 433 MHz Module von Conrad, die gab's damals güstig beim großen C. Heute wohl nemme im Angebot...
Wozu Protokoll? UART auf ca. 4000 Baud einstellen und los geht´s. Vorher aber in´s Datenblatt der Funkmodule (Sender) gucken, die vertragen u.U. keine 5V am Datenpin.
und was ist mit Fehlerkorrektur und von den Modulen geforderte Mancestercodierung?
Bei Amplitudenmodulierten Signalen muss künstlich ein Pegelwechsel erzeugt werden, da die Module mit statischen Zuständen nicht klar sind. Gängigstes Mittel ist eben der Manchestercode, mit dem man ja auch schon eine einfache Überprüfung auf Richtigkeit der empfangenen Daten vornehmen kann. Einfach solche Module an die serielle Schnittstelle (sei es nun PC mit Pegelkonverter oder µC) funktioniert also nicht. Anbei zwei Routinen, die die Daten Manchester-kodieren bzw. -dekodieren. unsigned char restore(void) { unsigned char result = 0; //decode highbyte if (0x00 != (highbyte & 0x80)) result+=0x80; if (0x00 != (highbyte & 0x20)) result+=0x40; if (0x00 != (highbyte & 0x08)) result+=0x20; if (0x00 != (highbyte & 0x02)) result+=0x10; //decode lowbyte if (0x00 != (lowbyte & 0x80)) result+=0x08; if (0x00 != (lowbyte & 0x20)) result+=0x04; if (0x00 != (lowbyte & 0x08)) result+=0x02; if (0x00 != (lowbyte & 0x02)) result+=0x01; return result; } //end of restore void manchester(unsigned char Bitarray) { highbyte=0x00; lowbyte=0x00; if (0x00 != (Bitarray & 0x80)) highbyte+=0x80; else highbyte+=0x40; if (0x00 != (Bitarray & 0x40)) highbyte+=0x20; else highbyte+=0x10; if (0x00 != (Bitarray & 0x20)) highbyte+=0x08; else highbyte+=0x04; if (0x00 != (Bitarray & 0x10)) highbyte+=0x02; else highbyte+=0x01; if (0x00 != (Bitarray & 0x08)) lowbyte+=0x80; else lowbyte+=0x40; if (0x00 != (Bitarray & 0x04)) lowbyte+=0x20; else lowbyte+=0x10; if (0x00 != (Bitarray & 0x02)) lowbyte+=0x08; else lowbyte+=0x04; if (0x00 != (Bitarray & 0x01)) lowbyte+=0x02; else lowbyte+=0x01; } highbyte und lowbyte müssen natürlich als globale Variablen deklariert werden. Gruß Christoph
Seh ich das richtig, dass du die Datenmenge damit (wie bei Manchester eben üblich) verdoppelst? Wieviele oder besser wie lange vertragen solche Module einen statischen Pegel? Ich meine man könnte sie ja auch mit neiedrigerer Baudrate fahren und dann liegen die Pegel ja auch laenger an.
Ja, die Datenmenge, die letztlich übertragen wird, wird verdoppelt. Ich verwende Module von Aurel. Laut Hersteller sollte der Wechsel mit mindestens 50Hz erfolgen. Demnach sollte er bei ein paar kHz keine Probleme mit statischen Zuständen haben, doch eine solche Übertragung ist auf jeden Fall nicht empfehlenswert, da -viele Empfänger statische Pegel nicht detektieren können (Pendenempfänger) -eine Datenübertragung ohne jeglich Codierung extrem anfällig für das immer vorhandene Empfangsrauschen ist. Zum Funk-Protokoll sei noch gesagt, dass man in jedem Fall eine Präambel (ein paar Mal irgendein dafür reserviertes Byte) vorrausschicken sollte, damit sich der Empfänger auf die richtige "Lautstärke" einstellen kann und die serielle Schnittstelle sich einpendelt und das Startbit auch wirklich als diese erkennt.
bei AM Modulen stimmt das unbedingt, alternativ kann man aber auch FM-Module verwenden, dieschwingen nicht aus.
Ich verwende auch die Aurel-Module (AM) und habe bei einem kontinuierlichen Datenstrom von 4000 Baud (USART -> Start 9 gerade Parität / Stop) keinerlei Übertragunsprobleme innerhalb der Reichweite. Bei ständigem Senden von 0-Daten reicht das einzelne Stop-Bit (knapp 400Hz) immer noch aus, um die Module nicht aus dem Konzept zu bringen. Funktioniert ohne Kodierung mit eben den Rohdaten einwandfrei (am Oszi getestet und seit 3 Monaten 24/7 am laufen). Grüße!
Ein relativ handliches Protokoll, x-fach bewährt, ist das AX.25, es wird im AMateurfunk zur Datenübertragung eingesetzt. Mit CRC und Adressierung und Flußsteuerung, aber du kannst dir ja wenn du auf einer Eigenproduktion bestehst einfach nur was abgucken. (Evtl. auch bei EAX.25) Was dem aber je nach Anwendung fehlt ist eine FEC, da wirst du eventuell durch googlen nach "Reed-Solomon" schlauer (Ein Verfahren, bei dem man ein paar Bit mehr überträgt als sein müssten, aber wenn etwas schiefgeht kann man mit deren Hilfe die Fehler finden+korrigieren. In der Praxis: Wenn mal paar Bit durch Rauschen verloren gehen, werden die mithilfe der Zusatzdaten restauriert.) abzugucken bei SITOR Seefunkfernschreiben, AMTOR Amateufunkfernschreiben, oder wenns ein komplexeres Beispiel sein darf DVB :-) Ja, auch WLAN und DVB und Bluetooth und all dieses "moderne Zeuch" ist nur ein verfeinertes Fernschreiben (manche alte Herren haben jetzt vielleicht so ein klackern im Erinnerungsohr...) Grundfrage, die du dir stellen sollst: Müssen sich die beiden Gegenstellen "unterhalten" oder genügts wenn eine Daten rausschreit und die andere lauscht ?
Meine Beiden Gegenstellen kommen sich immer näher, sind sie in Reichwete soll ein Frage-Antwortspiel entstehen. Das alles ist aber Zukunftsmusik, jetzt erst mal in eine Richtung...
für Duplexbetrieb würden sich die easy-Radio-Module eignen, brauchste auch kein extra Protokoll für, einfach auf RX-TX-Schalten und per UART mit 19200 die Datenrein schieben und fertig. Sind aber nicht ganz billig, irgendwas zwischen 30-40 musste dafür rechnen
Der englsiche Hersteller ist LPRS (www.lprs.co.uk), deutsche Distributoren sind die Firma Telemeter (www.telemeter.de) oder zum Beispiel Farnell (www.farnell.de). Ansonsten mal auf der Distributoren-Liste des Herstellers schauen.
Wie wär´s denn mal mit ausprobieren? Wenn Du schon die "Aurels" da hast, was hindert Dich, Daten zu übertragen und die Tauglichkeit zu testen?! Wenn´s geht, kannst Du jegliche Suche einstellen und losbasteln, wenn nicht, kannst Du ja immer noch weitergucken.
Hallo Anton, Sind bei deinem Sendemodul freie Lötstellen? (An welchen ein SMD-Kondensator sein kann). Bei mir ist einer auf der Packung abgebildet , aber am Modul ist er nicht eingelötet. Mfg Hans
Hab die Dinger gerade nicht vor mir, kann mich aber an keien nicht bestückten Bauteile erinnern.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.