Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Vollduplex Kommunikation

Bei einer Vollduplex Kommunikation lassen sich Nachrichten zur gleichen Zeit senden und empfangen. Der Propeller nutzt in seiner Voreinstellung nur das sogenannte Halbduplex-Verfahren mit dem SimpleIDE Terminal; es lässt sich aber in ein Vollduplex-System umwandeln. Im folgenden Beispiel wird gezeigt, wie eine Vollduplex-Kommunikation mit XBees und mit dem SimpleIDE Terminal aufgebaut werden kann.

2 - Die Schaltung

Bevor es losgeht, muss sichergestellt werden, dass der Propeller Chip kein Signal an den DO Ausgangspin auf dem Activity Board sendet. Wird von einem Modul ein HIGH-Signal und von dem anderen zur gleichen Zeit ein LOW-Signal gesendet, kann dies zur Zerstörung des I/O Pins am Propeller oder am XBee führen. Deshalb wird zu Beginn ein kurzes Programm gestartet, das diese Situation entschärft.

Abbildung 1 - XBee Modul auf dem Propeller Board of Education
  • Setze das XBee Modul in den auf dem Prop-BoE bzw. Prop-AB vorgesehenen Steckplatz ein. Verfahre ebenso mit dem XBee USB-Adapter.
  • Übertrage das Programm xbee_vorbereitung.c in den SimpleIDE Editor und speichere es ab.
  • Starte das Programm über Load EEPROM & Run.

Das Programm xbee_vorbereitung.c

Nach diesem Vorbereitungsschritt kann jetzt mit dem Aufbau der Testschaltung begonnen werden.

XBee Testprogramm
Material
  • 2x  XBee 802.15.4 Sender.
  • 2x  Prop-AB oder Prop-BoE und USB-Kabel
  • 1x  XBee USB Adapter Board
  • 2x  Steckdraht
Aufgaben
  • Das USB-Kabel ist zu Anfang des Versuchs noch nicht mit dem XBee USB Adapter verbunden.
  • Der PWR-Schalter auf dem Prop-Board muss auf 0 stehen.
  • Verbinde den XBee-Adapter über das USB-Kabel mit dem Rechner.
  • Verbinde den Anschluss XBee DO mit dem I/O Port P9 und XBee DI mit P8.
  • Verbinde das Prop-Board über den USB-Anschluss mit einem PC.
Abbildung 2 - Verbindung des XBee-Moduls mit den I/O Ports des Propeller Controllers

3 - Testprogramm

Das Testprogramm ist ein Schleifenprogramm, das nichts anderes tut, als eine gesendete Nachricht auch wieder zu empfangen. Nachdem das SimpleIDE Terminal über die Baudrate so eingestellt ist, dass es mit dem XBee Adapter kommunizieren kann, lassen sich Zeichen über die Tastatur an den XBee auf dem Adapter übertragen. Dieser XBee strahlt das Zeichen per Funk ab. Der XBee auf dem Propeller Board empfängt das Zeichen und überträgt es als serielle Nachricht an den Propeller Controller. Das Programm XBee_Testprogramm.c sendet den Text "Du hast eingegeben: " und das eingegebene Zeichen zurück an den XBee auf dem Prop-BoE, der es dann per Funk an den XBee auf dem Adapter überträgt. Der XBee auf dem Adapter erhält die Nachricht, sendet sie an den PC, die dieser dann im SimpleIDE Terminal anzeigt.

Abbildung 3 - Funkverbindung zwischen einem Prop-BoE und einem XBee Adapterbaustein
XBee Testprogramm
Aufgaben
  • Übertrage das Programm XBee_Testprogramm.c in den SimpleIDE Editor und speichere es ab.
  • Notiere dir, mit welchem COM-Port das Prop-Board verbunden ist. Oben rechts in der Schaltflächenleiste werden die Ports angezeigt. Da auch das XBee-Modul über einen COM-Port läuft, löst man die USB-Verbindung vom XBee-Adapter und beobachtet, welcher COM-Port im Fenster verschwunden ist. Der angezeigte COM-Port ist der vom Prop-Board.
  • Verbinde den XBee-Adapter mit dem USB-Kabel mit dem Rechner.
  • Starte das Testprogramm über die Schaltfläche Load EEPROM & Run.
  • Wähle im COM-Port Fenster den Port des XBee-Adapters.
  • Wähle im Hauptmenü von SimpleIDE Program - Open Terminal und stelle eine Baudrate von 9600 ein.
  • Drücke den RST-Knopf auf dem Prop-Board.
  • Gib einzelne Buchstaben über die Tastatur ein und überprüfe, ob im Terminal der Text: "Du hast eingegeben: " und nachfolgend das über die Tastatur eingegebene Zeichen erscheint.

Terminalausgabe

Das Programm xbee_testprogramm.c

Abbildung 4 - XBee_Testprogramm.c (Courtesy of Parallax Inc.)

Wenn das Programm verändert und dann neu gestartet werden soll, gehe wie folgt vor:

  • Schließe das SimpleIDE Terminal.
  • Stelle im Drop-Down-Menü den COM-Port für das Prop-Board ein.
  • Speichere mit Load EEPROM & Run das neue Programm im EEPROM.
  • Setze den COM-Port für den XBee-Adapter und öffne mit Program - Open Terminal das Terminalfenster.
  • Mit einem Reset auf dem RST-Knopf wird das neue Programm geladen.

