Navigation
Eine Funkübertragungsstrecke:

Da in dem Szenario, das ich auf der letzten Seite beschrieben habe ja zwei Funkmodule vorkommen, könnte man denken, dass nun auch jegliche Software zwei mal geschrieben werden muss und jedes Modul einzeln konfiguriert wird. Das ist auch im Prinzip so, außer der Tatsache, dass das erste (PC-seitige) Funkmodul für ein erstes Erfolgserlebnis eigentlich überhaupt nicht konfiguriert werden muss. Ich habe ja schon in einem Nebensatz kurz erwähnt, dass die addLINK-Module aus dem Funkmodul an sich mit einem angeschlossenen Atmel-Mikrocontroller bestehen. Und genau dieser erledigt alle hardwarenahen Aufgaben für uns. Wir müssen uns also über das korrekte Timing von Synchronisierungs-Sequenzen, über Hochfrequenz-Trägersignale, Kanalwahl, usw. überhaupt keine Gedanken machen. Einfach über die serielle Schnittstelle (RxD, TxD) die Daten rein, ab in den Äther und am zweiten Funkmodul kommen die Daten wieder seriell heraus.

Somit haben wir durch die Hardware-Arbeiten von der letzten Seite PC-seitig schon alles erledigt! Für eine erfolgreiche Kommunikation des Funkmoduls mit dem PC ist kein Stückchen eigene Software mehr nötig. Und ob ihr richtig gelötet habt, könnt ihr ganz einfach feststellen, wenn ihr in einem Terminalprogramm ein '+++' an das Funkmodul schickt. (Anmerkung: Diese drei Pluszeichen müssen allerdings in maximal 5 ms gesendet werden. So schnell kann kein Mensch tippen, weswegen ihr am besten ein '+++' (ohne ENTER am Ende!) in die Zwischenablage kopiert und von dort aus einfügt.) Ist alles korrekt gelaufen, antwortet das Funkmodul hierauf mit einer 0, und ihr befindet euch im Konfigurationsmodus. Ein AT/V (das darf nun auch wieder langsam getippt werden) liefert z.B. die Firmware-Version des Moduls. In der Anleitung gibt es eine Übersicht aller möglichen Konfigurationsbefehle.

Unsere eigentliche Aufgabe besteht also in der Anbindung des zweiten Funkmoduls an den MSP430. Der Sourcecode, den ich hierzu geschrieben habe, öffnet sich mal wieder in einem neuen Fenster. Nach den üblichen Anweisungen folgt die erste Neuigkeit in Zeile 23: P3SEL=0xF0; konfiguriert die USART-Module. Da der erste USART (USART0) des MSP430 ja schon zur Anbindung an einen PC verwendet wird (siehe USART-Kapitel), müssen wir nun zur Kommunikation mit dem addLINK-Modul den zweiten USART (USART1) verwenden. Und die oben gezeigte Anweisung sorgt nun eben dafür, dass P3.6 und P3.7 als USART1 (und nicht als GPIO) benutzt werden; zusätzlich zu P3.4 und P3.5, die weiterhin als USART0 verwendet werden.

In den Zeilen 30 bis 39 folgt ein etwas trickreiches Codestück, welches die Systemtakte MCLK und SMCLK auf 8 Mhz setzt. Hierzu sei nur kurz erwähnt, dass ein Quarz eine gewisse Zeit benötigt, bis er stabil schwingt. Meine Kommentare am Sourcecode sollten zum Verständnis aber eigentlich reichen ...

In den Zeilen 41 bis 55 folgen die schon aus dem USART-Kapitel bekannten Anweisungen -- hier lediglich alle doppelt, da ja beide USARTs getrennt konfiguriert werden. Die einzigen Neuerungen bestehen in den Zuweisungen zu den Registern UBRxx. Da wir jetzt nicht mehr 32.768 KHz, sondern 8 Mhz als Clock verwenden, ändern sich die Registerwerte zur Berechnung der Baudrate von 19.200 Baud entsprechend den Angaben in der Application Note von TI auf Seite 9.

