Elektronik am PC Teil 2


BASISKURS
Elektronik am PC
Elektronik-Experimente an der seriellen Schnittstelle
(Teil 2)
Von Burkhard Kainka
Im zweiten Teil steht die Software im Vordergrund. Dazu wird das in der
ersten Folge vorgestellte Programm IOtest näher betrachtet. Als einfa-
che Beispiele für die Visual Basic-Programmierung dienen die beiden näch-
sten Experimente mit einer Ampelsteuerung und einem Taktgeber.
In der ersten Folge wurde das Programm gen Leitungen. Mancher vermisst
IOtest vorgestellt. Die meisten Leser mit Pro- hier vielleicht die Eingangsleitung
DTR
grammiererfahrungen wird es interessieren, RXD. Sie kann leider nicht direkt
wie hier auf die Schnittstelle zugegriffen gelesen werden, sondern wird nur
wird. Als Bindeglied zwischen Visual Basic zum Empfang eines seriellen Signals
RTS
und der Schnittstelle wird die PORT.DLL von verwendet. Aus der DLL werden
H.-J.Berndt aus dem Elektor-Buch  PC- noch einige Funktionen zur Zeitmes-
Schnittstellen unter Windows verwendet, sung deklariert, die in den folgenden
die für diesen Basiskurs kostenlos von der Folgen verwendet werden. Insge-
TXD
Elektor-Website (www.elektor.de) herunter- samt enthält die DLL noch viele
geladen werden kann. Wer keine Download- andere Funktionen zu weiteren
Möglichkeit hat, der kann auf die Diskette mit Schnittstellen (Parallelport, Joystick,
der Kurs-Software zurückgreifen (siehe Servi- Sound und Video), die im angegebe-
ceseiten in der Heftmitte). nen Buch angewandt werden.
In Visual Basic müssen die verwendeten Pro-
GND
zeduren und Funktionen der DLL mit dem
I/Otest
000074 - 2 - 11
Declare-Befehl angegeben werden. Dies muss
in einem externen Modul geschehen, das hier Das Anwenderprogramm I/Otest ist
PORTS.BAS heißt (Listing 1). in Listing 2 angegeben.
Bild 1. Das Ampelmodell besteht
Der erfahrene (Visual Basic-)Anwender Der eigentliche Kern des Programms
lediglich aus drei LEDs.
erkennt gleich die wichtigsten Funktionen. ist die Timer-Prozedur
OPENCOM öffnet die Schnittstelle und mel- Timer1_Timer, die in einem vor-
det sie damit unter Windows für das eigene eingestellten Intervall automatisch
Programm an. SENDBYTE und READBYTE aufgerufen wird. Hier werden die viert wurden.
sind für die normale serielle Kommunikation Check-Boxen 1 bis 4 aktiviert, also Alle übrigen Teile des Programms
zuständig, die aber hier zunächst nicht im mit einem Häkchen versehen, wenn dienen nur dem Öffnen der Schnitt-
Mittelpunkt steht. Wichtiger sind die Proze- die zugehörige Eingangsleitung stelle und der Auswahl einer Schnitt-
duren DTR, RTS und TXD zur Steuerung der  angeschaltet ist. Umgekehrt wer- stelle. Diese Teile werden später
Ausgangsleitungen sowie die Funktionen den die drei Ausgangsleitungen ein- noch genauer betrachtet. Man
CTS, DSR, RI und DCD zum direkten Lesen geschaltet, wenn die zugehörigen erkennt, dass die Schnittstelle mit
von Eingangszuständen an den gleichnami- Checkboxen vom Anwender akti- 1200 Baud, ohne Paritätsbit, mit acht
54 Elektor 10/2000
BASISKURS
Datenbits und einem Stoppbit initialisiert
wird. Diese Parameter sind jedoch für das
Listing 1
hier vorgestellte Programm völlig unwichtig.
Die Deklarationen zur PORT.DLL
Windows denkt zwar, da möchte jemand mit
1200 Baud auf ein Gerät wie z.B. ein Modem
Declare Function OPENCOM Lib  Port (ByVal A$) As Integer
zugreifen. In Wirklichkeit aber wird die
Declare Sub CLOSECOM Lib  Port ()
Declare Sub SENDBYTE Lib  Port (ByVal b%) Schnittstelle ganz anders verwendet, indem
Declare Function READBYTE Lib  Port () As Integer
nämlich statt einer seriellen Kommunikation
Declare Sub DTR Lib  Port (ByVal b%)
die Leitungen direkt gesteuert und gelesen
Declare Sub RTS Lib  Port (ByVal b%)
werden.
Declare Sub TXD Lib  Port (ByVal b%)
Declare Function CTS Lib  Port () As Integer
Declare Function DSR Lib  Port () As Integer
Eine Ampelsteuerung
Declare Function RI Lib  Port () As Integer
Declare Function DCD Lib  Port () As Integer
Declare Sub DELAY Lib  Port (ByVal b%) Wer zum ersten Mal mit Visual Basic arbeitet,
Declare Sub TIMEINIT Lib  Port ()
der sollte am besten mit einer überschauba-
Declare Sub TIMEINITUS Lib  Port ()
ren Aufgabe beginnen. Dafür wurde eine
Declare Function TIMEREAD Lib  Port () As Long
kleine Modellampel ausgewählt, die mit drei
Declare Function TIMEREADUS Lib  Port () As Long
LEDs gebaut wird (Bild 1). Was die Strombe-
Declare Sub DELAYUS Lib  Port (ByVal l As Long)
grenzung und die Sperrspannung an den
Declare Sub REALTIME Lib  Port (ByVal i As Boolean)
LEDs betrifft, sei auf die Bemerkungen am
Ende des ersten Teils in Elektor 9/2000 ver-
wiesen.
Listing 2
Die Modellampel ist als Beispiel gut geeignet,
einige grundlegende Techniken eines Visual-
Das Anwenderprogramm IOtest
Basic-Programms vorzustellen. Man beginnt
Private Sub Form_Load()
dabei mit einem neuen, leeren Formular. In
i = OPENCOM( COM2,1200,N,8,1 )
dieses werden mit der Maus aus der Werk-
If i = 0 Then
zeugleiste die einzelnen grafischen Steuer-
i = OPENCOM( COM1,1200,N,8,1 )
Option1.Value = True elemente gezogen (Bild 2). Man kann sie in
End If
der Größe verändern und beliebig platzieren.
If i = 0 Then MsgBox ( COM Interface Error )
Jedes Element verfügt über eine ganze Reihe
TXD 1
von Eigenschaften, die eingestellt werden
RTS 1
müssen. Dazu gehören Größen, Farben, Texte
DTR 1
und anderes. Alle Eigenschaften, die man
TIMEINIT
End Sub
noch nicht kennt, lässt man einfach unverän-
dert. Hier gibt es die folgenden Elemente:
Private Sub Form_Unload(Cancel As Integer)
CLOSECOM
Zwei Labels, denen die Eigenschaft (der Text)
End Sub
Caption= fast bzw.  slow zugewiesen
Private Sub Option1_Click() wurde.
i = OPENCOM( COM1,1200,N,8,1 )
If i = 0 Then MsgBox ( COM1 not available )
Ein horizontaler Schieberegler (HScrollBar)
TXD 1
mit den Eigenschaften Min = 50, Max=
RTS 1
500 und Position=100
DTR 1
End Sub
Ein Zeitgeber (Timer) mit der Eigenschaft
Private Sub Option2_Click()
Intervall = 100, also 100 ms
i = OPENCOM( COM2,1200,N,8,1 )
If i = 0 Then MsgBox ( COM2 not available )
Zwei Option Buttons mit den Beschriftungen
TXD 1
Caption =  COM1 bzw.  COM2 , der
RTS 1
DTR 1 Knopf für COM2 ist  true
End Sub
Das Formular selbst erhält die Eigenschaft
Private Sub Timer1_Timer()
Caption =  Traffic Light
Check1.Value = CTS()
Check2.Value = DSR()
Bild 3 zeigt das Projekt in der Übersicht. Zum
Check3.Value = DCD()
Check4.Value = RI() Projekt gehört auch noch die Datei Ports.Bas.
If Check5.Value Then TXD 1 Else TXD 0
Dieses Modul enthält alle erforderlichen
If Check6.Value Then DTR 1 Else DTR 0
Deklarationen aus der PORT.DLL und wurde
If Check7.Value Then RTS 1 Else RTS 0
bereits eingangs vorgestellt. Es muss in jedes
End Sub
eigene Projekt mit eingebunden werden,
10/2000 Elektor 55
BASISKURS
TXD 1
Listing 3
RTS 1
DTR 1
Das Programm zur Ampel
End Sub
Dim Time As Integer
Private Sub Timer1_Timer()
Time = Time + 1
Private Sub Form_Load()
If Time = 1 Then red
i = OPENCOM( COM2,1200,N,8,1 )
If Time = 40 Then redyellow
If i = 0 Then
If Time = 50 Then green
i = OPENCOM( COM1,1200,N,8,1 )
If Time = 90 Then yellow
Option1.Value = True
If Time = 100 Then Time = 0
End If
End Sub
If i = 0 Then MsgBox ( COM Interface Error )
TXD 0
Sub red()
RTS 0
RTS 1
DTR 0
DTR 0
Time = 0
TXD 0
End Sub
End Sub
Private Sub Form_Unload(Cancel As Integer)
Sub redyellow()
CLOSECOM
RTS 1
End Sub
DTR 1
TXD 0
Private Sub HScroll1_Change()
End Sub
Timer1.Interval = HScroll1.Value
End Sub
Sub yellow()
RTS 0
Private Sub Option1_Click()
DTR 1
i = OPENCOM( COM1,1200,N,8,1 )
TXD 0
If i = 0 Then MsgBox ( COM1 not available )
End Sub
TXD 1
RTS 1
Sub green()
DTR 1
RTS 0
End Sub
DTR 0
TXD 1
Private Sub Option2_Click()
End Sub
i = OPENCOM( COM2,1200,N,8,1 )
If i = 0 Then MsgBox ( COM2 not available )
damit die erforderlichen Prozeduren und Der Gesamtzusammenhang wird Option1 (COM1) mit dem Wert
Funktionen zum Zugriff auf die Schnittstel- allein vom Windows gesteuert. Beim  True belegt. Dort erscheint dann
lenleitungen vorhanden sind. Start des Programms (Listing 3) wird ein schwarzer Punkt, während er bei
In einem Visual Basic Programm arbeitet man die Prozedur  Private Sub COM2 verschwindet. Falls übrigens
mit voneinander getrennten Prozeduren, die Form_Load() aufgerufen. Hier ste- auch COM1 nicht frei war, gibt es
bestimmten Ereignissen zugeordnet sind. hen alle Befehle, die zur Initialisie- eine entsprechende Fehlermeldung
rung benötigt werden. Im vorliegen- in einer MessageBox.
den Fall muss die serielle Schnitt- Im Normalfall öffnet das Programm
stelle geöffnet werden. Außerdem die Schnittstelle COM2. Will man
werden alle Ausgänge der Schnitt- selbst auf COM1 umschalten, dann
stelle ausgeschaltet. Und schließlich klickt man auf den entsprechenden
Listing 4
wird eine globale Variable  Time Knopf. Dadurch veranlasst man Win-
auf Null gesetzt. dows, die Prozedur Option1.Click
Die Timerprozedur
Die Funktion OPENCOM aus der aufzurufen. Darin wird COM1 geöff-
des Blinkprogramms
PORT.DLL gibt einen Wert zurück, net und der Erfolg überwacht. Diese
Private Sub Timer1_Timer()
der Auskunft darüber gibt, ob die automatische Wahl und manuelle
Time = Time + 1
Schnittstelle erfolgreich geöffnet Umschaltung der Schnittstelle
If Time = 1 Then
werden konnte. Dies ist dann nicht wurde bereits im Programm IOtest
RTS 1
möglich, wenn sie bereits von einem verwendet und soll auch im Folgen-
DTR 0
anderen Programm belegt ist. Hier den immer wieder eingesetzt wer-
End If
If Time = 2 Then wird zunächst versucht, COM2 zu den. Wer möchte, kann sich entspre-
RTS 0
öffnen. Bei Misserfolg (Rückgabe- chende Knöpfe für weitere Schnitt-
DTR 1
wert = 0) soll COM1 geöffnet wer- stellen, also für COM3 und COM4
End If
den. Zugleich soll dies am Bild- einbauen.
If Time = 2 Then Time = 0
schirm sichtbar werden. Dazu wird Für die Ampel braucht man eine
End Sub
die Eigenschaft  Value den Knopfes Zeitsteuerung. Dazu gibt es z.B. die
56 Elektor 10/2000
BASISKURS
Das Formular (Bild 4) enthält außerdem noch
den Schieberegler, mit dem man zentral die
Geschwindigkeit der Ampelschaltung ein-
stellen kann. Sobald man den Schieberegler
verstellt, wird die Prozedur Hscoll1.Change
aufgerufen. Hierin wird dem Timer ein neues
Intervall zugewiesen, das sich direkt aus der
aktuellen Position (Value) des Schiebers
ergibt. Der mögliche Einstellbereich wurde
zuvor auf 50 bis 500 eingestellt. Dementspre-
chend kann der Timer im Bereich 50 ms bis
500 ms verstellt werden.
Bild 2. Das vorbereitete Formular für
Bild 4. Das Ampelprogramm zur Lauf-
die Ampelsteuerung.
zeit.
Blinker/Taktgeber
Die nächste Anwendung ist ein Blinker oder
Taktgenerator mit einstellbarer Frequenz (Bild
5). Die Schaltung der Ampel bleibt dafür
unverändert. Hier wird aber TXD permanent
eingeschaltet und DTR und RTS werden
gegenphasig angesteuert. Die eine Leitung
ist also an, wenn die andere aus ist. Als
kleine zusätzliche Programmierübung kann
man z.B. ein Lauflicht programmieren.
Das gesamte Programmgerüst kann unver-
ändert von der Ampelsteuerung übernom-
men werden. Es reicht, die Timerprozedur
neu zu schreiben (Listing 4). In diesem Fall
Bild 3. Das Projekt in der Übersicht.
Bild 5. Das Blinker-Programm.
wurden keine zusätzlichen Prozeduren ver-
wendet, sondern die Leitungen direkt umge-
schaltet.
Nun blinkt es also. Die LEDs an den Ausgän-
gen DTR und RTS werden im Wechsel ange-
schaltet. Man kann die Geschwindigkeit in
Prozedur DELAY in der DLL. Aber Variable  Time erhöht, die also die weiten Grenzen verändern. In der schnellsten
anders als bei DOS-Programmen darf Zeit in Zehntelsekunden angibt. Nun Stellung sieht man eventuell schon eine
ein Windows-Programm nicht allein kann bei jedem Aufruf abgefragt gewisse Unregelmäßigkeit. Windows ist
über die gesamte Rechenzeit des werden, ob ein bestimmter Zeit- nicht in der Lage, ein Zeitraster von 50 Milli-
Systems verfügen. Es ist also nicht punkt gekommen ist, also ob z.B. die sekunden exakt einzuhalten, da im Rahmen
sinnvoll, eine Prozedur mit einer Ampel von Grün auf Gelb wechseln des Multitasking ja auch noch andere Pro-
Hauptschleife zur Ampelsteuerung soll. Die Zeiten sind hier willkürlich zesse ablaufen. Allgemein spricht man
zu schreiben. Stattdessen muss die festgelegt und können leicht verän- davon, dass Windows nicht  echtzeitfähig
Ampel über Ereignisse gesteuert dert werden. In Abhängigkeit der ist. Allerdings gibt es einige Tricks, mit denen
werden. Dazu dient hier ein Win- einzelnen IF-Abfragen werden die man doch noch einiges machen kann. Sie
dows-Timer. Das Timer-Intervall eigentlichen Schalt-Prozeduren Red, werden in den späteren Folgen vorgestellt.
wurde auf 100 ms eingestellt. Alle Yellow, Green und RedYellow aufge- (00074-2e)
100 ms wird also die Prozedur rufen. In jeder dieser Prozeduren
Timer1.Timer aufgerufen. steht, welche Leitungen ein- und
In der Timer-Prozedur wird eine welche ausgeschaltet sein sollen.
Anzeige
10/2000 Elektor 57


Wyszukiwarka

Podobne podstrony:
Elektronik am PC Teil 3
Elektronik am PC Teil 4
Lichtstaerkemessung am PC
elektro mechan przetwornik A C do PC
AM FM SSB Empfänger Teil 1
elektroniczny bęben
Elektrotechnika i elektronika samochodowa Walusiak
elektronowy (2)
PÄ…czki twarogowe
elektryczne gitary gon pawia
CE PC Nos
elektro zerowka
Sieci elektroenergetzcyne

więcej podobnych podstron