|
|
1.
Der COM-Port und die
RS232-Norm
2. Zugriff in BASIC
3. Erste Schaltungen
|
1.
Der COM-Port
und die RS232-Norm
Die Steckbuchse des COM-Ports hat 9 Pins.
Drei Ausgänge,
fünf Eingänge und Masse. Der RxDAnschluss
(Recieve Data) wird als Empfangs-Datenleitung verwendet und hier nicht
weiter beschrieben.
Die Masse ist sowas wie der Minuspol des COM-Ports, jedoch arbeitet
dieser mit positiven und negativen
Spannungen gegenüber der (eben deswegen so und nicht Minus
genannten) Masse. Das ist Teil der
sogenannten RS232-Norm.
Es gibt zwei Wege, die seriellen Schnittstelle anzusteuern. Zum Einen
die zeichenorientierten Kommunikation
mit RS232-tauglichen externen Geräten über den OPEN
COM Befehl. Dabei werden zwar
Anfangs solche Dinge wie Datentransferrate, Nutzung eines Stoppbits
etc.festgelegt, die eigentliche
Datenübertragung wird dann aber vom Rechner intern gesteuert.
Der COM-Befehl wird in dem hier
vorliegenden Tutorial nicht behandelt.
Es gibt aber auch die Möglichkeit, über die
entsprechenden Steuerregister auf alle Leitungen - ausser den
TxD-Eingang - direkt zuzugreifen. Diese Möglichkeit werden wir
uns im Folgenden genauer anschauen.
Insgesamt besitzt der COM-Port neun Pins. Da neben der Masse insgesamt
noch drei Ausgangs- und
fünf Eingangsleitungen vorhanden sind, kann bei der hier
beschriebenen Art des Gebrauchs auf TxD also
leicht verzichtet werden.
In der Regel liegt an einem Ausgabepin bei AUS bzw. NULL eine negative
Spannung von -12 Volt
gegenüber der Masse an, bei AN bzw. EIN eine positive von +12
Volt. Die Werte können aber bei
manchen Rechnern - vor allem Laptops - abweichen und z.B. nur +/- 3
Volt betragen. Die Eingänge
wiederum lesen Spannungen von über + 1,25 Volt als EIN oder
EINS, und solche unter + 1,0 Volt als
AUS bzw. NULL. Die Differenz zwischen Ein- und Ausgangsspannung soll
eine sichere übertragung
garantieren, ist für unsere Bedürfnisse aber eher
hinderlich.
Dazu später mehr. Grundsätzlich will ich mich aber
mit elektrotechnischen Details zurückhalten und sie
nur soweit behandeln, dass man's nachbauen kann. Wer tiefer einsteigen
will, kann sich ja mal im Internet
über die Funktionen von Transitoren, Logik-ICs, Zenerdioden
usw. informieren oder bei mir nachfragen.
2.
Zugriff in BASIC
Die einzelnen Bits, die den logischen Wert 1 oder 0 entsprechend EIN
oder AUS der einzelnen Pins des
COM-Ports enthalten und über die diese gesetzt bzw. ausgelesen
werden können, liegen in festen
Speicherzellen, den so genannten Steuerregistern.
Gelegentlich wird von Problemen bei der Ansteuerung der seriellen
Schnittstelle durch DOS-Programme
unter Windows NT/2000/XP berichtet. Ich habe derartige Probleme jedoch
noch nicht feststellen können.
Im Zweifelsfalle kann man seinen Rechner für COM-Anwendungen
mit der Startdiskette unter DOS
starten, was zusätzlich den Effekt hat, dass Programme viel
schneller laufen.
Die Adresse der Steuerregister setzt sich aus Basisadresse (BA) und
Offset zusammen. Die Basisadresse
von COM 1 ist 1016 und für COM 2 gleich 760. Wenn's nicht so
sein sollte, vielleicht mal die
Einstellungen in der Systemsteuerung überprüfen.
Die Register enthalten je acht Bit. Die Werte für die
Steuerleitungen DTR und RTS liegen auf dem ersten
und zweiten Bit des Registers mit dem Offset 4.
Je nach COM 1 oder 2 errechnet sich so die Adresse entweder als
1016 + 4 =
1020
oder
760 + 4 = 764
Im Folgenden benutze ich für Beispiele immer 1016 als BA
(Basisadresse). Da das erste Bit ja für die
Einer und das Zweite für die Zweier steht, schaltet der Befehl
der Befehl |
OUT (1020) , 1
'nur den Ausgang DTR von COM 1 auf EIN,
OUT (1020) , 2
'nur den Ausgang RTS.
OUT (1020) , 3
'schaltet beide auf EIN (Bit 1 = 1 und
Bit 2 = 1)
OUT (1020) , 0
'schaltet DTR und RTS aus. |
Der Ausgang TxD wird über das siebte
Bit des Registers mit dem
Offset 3
gesteuert.Das siebte Bit steht für die 64er.
OUT (1019) , 64
'schaltet also TxD ein und
OUT (1019) ,
0 'wieder aus.
Der
Zustand von DTR und RTS ändert
sich
dabei nicht,da diese
ja in einem anderen Register liegen.
3.
Erste Schaltungen
Da die Ausgangsströme auf 10 mA begrenzt sind lässt
sich so schon direkt eine Leuchtdiode ansteuern.
Natürlich auch eine IR-Diode um eine Fernsteuerung zu bauen
oder ein Optokoppler als Treiberstufe.
Da an DTR im AUS-Zustand ja eine negative Spannung anliegt, leuchtet
die Leuchtdiode auch wenn sie
"verkehrt" herum eingebaut wird.Nur ist sie dann eben bei AUS ein- und
bei EIN ausgeschaltet.Für die
erste Funktionsprüfung ist das also ideal.
Die vier Eingänge CTS,DSR,RI und DCD werden in dieser
Reihenfolge über Bit fünf bis acht des
Registers mit dem Offset 6 mit dem INP-Befehl abgefragt. Um diese Bits
einzeln abfragen zu können,
muss mit einer AND-Verknüpfung noch eine entsprechende
Maskierung über den Wert von INP gelegt
werden.
ein
= INP (1022) AND 16 'liest so also CTS aus
ein
= INP (1022) AND
32 'folglich den DSR-Eingang usw.Kleiner Tip:
ein
= INP (1022) AND
32 'wenn ihr nur 0 und 1 Werte haben
'wollt dann
z.B. so:
ein
= INP ((1022) AND 128) / 128
Dabei muss die AND-Verknüpfung in Klammern gesetzt werden,da
BASIC
sonst zuerst 128 / 128 rechnet und dann INP (1022) AND 1 ...
Da die Ausgänge kurzschlussfest sind,läst sich eine
einfache Schalterabfrage
z.B ein Endschalter oder mit allen Eingängen (CTS-DCD) die
vier Richtungen
eines Joysticks ohne weitere Beschaltung realisieren.Bei der gezeigten
Schaltung muss DTR natürlich eingeschaltet sein.
Kombiniert man diese ersten beiden Schaltungen,kann man mit einer
Lochscheibe
wie in einer mechanischen Maus schon Drehzahlen messen.
Um grössere Lasten wie z.B kleine
Glühlämpchen zu schalten,braucht man eine
externe Stromversorgung.Im Beispiel sind 12 V / 6 W angegeben.Diese
Angaben
beziehen sich auf den Transistor BD 137.Werden andere NPN-Transistoren
benutzt,
können natürlich auch andere Lasten geschaltet
werden.Auf den 1k-Widerstand am
Eingang kann verzichtet werden.Für die,die
Schaltpläne nicht so gut lesen können -
in der Anlage "Bilder" werden die Bauteile und ihre Anschlüsse
genauer erklärt.
Die Diode 1N4148 leitet hier die negative -12 V Spannung im AUS-Zustand
direkt
an die Masse ab.
Um galvanisch getrennte Stromkreise wie z.B. den Märklin
Modellbahn-
Wechselstrom oder Netzspannung ( VORSICHT ! ) zu schalten,kommt man um
die Verwendung eines Relais nicht herum.Das Relais kann über
eine Transistor-
schaltung wie oben gesteuert werden.Zu beachten ist dann aber,dass
parallel zur
Spule des Relais eine sog. Freilaufdiode geschaltet wird,da das Relais
beim
Ausschalten nochmal einen entgegengesetzen,evtl. sehr hohen
Spannungsstoss
abgiebt,der über diese zweite Diode abgeleitet wird.Aber
Vorsicht ! Die Freilauf-
diode muss unbedingt richtig herum eingebaut werden,da sie sonst die
Relais-
stromversorgung kurzgeschlossen wird.Man hat ja dann schon drei
Stromkreise:
- Den Steuerstrom zwischen DTR und Masse.
- den Strom, der die Spulen der Relais versorgt (z.B. 5 oder 12 Volt)
und
dessen Masse mit derjenigen des COM-Ports
verbunden ist und schliesslich
- den ganz unabhängigen Stromkreis , der über das
Relais geschaltet wird.
Einfacher geht's mit dem Treiber ( =Verstärker)-IC ULN 2803
(Conrad BestNr. 171824). Dieser hat 8
Treiberstufen, die jeweils bis 12 V / 500 mA belastbar sind und schon
die Freilaufdioden eigebaut haben.
Die Anschlussbelegung mit einem Schaltbeispiel für zwei
Glühlämpchen (es könnten auch 2 Relais sein)
findet ihr im Anhang unter "Bilder".
Im Prinzip enthält der IC acht komplette Transistorstufen. Zu
beachten ist dabei nur, dass hier die
Verbraucher (Lämpchen,Relais etc.) auf einem gemeinsamen
Pluspol liegen und sozusagen die
Verbindung zur Masse geschaltet wird. Folglich muss am Ausgang des ICs
ein AUS-Signal ( 0 ) anliegen,
um den Verbraucher einzuschalten. Aber die Ausgangswerte werden durch
die im IC enthalte Schaltung
auch negiert ( 1 = 0 und 0 = 1 ). Dadurch wird doch wieder durch eine 1
an DTR oder RTS die Lampe
oder was auch immer eigeschaltet.
Kurzer Tip zum Löten von ICs: Da diese relativ
hitzeempfindlich sind, solltet ihr erst einen Stecksockel
(gibt's bei Conrad für alle Grössen)
einlöten und dann den IC einstecken. Das hat auch den Vorteil,
dass
man die ICs, die teilweise mehr kosten als der Rest der Schaltung,
für mehrere Anwendungen nutzen
kann.
|
|