Jeder der verschiedene Applikationen mit Mikrocontrollern umsetzt, wird über kurz oder lang einmal den Wunsch verspüren, eine drahtlose Kommunikation einzurichten. Beispielsweise um eine Kommunikation zwischen einem Roboter und einem PC, externen Sensoren und dem MC und vieles ähnliches möglich zu machen.
Wie bei den meisten Sachen ist es in meinen Augen auch hier das Schwerste gewesen, ein geeignetes Modul zu finden. Hierfür gibt es nämlich diverse Auswahlkriterien.
Grob kann man solcherlei Module in Sender (Transmitter), Empfänger (Receiver) und Transceiver, welche beides können, unterscheiden.
Dann gilt es, sich für einen bestimmten Frequenzbereich zu entscheiden. Am gebräuchlichsten ist das 433MHz Band oder bspw. auch das 868MHz Band. Welche Funkbänder in Deutschland frei verfügbar sind, kann man Google leicht entnehmen. Allerdings sind die Sendeleistungen in sämtlichen Bändern begrenzt. Für 433MHz liegt diese bei 10mW, bei 868MHz darf nur noch mit 5mW gesendet werden. Auch gibt es Bestimmungen, welche reglementieren, welche Pausenzyklen beim Senden eingehalten werden müssen (duty cycle). Wer zu den freien Frequenzen, den Sendeleistungen usw. mehr Informationen möchte, der wird auf diversen Seiten im Netz (bspw. von Funkamateuren) fündig.
Der Vollständigkeit halber möchte ich hier einmal einen Ausschnitt der Bestimmungen veröffentlichen:
Passagen aus der CEPT 70-03E:
Band f: 868.000-868.600MHz 25 mW < 1.0 %
Band g: 868.700-869.200MHz 25 mW < 0.1 %
Band h: 869.300-869.400MHz 10 mW No Restriction
Band i: 869.400-869.650MHz 500 mW < 10 %
Band k: 869.700-870.000MHz 5 mW up to 100%
Die erzielbare Reichweite dürfte zwischen den diversen Modulen nicht stark schwanken. Sie liegt im allgemeinen bei 300m (bei freier Sicht zwischen Sender und Empfänger) für das 433MHz Band, bei nur noch 150m im 868MHz Band.
Ein anderes Kriterium ist die verwendete Modulationsart. Hier kann grob zwischen Amplitudenmodulation und Frequenzmodulation unterschieden werden. Im Sinne der Störsicherheit sollte eine FM vorgezogen werden. Die Modulationsart ist durch das verwendete Modul determiniert.
Zuletzt möchte ich noch das Datenformat ansprechen. Dieses kann zwischen den einzelnen Modulen stark schwanken. Es gibt Module, denen es gleich ist, welche Form das Eingangssignal aufweist oder bspw. auch welche, die eine Manchestercodierung erwarten. Auch die maximal erzielbare Datenrate ist ein wichtiges Kriterium. Diese kann je nach Modul zwischen 1200 und 38400 Baud für gängige Module liegen.
Easy-Radio
Nach dem Durchstöbern diverser Foreneinträge sowie dem Lesen einiger auf Homepages veröffentlichter Informationen und Erfahrungsberichte bin ich bei den "Easy-Radio" Modulen von LPRS (Low Power Radio Solutions Ltd.) gelandet. Entschieden habe ich mich für Transceiver im 868MHz Band, um eine bidirektionale Kommunikation zu ermöglichen. Diese sind allerdings nicht unbedingt die günstigste Lösung.
Die wesentliche Vorteile dieser Module sind
schnell beschrieben. Zuerst sei hier der kompakte Aufbau erwähnt. Mit 38*14*4mm
(B*H*T) sollten sie in jedes Gehäuse passen. Ihr SIL-Gehäuse (Single Inline) mit
einem Rastermaß von 2,54mm gewährleistet eine einfache Integration. Das Modul
ist komplett fertig aufgebaut, einzige fehlende Komponente ist eine Antenne.
Hier empfiehlt sich die Verwendung eines λ/4 Drahtes. Berechnet wird dessen
Länge mittels der Formel: c=f*λ, also Lichtgeschwindigkeit = Wellenlänge *
Frequenz. Stellt man diese Formel nach λ um, um die Wellenlänge einer
868MHz-Welle auszurechnen, so ergibt sich: λ = c/f =
299.792.458/868.000.000 = 0,3454m. Da die Antenne nur eine Länge von einem
Viertel der Wellenlänge haben muss, ergibt sich ihre Länge zu 8,6cm. In der
berechneten Länge ist die Zuleitung zur Antenne (Stiftleiste, Leiterbahn, ...)
bereits enthalten. Wer die Antenne nicht direkt anschließen möchte, der muss
Koaxialkabel zum Überbrücken der Distanz zwischen Modul und Antenne verwenden.
Als Antennenmaterial kann man bspw. Kupferlackdraht oder auch normale Litze
verwenden.
Das eigentliche geniale an diesem Modul ist der Fakt, dass man direkt vom USART
auf den Sende- bzw. Empfangseingang gehen kann. Es sind Datenraten bis maximal
38400 Baud möglich. Die Logik kann mit 5V betrieben werden. Soll vom MC in
Richtung PC gefunkt werden, so bleibt einem jedoch die Integration eines MAX232
nicht erspart, zu den Pegeln der PC-Schnittstelle (+/- 12V) ist sie eigentlich
logischerweise nicht kompatibel.
Die Easy Radio Module verwenden zwar zu Kommunikation untereinander die Manchester Codierung, allerdings bleibt dies durch die auf den Modulen integrierte Logik dem Anwender verborgen. Er muss sich darüber nicht den Kopf zerbrechen.
Gesendet bzw. empfangen können immer maximal
128 Byte mit einem mal, danach muss der Puffer geleert werden. Für Konsistenz
der Daten hat der Anwender allerdings selbst zu sorgen, beispielsweise durch
Senden von ACK, Bilden von Checksummen oder auch dem Festlegen eines bestimmten
Sendeprotokolls.
Empfangene Daten werden max. 2,5s im Puffer behalten. Sind sie dann nicht
abgeholt worden, so verwirft das Modul sie. Aus diesem Grund sollte der RDY-Pin
standardmäßig auf Masse gelegt und die empfangenen Daten mittels eines
Interrupts verarbeitet werden. So reicht das Modul empfangene Daten sofort an
den MC weiter. Alternativ kann natürlich auch die Software des Anwenders ein
regelmäßiges Abholen der Daten initiieren.
Der Transceiver kann nur ihm übergebene Daten senden, wenn sein Puffer zuvor von
eventuell empfangenen Daten geleert wurde. Ansonsten verwirft er automatisch die
zu sendenden Daten.
Der Vollständigkeit halber möchte ich hier noch die Pinbelegung meines Moduls (Transceiver) veröffentlichen.
Pin-Nummer | Bezeichnung | Beschreibung |
1 | Antenne | Hier muss eine 50Ω Antenne angeschlossen werden, also beispielsweise ein 8,6cm langer Draht. |
2 | RF GND | Masseleitung der Antenne. Anschluss an GND sowie falls verwendet an die Schirmung des Koaxialkabels. |
3 | RSSI | Analoger Ausgang, welcher als Indikator für die Signalstärke dienen kann. Es kann bspw. an einen AD-Pin des MC angeschlossen werden. |
4 | BSY | Ausgang: Low = Sender ist bereit, Daten vom MC entgegen zu nehmen; High = Sender ist beschäftigt |
5 | Data Out | Ausgabe der empfangenen Daten |
6 | Data In | Eingabe der zu sendenden Daten |
7 | RDY | Eingang: Low = MC ist bereit, die Daten zu empfangen, High = MC ist beschäftigt |
8 | Vcc | Versorgungsspannung von 3,6-5,5V; Die Spannung sollte frei von Störungen sein (<25mV Restwelligkeit) |
9 | GND | Masseanschluss |
Wie man sieht, ist nicht viel beim Anschluss zu beachten. Wichtig ist allerdings: Der Transceiver und die Antenne sollten soweit wie möglich von sonstigen HF-Störquellen (MC und Co) entfernt platziert werden. Zur Not kann man mit Schirmung arbeiten.
Die Angabe von Codeschnipseln erübrigt sich, diese können der Rubrik USART entnommen werden. Die dort vorhandenen Routinen müssen lediglich noch minimal erweitert werden, um auch die Signale RSSI (siehe Rubrik ADC), BSY und RDY nutzen zu können, so man das denn möchte.
Die folgenden Punkte sollten bei der Verwendung der Module beachtet werden:
Zur Hardware:
Wenn die Module aufgebaut sind und es
funktioniert wie immer erst einmal gar nichts, so kann man auch noch das vom
Hersteller bereit gestellte Programm LPRS Easy Radio Development Software
zum Debuggen nutzen (Download auf der
Herstellerseite). Nachdem
man in diesem Programm den COM-Port ordnungsgemäß konfiguriert hat, kann man
eine erste Kommunikation mit den Modulen starten. Zwischengeschaltet werden muss
allerdings ein MAX232 samt obligatorischer Elko-Beschaltung. Wer es wagt, die
Module direkt an die serielle Schnittstelle zu hängen (±12V!!!), der hat diese
im selben Moment gehimmelt :-)
Hat man die Module korrekt angeschlossen, so liefert die Einstellung der
korrekten Frequenz bspw. den folgenden Output:
ER_CMD#C0 (Sent)
ER_CMD#C0 (Received)
ACK (Sent)
Alle im Programm getroffenen Einstellungen werden in einem nichtflüchtigen Speicher gesichert, so dass man die Module nach einem Unterbrechen der Spannungsversorgung nicht wieder erneut konfigurieren muss.
Hier noch kurz eine Skizze meines Versuchsaufbaus:
Anmerkungen:
Zum Testen bin ich folgenderweise vorgegangen:
Ein Transceiver wurde direkt über eine Stiftleiste mit einem MAX232 verbunden. Auf dem PC lief ein Terminalprogramm, welcher einkommende Daten abholen soll. Der zweite Transceiver wurde einfach direkt an die serielle Schnittstelle eines AVR angeschlossen. Über diese habe ich in einer gleichmäßigen Taktung das Zeichen 'x' hinausgeschickt. Hat man alles korrekt angeschlossen (also wie hier beschrieben), so sieht man im Terminalprogramm auf dem PC die ankommenden Zeichen. Allein schon das berühren der Datenpins mit dem Finger führte bei mir zum Senden ganzer Ketten von Nullen (<00><00><00> usw.). Als Programm kam "Terminal" von Bray zum Einsatz.
Wer die ganzen Schritte bis hierhin nachvollzogen hat und es hat alles funktioniert, der kann nun diese Module auch ohne Probleme in nahezu jeder beliebigen Endapplikation einsetzen.
Trotz aller vorangegangener Erklärungen habe ich natürlich wieder ein kleines Beispiel in der Rubrik Programme veröffentlicht, falls doch noch jemand Inspiration benötigt. Allerdings ist es an Einfachheit kaum zu überbieten.