Nachdem das LCD-Display initialisiert wurde, startet der eigentliche Sende- und Empfangsvorgang in einer Endlosschleife. Da das empfangende Funkmodul ja wie schon erwähnt ein aus dem Äther emfpangenes Zeichen ganz einfach auf seiner TxD-Leitung herausgibt (die direkt an die RxD-Leitung des MSP430 geht), müssen wir im Prinzip nur warten, bis im Empfangsbuffer von USART1 etwas drin ist. Genau das erledigt die Schleife while (!(IFG2 & URXIFG1));. Solange der RX-Buffer leer ist, ist URXIFG1 nicht gesetzt. Sobald der MSP430 ein Zeichen vom Funkmodul emfangen hat, geht URXIFG1 automatisch auf high und die Schleife wird beendet. Anschließend wird das empfangene Zeichen mit einer netten Formatierung auf dem LCD ausgegeben. :-) Wenn ihr alles richtig gemacht habt, sollte das in etwa so aussehen:


In Zeile 68 wird mit einer ähnlichen Anweisung geprüft, ob der TX-Buffer vom USART1 leer ist, d.h., der USART1 sendebereit ist. Ist der Buffer leer, so wird mit der einfachen Anweisung TXBUF1 = RXBUF1; das Zeichen ge-echot, d.h., an den PC zurück geschickt. Dies kann man auf dem obigen Bild auch erkennen: Der Buchstabe k wird sowohl auf dem PC im Terminalprogramm als auch auf dem LCD angezeigt.

Aufmerksame Köpfe werden sich jetzt fragen: "Was ist denn mit den TX- und RX-Interrupt-Flags? Die müssen doch irgendwie zurück gesetzt werden, weil die Schleife sonst spätestens beim zweiten Mal zu einer Totschleife wird." Im Prinzip richtig, aber: Die eigentlich nötige Anweisung IFG2 &= ~URXIFG1; zum Löschen des RX-Flags können wir uns sparen, da der MSP430 das RX-Flag automatisch zurücksetzt, sobald wir den RX-Buffer "anpacken". Und da wir ja bei der LCD-Ausgabe den RXBUF1 benutzen, wird genau nach dieser Anweisung das URXIFG1-Flag wieder gelöscht. Sprich: Ab dort ist der RX-Buffer formal wieder leer und kann das nächste Zeichen aufnehmen. Genauso verhält es sich mit dem TX-Buffer. Beim echo-en des Zeichens wird der TXBUF1 benutzt. Dies sorgt dafür, dass der MSP430 das UTXIFG1-Flag automatisch zurücksetzt; wir müssen uns um nichts kümmern.

Nun ist diese Anwendung programmiertechnisch noch sehr überschaubar. Aber warum mehr Stress machen als nötig? Die addLINK-Module bieten nun mal einen gewissen Komfort, den wir auch ohne Gewissensbisse nutzen sollten. ;-) Über dieses ziemlich einfache Programm hinaus gibt es jetzt natürlich ein riesiges Anwendungsgebiet. Denkbar wäre z.B. eine einfache Haussteuerung. Hierzu hat man mit dem Alphabet von A bis Z ja schon mindestens 26 verschiedene Befehle zur Hand, um Steuerungsaufgaben zu erledigen. Schließt man an den MSP kein LCD, sondern Leistungsrelais an (bis zu 46 Stück wären ja theoretisch möglich), so könnte man z.B. mehrere verschiedene Lampen oder andere 230V-Verbraucher per Funk fernsteuern. Möglich wären aber auch eine Fotodiode mit einem Fotosensor (also eine Lichtschranke), die, sobald etwas in ihren Weg kommt, weniger Strom fließen lassen. Das kann man dann mit dem A/D-Wandler des MSP430 feststellen, der anschließend ein Steuerzeichen per Funk losschickt. Dies wird von einem zweiten MSP430 mit Funkmodul empfangen und auf einem LCD ausgegeben. Ein Freund von mir hat sich so eine Schaltung gebaut, die sich mit "Sie haben Post" meldet, wenn Post im Briefkasten ist. :-)