Wie arbeitet das Programm XBee_Testprogramm.c?

Die Bibliothek, die den Voll-Duplex-Betrieb unterstützt, heißt fdserial. Mit

  • #include "fdserial.h"
    

werden alle Funktionen daraus für die neue Anwendung zugänglich.

  • fdserial *xbee
    

richtet eine Voll-Duplex-Gerätekennung ein. Im Hauptprogramm main() werden mit

  • xbee = fdserial_open(9, 8, 0, 9600)
    

alle Parameter der seriellen Verbindung festgelegt. Über P9 werden in diesem Fall die Nachrichten empfangen und über P8 gesendet. Der Modus ist auf 0 gesetzt und die Baudrate auf 9600 Bits pro Sekunde. Die Funktion

  • fdserial_open
    

liefert eine Speicheradresse an die Pointervariable xbee. Damit kann xbee zur Gerätekennung von jeder fdserial Funktion mit fdserial *term Parametern wie auch jeder simpletext Funktion mit fdserial *term Parametern benutzt werden. Das ist sinnvoll, da mit einem Propeller mehrere Voll-Duplex Geräte verbunden sein können. Mit der Gerätekennung wird Funktionen wie dprint und fdserial_rxChar mitgeteilt, mit welchem Gerät sie in Verbindung treten sollen. Deshalb taucht xbee in den Funktionen

  • dbprint(xbee, "  , \n") und
    
  • c = fdserial_rxChar(xbee)
    

auf.

 

Wie beim seriellen Halb-Duplex-Verfahren lassen sich Voll-Duplex-Gerätekennungen auch mit dprint verwenden. Damit lassen sich dann auch Formatierungsanweisungen übertragen, die ähnlich sind wie im print-Befehl im SimpleIDE Terminal. Der Befehl

  • dprint(xbee, "Klicke in das Terminalfenster, \n")
    

überträgt die Mitteilung und einen Zeilenvorschub durch die Zeichenfolge \n. Für die Zahlendarstellung von ganzen Zahlenwerten kann das Formatierungszeichen %d und für Fließkommazahlen %f (floating point) benutzt werden.

Die Bibliothek fdserial führt den Programmcode in einem zugeschalteten Cog aus, der übertragene Bytes in einem Pufferfeld sammelt. Ist dieses leer, dann sendet die Funktion fdserial_rxReady eine -1 zurück. Sind ein oder mehrere Zeichen im Puffer, gibt fdserial_rxReady zuerst das Zeichen aus, das am längsten im Puffer verweilt und verfährt bei den nachfolgenden Zeichen aus dem Puffer auf genau die gleiche Weise, bis die Funktion eine -1 zurückgibt - der Puffer ist leer.

Innerhalb der Endlosschleife (while(1)) enthält die Variable c entweder eine -1 oder das älteste Zeichen aus dem Puffer. Bei einer -1 wird der Programmcode des Entscheidungsblocks (if ...) übersprungen. Enthält c ein Zeichen, dann ist es ungleich -1 und in diesem Fall wird der Programmcode im Entscheidungsblock ausgeführt:

  • dprint(xbee, "Du hast eingegeben: %c\n",c)
    

Die Deklaration fdserial *xbee (Programmzeile 7) ist global, da sie vor allen Funktionen steht. Das ist sinnvoll, da damit jede Funktion in der Anwendung XBee Nicknames beim Aufruf von simpletext Funktionen wie dprint und putChar weitergeben kann.

Alle simpletext Funktionen mit einem text_t *device Parameter lassen sich mit einem seriellen Vollduplex Peripheriegerät wie ein XBee-Modul benutzen. Wer sich einen Überblick über alle Funktionen aus der Bibliothek simpletext verschaffen möchte, der kann das aus dem Programm

Abbildung 5 - Aufruf der Bibliotheksfunktionen über das Help-Menü

SimpleIDE über den Aufruf von Help - Simple Library Reference. Unter dem gleichen Aufruf gelangt man auch zur Bibliothek fdserial und den in ihr enthaltenen Funktionen. Der Eingangspuffer der Bibliotheksfunktionen von fdserial ist ein FIFO (first in - first out) Typ. Das zuerst empfangene Byte wird auch als erstes wieder ausgegeben. Dies geschieht über die Funktion fdserial_rxChar(xbee).

Der Mode Parameter in der Funktion fdserial_open erwartet einen Binärwert. Mode 0 in der Programmzeile 11 des Programms Xbee_Testprogramm.c wird sehr häufig eingesetzt; es gibt aber weitere Einstellungen:

  • 0b0000                       // identisch mit 0; einfache serielle Kommunikation; ohne   
                                          Besonderheiten
  • 0b0001                       // behandelt einlaufende Signale invertierend (1 wird 0 und 0 wird 1)
  • 0b0010                       // die Signale abgehender Nachrichten werden invertiert.

Es lassen sich mehrere Eigenschaftenbits gleichzeitig setzen. Werden einlaufende und abgehende Signale invertiert, geschieht das mit der Binärdarstellung 0b0011.

Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf