‘Drahtlose serielle Datenübertragung auf 2.4GHz’, das war der alte Titel dieses Projektes. In diesem Fall kommen die Daten vom Unilog, einem feinen und kleinen Datenlogger aus dem Hause SM-Modellbau in Deutschland. Und weil dieses Projekt eng an den Unilog angelehnt wird, habe ich den Titel zu seinem Gunsten umbenannt. In einem ersten Schritt werden die Daten auf dem originalen Unilog Display angezeigt. In einem weiteren Projekt kommt dann ein eigenes 2″ Farbdisplay zum Einsatz, das zusätzliche Funktionen hat.
Komponenten
Als Hauptkomponenten kommen der Unilog und das dazu erhältliche Display zum Einsatz. Für die Übertragung der Daten per Funk verwende ich die XBee-Module der Firma MaxStream. Das XBee-Pro Modul unterstützt die maximale in Europa zulässige Sendeleistung von rund 18mW. Die Reichweite wird vom Hersteller mit rund einer Meile angegeben. Wie weit man wirklich kommt wird die Praxis erweisen.
Unilog
Dies ist die Beschreibung auf der Webseite von SM-Modellbau;
Mit dem kleinen leistungsstarken RC-Datenlogger können Spannung, Strom, Leistung, Kapazität, Drehzahl, Temperatur und Höhe in einem Modellflugzeug gemessen, gespeichert und anschliessend bequem mit unserem UniDisplay direkt vor Ort oder nachträglich am PC bzw. Laptop ausgewertet werden.
Unilog-Display
Angaben von SM-Modellbau
Anzeigedisplay für unseren InfoSwitch und UniLog. Alle Messwerte können live angezeigt und Parameter direkt eingestellt werden.
Maxstream Xbee-Pro
Die XBee-Module werden grundsätzlich in der drahtlosen Sensortechnik verwendet, eignen sich aber wegen ihrer Flexibilität ausgezeichnet für diesen Zweck. Technologisch funktioniert es ähnlich einem Netzwerk (ZigBee/IEEE 802.15.4). Mehr über die Möglichkeiten dieses Moduls kann man bei MaxStream erfahren.
Funktionsprinzip
Original wird das Display wird mit einem Kabel mit dem Unilog verbunden. Die Daten werden dann per RS232/TTL gegenseitig übermittelt. Um nun die Daten Wireless übertragen zu können, müssen die Daten aufbereitet und mit den XBee-Modulen übermittelt werden. Das würde theoretisch auch direkt ohne zusätzliche Prozessoren funktionieren, doch bekanntlich steckt der Teufel im Detail.
- Da wäre zum einen die Baudrate, mit der zwischen Unilog und Display kommuniziert wird. Diese ist mit 115200 so hoch , dass bei direkten Senden zum XBee Bitfehler auftreten. Eine Anfrage beim MaxStream-Support hat ergeben, dass das XBee-Modul exakt 111’000 Baud hat. Das ergibt sich aus einem internen Takt von 1 MHz und dem Vorteiler (1 MHz / 9). Darum muss hier ein Prozessor mit USART-Schnittstelle eingesetzt werden.
- Der verwendete Mikroprozessor enthält nur eine USART-Schnittstelle. Um Daten trotzdem an das XBee-Modul senden zu können wird dieser Teil der Kommunikation per Software-RS232 implementiert. Welche Konsequenzen das für die Software bedeutet, erläutere ich im Softwareteil.
- Man kann die XBee-Module auf zwei Arten betreiben, Transparent oder im API-Mode. Jede Betriebsart hat ihre Vorzüge und Schwächen. Im Transparent-Modus werden alle Zeichen die ein Modul empfängt an das andere Modul weitergeleitet und dort wieder ausgegeben. Die Programmierung des Moduls muss mit einer speziellen Sequenz eingeleitet werden. Im API-Modus kommt ein einfaches Protokoll zum Einsatz, in der alle Nutzdaten und Einstellwerte in einen sogenannten Frame verpackt werden. Der Frame enthält zusätzliche Informationen wie zum Beispiel die Zieladresse, Status des Transfers oder die Signalestärke des soeben empfangenen Frames.
Hardware
Das Schema beschränkt sich auf die Verdrahtung der einzelnen Hauptkomponenten. Für Statusanzeigen sind drei LEDs vorgesehen, wo von eine direkt von dem XBee-Modul angesteuert wird. Für eine erleichterte Erstinbetriebnahme ist ein Programmierport vorhanden. Es ist auch möglich, per Bootloader über die Unilog/Display Schnittstelle das Programm hochzuladen.
Die Anschlussleisten des XBee-Moduls haben einen 2mm Raster. Es sollte aber keine grossen Probleme bereiten ensprechende Buchsenleisten zu bekommen. Dadurch lassen sich die Module auch nicht direkt auf einer Lochrasterplatine betreiben. Eine kleine Platine in etwa der gleichen Grösse wie ein XBeePro-Modul beherbergt alle erforderlichen Komponenten.
Die Variante für den Unilog kann einseitig ausgeführt werden. Die Versorgung mit Spannung erfolgt direkt über das Unilog. Die Variante fürs Display ist fast exakt die gleiche wie für den Unilog. Es kommt nur noch ein Spannungsregler hinzu, der die geforderten 3.3V für den Prozessor und das XBee-Modul bereitstellt. Diese Platine ist doppelseitig ausgeführt, weil der Spannungsregler auf der oberen Seite Platz finden musste.
Software
Kommunikation: Aus der hohen Baudrate von 115200 Baud für die Kommunikation mit dem Unilog und dem Display ergeben sich ein paar Schwierigkeiten die es zu umschiffen gilt. Der verwendete Prozessor ATMEL AVR48/88/168 hat nur ein hardwareseitiges USART. Die Verbindung zum XBee-Modul muss darum mit einer Softwarelösung gemacht werden. Es entstehen dadurch aber Probleme im Timing auf die ich hier etwas genauer eingehen möchte.
Zum ersten Verständnis etwas Kopfrechnen:
Baudrate Unilog = 115200
Baudrate XBee = 38400
115200 Baud = ca. 11520 Zeichen/sek. = 0.086ms pro Zeichen
38400 Baud = ca. 3840 Zeichen/sek. = 0.26ms pro Zeichen = 0.026ms pro Bit (Startbit + 8 Datenbit + Stopbit)
Der Unilog sendet die Daten alle am Stück, das heisst, die Bytes im Datenpaket haben keine ‘Luft’ dazwischen. Das Status-Datenpaket hat eine Grösse von 24 Bytes. Das sind rund 2.1 ms Übertragungsdauer. Wenn also der Unilog Daten sendet, wird während 2.1ms alle 0.086ms die entsprechende Interruptroutine zum Abholen des Zeichens aufgerufen. Würde in dieser Zeit mit der XBee kommuniziert, gingen bei der XBee unvermeidlich Zeichen verloren. Es muss also auf eine zeitliche Trennung der Kommunikation geachtet werden.
Timing Unilog: Ein Statusrequest an den Unilog wird in maximal ~3ms beantwortet. Nach Tests am Oszillografen schwankt diese Zeit zwischen quasi 0 und 3 ms. Es deutet darauf hin, dass der Unilog Requests in festen Intervallen abarbeitet.
Timing Display: Bei Anschluss an die Stromversorgung versucht der Prozessor im Display einen Kontakt mit dem Unilog zu erhalten. Ein erster Versuch, Daten direkt über das XBee im transparenten Modus zu senden, ist wegen den zu hohen Latenzzeiten des XBee gescheitert. Das Display erwartet eine Antwort in den oben genannten ~3ms. Wie weit die Antwort hinausgezögert werden kann, habe ich nicht getestet.
Timing XBee: Die Xbee wird im aus praktischen Gründen API-Mode 2 betrieben. Für das Empfangen und senden von Daten ergeben sich darum einige Besonderheiten. Bevor Daten gesendet werden können, muss ein API-Datenframe erstellt werden. Darin ist die Zieladresse, die Checksumme und weitere Informationen enthalten. Nach dem Übermitteln des Frames quitiert die XBee mit einem weiteren Frame, wie die Übermittlung an das Ziel verlaufen ist. Dieses Frame wird nach einigen 10ms gesendet. Daten, die die XBee von aussen erhält, werden sofort in einem Frame an den Prozessor übermittelt. Wenn man sich die Timingangaben der verschiedenen Baudraten vor Augen hält, ergeben sich für die XBee folgende Übertragungszeiten;
Requestframe: Grösse = 10 Bytes = 2.6ms = während 2.6ms alle 0.026ms einen Interrupt für das Senden eines Bits
Responseframe: Grösse = 10 Bytes = 2.6ms = während 2.6ms alle 0.026ms einen Interrupt für das Senden eines Bits
Datenframe: Grösse = 30 Bytes = 7.8ms = während 7.8ms alle 0.026ms einen Interrupt für das Empfangen eines Bits
Damit aber das XBee nicht einfach beginnt Daten zu senden, wird die RTS-Leitung verwendet. Erst wenn ‘die Luft rein ist’ wird die Kommunikation freigegeben und anschliessend auf einen eingegangenen Datenframe geprüft.
Timing des Ganzen: Damit die ganze Kommunikation aneinander vorbei passt, muss man eine geeignete Strategie entwickeln. Das Hauptproblem entsteht, weil der AVR nur einen USART hat. Ein grösserer Prozessor mit zwei USARTS gibt es zwar, jedoch ist sein Preis hoch und die Bauform für einen Selbstbau ungeeignet.
Nachtrag (3.12.2008)
Die Daten zwischen Unilog und Display können auch mittels Bluetooth-Modulen übertragen werden. Eine genauere Beschreibung findet sich hier
Software
MaxStream XBee/XBeePro API-Mode 2 Lib fuer Bascom V1
MaxStream XBee/XBeePro API-Mode 2 Lib fuer Bascom V2
Links
XBEE Modules
Über dieses Thema in Modellbauforen:
UniLog über 2.4GHz DSSS Funkmodul drahtlos auslesen
verkauft eure analogfunken, solange sie noch jemand will
OPEN SOURCE 2.4GHz SS System