(1.11.01)
Der Spion ist ein vielseitiges Gerät, für das es noch viel zu entwickeln gilt. Deshalb ist es an der Zeit, sich mit der Kommunikation zwischen PC und Spion auseinanderzusetzen. Hier wird allen Anwendern die Möglichkeit gegeben, auch eigene Programme zu entwickeln.
Der Spion hat ein relativ einfaches Protokoll mit einer überschaubaren Anzahl von Kommandos. Alle Kommandos können sowohl im Offline-Modus wie auch im Programm-Modus verwendet werden. Im Betirebsprogramm des Geräts werden alle Kommandos entweder online über die RS232 entgegengenommen oder offline aus dem Speicher geholt. Das bedeutet, dass das gleiche Kommando einmal z.B. einen Messwert vom Temperatursensor online abfragt und im Programmbetrieb offline misst. Es gibt nur einen Unterschied: Im autonomen Betriebsmodus gelangt der Messwert nur in den Speicher A (= Akku). Im Online-Modus wird er zusätzlich an den angeschlossenen Rechner gesendet.
Die serielle Schnittstelle des Spions arbeitet mit 9600 Baud, 8 Datenbits, 1 Stoppbit und ohne Parity. Über die Handshakeleitungen DTR und RTS steuert man das Aufladen des internen Akkus und den Prozessor-Reset. Der Akku hat die Daten 3,6V/60mA/h. Damit er korrekt geladen wird, sollte die serielle Schnittstelle die übliche Spannung von 10...12V abgeben. RTS liefert über einen Widerstand von 4,7 k einen Ladestrom von ca. 1 mA an den Akku. Eine positive Flanke an RTS löst einen Prozessor-Reset aus. DTR liefert über eine Widerstand von 0,5 k einen Ladestrom von ca. 10 mA an den Akku.
Bei der Akkukapazität von 60 mAh kann der Akku in etwa 12 Stunden am PC voll geladen werden, wenn das Programm Spy aktiv ist. Die Ladung reicht für ca. 60 Stunden Offline-Betrieb aus. Eigene Online-Programme können mit DTR = 0 und RTS = 1 eine Ladungserhaltung im laufenden Betrieb durchführen. Man kann die Batteriespannung grob messen und ein entsprechendes Ladeprogramm bauen, das zwischen Schnellladung und Erhaltungsladung unterscheidet. Das folgende Programm in VB verzichtet auf eine Messung und verwendet nur eine reine Steuerung der Schnittstellenleitungen DTR und RTS. Die Kommunikation über die RS232 setzt die Verwendung einer speziellen DLL voraus. Hierzu kann z.B. die bekannte RSAPI.DLL verwendet werden.
Dim D, R Private Sub Command1_Click() DTR 1 D = 5 Label1.Caption = Str$(D + R) + " mA" End Sub Private Sub Command2_Click() DTR 0 D = 0 Label1.Caption = Str$(D + R) + " mA" End Sub Private Sub Command3_Click() RTS 1 R = 1 Label1.Caption = Str$(D + R) + " mA" End Sub Private Sub Command4_Click() RTS 0 R = 0 Label1.Caption = Str$(D + R) + " mA" End Sub Private Sub Form_Load() OPENCOM "COM2:9600,N,8,1" DTR 0 RTS 1 End Sub
Ein Ladeprogramm für den Sion
Dieses erste Beispiel kommt noch ohne eine wirkliche Datenübertragung zum Spion aus, weil nur die Batterie geladen werden soll. Alle weiteren Funktionen des Spions erfordern aber die Übertragung einzelner Bytes über die serielle Schnittstelle.
Abfrage- und Steuerkommandos sind einzelne Bytes, also ganze Zahlen im Bereich 0 bis 255. Im Direktmodus wird jedes Kommando mit einem Echo beantwortet. Ein Beispiel: Der PC sendet den Befehl 14, der Spion erzeugt einen Signalton und sendet ein Byte 14 als Bestätigung zurück. Einige Kommandos benötigen einen Parameter als ein zweites Byte, das nach dem eigentlichen Befehl gesendet wird. In diesem Fall wird nur das zweite Byte zur Bestätigung zurückgesandt. Der Befehl 14 kann aber auch in einem Programm vorkommen. In diesem Fall wird er aus dem internen EEPROM des Prozessors gelesen und ausgeführt aber nicht mit einem Echo bestätigt.
Programme werden mit einzelnen Programmierkommandos in das interne EEPROM des Prozessors geschrieben. Sie werden durch einen besonderen Startbefehl an ihrer Startadresse gestartet. Es können mehrere kurze Programme im Speicher vorhanden sein und gezielt gestartet werden.
Außer dem Direktmodus und dem Programmodus existiert noch der Messserien-Modus für den Einsatz des Spions als autonomen Datenlogger. Der Messmodus wird mit einem besonderen Kommando gestartet und erhält einige Parameter zur Zeiteinstellung und zur Wahl des aktiven Eingangs. Die Messung wird direkt gestartet. Mit ihrem Ende sendet der Spion ein Byte zur Bestätigung. Die Daten können dann durch direktes Lesen von EEPROM-Adressen in den PC übertragen werden.
Der Spion speichert den aktuellen Zustand Direktmodus, Programmmodus oder Messmodus. Man kann daher eine laufende Messung mit dem Reset-Taster unterbrechen und mit einem erneuten Reset wieder starten. Das selbe gilt für ein Programm. Dies eröffnet die Möglichkeit, Einstellungen oder Programme dauerhaft im Gerät bereitzuhalten. Ein Programm oder eine Messung kann mit Reset unterbrochen werden. Der Spion geht dann in den Direktmodus und schaltet sich nach ca. 2 Minuten selbst aus, so dass kein Strom mehr verbraucht wird. Bei Bedarf kann er jedoch auch nach Wochen und Monaten mit einem neuen Druck auf den Resetknopf wieder mit der letzen Einstellung gestartet werden. Er führt dann das zuletzt gespeicherte Programm aus oder beginnt eine neue Messserie mit den zuletzt verwendeten Einstellungen.
Im Direktmodus führt das Kommando 1 zu einer Rückmeldung des Spions mit der Antwort 32. Dies ist die Kennung des Geräts und kann von einer Software verwendet werden, um zwischen mehreren unterschiedlichen Interfaces zu unterscheiden. Gleichzeitig führt das Kommando 1 aber auch zu einer Initialisierung des Spions im Direktmodus. Ein zuvor verwendetes Programm oder eine Messserie ist also nicht mehr aktiv.
Die folgende Übersicht zeigt alle verfügbaren Kommandos.
Kennung 1 Interface-Kennung : Antwort = 32 (Nur im Direktmodus) Zuweisungen 2,n A=n 3,n B=n 4,n C=n 5,n D=n 6 A=B 7 B=A 8 C=A 9 D=A Ausgaben 10 Ausgang=1 11 Ausgang=0 12 LED=1 13 LED=0 14 Beep 15 Print A (Byteausgabe an RS232) 16 Lärm-Power-Off 17 LED blinkt im Sekundentakt Eingaben, analog 20 A=Spannung 21 A=Licht 22 A=Temperatur 23 A=Widerstand 24 A=Lärm (incl Lärm-Power-ON) 25 A=Ubat digital 26 A=Eingang RS232: 27 Input A (Byte von RS232) Programmverzweigungen 30,n goto n 31,n C=C-1: if C>0 goto n 32,n pause n 33 end 34,n if A=B goto n 35,n if A>B goto n 36,n if A<B goto n 37,n D=D-1: if D>0 goto n Rechnen 40 A=A+B 41 A=A-B 42 A=A+1 43 A=A-1 EEPROM 50,adr PutEE Ein Byte ins EEPROM an adr laden 51,adr Programm im EEPROM ab adr starten Speicherbelegung; 1, max 63 Basic-Tokens 52,adr GetEE Byte von Adr. aus dem EEPROM lesen Messserie 53 Messserie starten Speicherbelegung: Kanal 20..24, Time-Hi, Time-Lo, 61 Messwerte Abschalten 128 Power down < 1µA, Aufwecken mit Reset (RTS-Hi-Flanke)
Die Kenntnis dieser Kommandos ermöglicht das Schreiben eigener Programme für den Spion. Beim Start eines Programms sollte jeweils ein Reset ausgeführt werden. Dazu muss man RTS einmal herunter- und wieder hochschalten. Dabei kann der Spion über seine Sendeleitung einen Impuls aussenden, der vom PC als Empfangsbytes gewertet wird. Man muss also mit Readbyte dieses Byte abholen. Das Senden eines Bytes 1 veranlasst den Spion zu einem Software-Reset, der ihn aus einem eventuellen Programm-Modus holt. Er antwortet mit seinem Kennungsbyte, das ebenfalls abgeholt werden muss.
Das folgende Visual Basic Programm soll alle Sensoren abfragen und korrekt darstellen. Man muss dabei beachten, dass für den Lärmsensor eine Betriebsspannung des Mikrofonverstärkers erst eingeschaltet wird. Sie muss auch wieder ausgeschaltet werden, um die anderen Sensoren nicht zu stören. Dies geschieht durch das Kommando 16.
Die Auswertung der Sensoren erfolgt in eigenen Funktionen. Es wird jeweils das Kommando für den jeweiligen Sensor gesendet. Das Ergebnisbyte wird dann umgerechnet. Die eigentlichen Rechenschritte wurden bereits oben in Kap. 13 erläutert. Eine Sonderstellung nimmt der Lärmsensor ein. Die Messung muss zweimal hintereinander ausgeführt werden, weil beim ersten mal zunächst die Betriebsspannung des Verstärkers eingeschaltet wird. Der Verstärker braucht dann einige Millisekunden zum Einschwingen. Für den Lärmsensor existiert keine eigentliche Umrechnung. Der Geräuschpegel wurde daher in Prozent der Vollaussteuerung angegeben.
Private Sub Form_Load() OPENCOM ("COM2:9600,N,8,1") RTS 0 DELAY 10 RTS 1 'Reset DELAY 10 DTR 0 d = READBYTE SENDBYTE 1 d = READBYTE End Sub Private Sub Form_Unload(Cancel As Integer) CLOSECOM End Sub Private Function Spannung() SENDBYTE 20 d = READBYTE d = d / 255 * 4.4 Spannung = Int(d * 10) / 10 End Function Private Function Licht() As Variant SENDBYTE 21 d = READBYTE If d > 0 Then R = (255 * 10 - 10 * d) / d If R < 0.1 Then R = 0.1 p = -1.042 / 0.015 q = (Log(1350 / R)) / 0.015 x = -p / 2 - Sqr(p * p / 4 - q) e = Exp(x) Licht = Int(e) End If End Function Private Function Temp() As Variant SENDBYTE 22 d = READBYTE If d > 0 Then R25 = 10 R = (255 * R25 - R25 * d) / d If R < 0.1 Then R = 0.1 t = 1 / (Log(R / 10) / 4300 + 1 / 298) - 273 Temp = Int(t * 10) / 10 End If End Function Private Function Widerstand() SENDBYTE 23 d = READBYTE If d = 255 Then d = 254 If d > 0 Then R = 10 * d / (255 - d) Widerstand = Int(R * 100) / 100 End If End Function Private Function Laerm() SENDBYTE 24 d = READBYTE DELAY 20 SENDBYTE 24 d = READBYTE d = d * 1.2 Laerm = Int(d) SENDBYTE 16 d = READBYTE DELAY 10 d = READBYTE End Function Private Function Ubat() SENDBYTE 25 d = READBYTE d = d / 10 + 0.4 Ubat = Int(d * 10) / 10 End Function Private Sub Timer1_Timer() Text1.Text = Str$(Temp) + "°C" Text2.Text = Str$(Licht) + " lux" Text3.Text = Str$(Spannung) + " V" Text4.Text = Str$(Widerstand) + " kOhm" Text6.Text = Str$(Ubat) + " V" Text5.Text = Str$(Laerm) + " %" 'zuletzt End Sub
Abfrage und Ausgabe aller Sensordaten des Spions
Das Programm liefert einmal in der Sekunde neue Daten von allen Sensoren. Man hat hier ein universelles Messgerät für die unterschiedlichsten Aufgaben. Es muss beachtet werden, dass Spannungsmessung und Widerstandsmessung den gleichen Eingang verwenden. Beim Anschluss eines Widerstands wird die Spannung als Null angezeigt. Wenn allerdings eine externe Spannungsquelle angeschlossen wird, zeigt auch der Widerstandseingang ein Ergebnis, das natürlich nicht gewertet werden kann.
Die hier vorgestellten Programme können auch direkt geladen werden: SpionVB.Zip (32k)
Literaturhinweis: B. Kainka, Messen, Steuern, Regeln mit dem
PC in Haus und Garten, Franzis-Verlag 2000
Weite Teile dieses Artikels und die Programmbeispiele wurden aus diesem
Buch entnommen.
B.K.
Zurück zur Startseite der MB-News
Zurück zur Startseite AK-Modul-Bus