PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ein einfacher Taster an serieller Schnittstelle / JAVA



Martin S
31.10.2005, 12:47
Hallo,

uns beschäftigt momentan eine kleine Hardware / Programmierfrage in unserem Projekt.
Es geht darum, einen einfachen Tastschalter an der seriellen Schnittstelle zum Auslösen einer Aktion in Java zu benutzen. Nun ist die Frage wie man
a: Hardwaremäßig ein Signal eines Schalters (d.h. schalter gedrückt) an die Schnittstelle sendet und
b: dieses Signal mit Java empfängt und darauf reagiert

Könnt ihr uns einen Tipp geben?
Martin

SprinterSB
31.10.2005, 13:01
Von Java aus ist nicht vorgesehen, auf COM zu greifen.

Für Windows gibt es eine API dafür: javax.comm
Am einfachsten geht das über Steuerleitung CTS (oder ist's RTS?)
Von Linux aus kann man lesen und schreiben wie auf ne normale Datei /dev/ttySx irgendwo. Wie man die Steuerleitungen bedient? Keine Ahnung.
Oder man muss ein richtiges Zeichen senden. Aber das ist mit Kanonen auf Spatzen geschossen, wenns nur ein Tastendruch sein soll.
Die CTS kannst du direkt verwenden, evtl entprellen. Pullup nach RTS und RTS am Host setzen, und Taster zieht über Pulldown nach GND. Müsste gehen.

maze2k
31.10.2005, 14:21
Und nochmal für Leute, die nicht wissen, was CTS und RTS ist? :)

Also so in der Art: "Kontakt A des Tasters an Pin X der seriellen Schnittstelle" *gg*

Martin S
31.10.2005, 14:35
Der Idealfall wäre für mich einen Pegel der am einen Pin liegt mit dem Taster bei Druck auf einen anderen Pin durchzuleiten.
Ich habe zwar in der letzten Zeit wirklich viel darüber gelesen, aber ich blick leider immer noch nicht durch. Wäre deswegen klasse wenn ihr in einfachen Worten erklärt.
Die javax.comm API hat Events, die auf Ring Indicator und anderes reagieren, nur wie werden diese ausgelöst.

SprinterSB
31.10.2005, 16:14
Es gibt zB

SerialPort.addEventListener(SerialPortEventListene r)

Du implemplementierst einen SerialPortEventListener und dann add EventListener(). Wie mit MouseEvents und so auch. (De)Aktivieren mit den .notifyOnXXX (boolean).

Ne API-Doc zu dem Zeug gibt's auch irgendwo. Musst eben mal suchen.

Martin S
31.10.2005, 17:02
Was erwartet die serielle Schnittstelle bzw. Java für ein Signal am Pin? Genügt ein Pegel (z.B. 5V) oder muss es evtl. ein Wort (z.B. 10ms 5V, 10ms 0V, 10ms 5V usw.) sein?

SprinterSB
31.10.2005, 21:45
Für die Handshake-Leitungen sollte es genügen, den Pegel zu ändern. Für die Spez der RS232 musst du mal im Netz schauen. 5V /-5V sollten aber ok sein. Falls du -5V brauchst, kannst du einen Ausgang entsprechend setzen und das Potential dann verwenden, falls das von der Schaltung her geht und der Port noch frei ist.

Wenn ichs recht sehe, dann ist RS232:

I=In, O=Out
1: I DCD
2: I RxD
3: O TxD
4: O DTR
5: GND
6: I DSR
7: O RTS
8: I CTS
9: I RI

Dann kannst du folgendes machen: Den CTS-Event implementieren und aktivieren (notify-Gedöhns). Dann klemmst du RTS und CTS zusammen. Evtl. musst du Flusssteuerung ausstellen, damt du selbst die Kontrolle darüber hast. Wenn du dann RTS softwaremässig runterziehst, solltest du nen CTS-Event bekommen. Das wär schon mal der Anfang und bist damit praktisch fertig.

Martin S
02.11.2005, 20:34
Danke für eure bisherigen Antworten. Ich werde jetzt mal den Lötkolben zur Hand nehmen und testen und melde mich mit dem (Miss-)Erfolg.
Für Interessierte: Antworten aus anderen Quellen.

Antwort 1
vielleicht ist die parallele Schnittstelle besser geeignet,
dort gibt es evtl. Systemcalls, die den Wert eines Portbits
zurückliefern (polling).
"Alte" Systeme beobachten evtl. die "ring-indicator"-Leitung
eines Modems, welches an der seriellen Schnittstelle angeschlossen werden kann; diese Leitung ist aber bei neueren Systemen oft
nicht mehr vorhanden. ("Wenn das Telefon klingelt")

Antwort 2
wie wäre es beispielsweise mit dem Button eines Joysticks? Man könnte an den Gameport einen Taster anschließen. Der Gameport kann, soweit ich weiß, ganz einfach abgefragt werden. Wenn Sie den Gameport benutzen wollen muß eine Art "Dummy-Joystick" gebaut werden damit Windows das angeschlossene "Gerät" am Gameport als Joystick wahrnimmt.
Eine andere Möglichkeit wäre der Parallelport. Dort stehen mehrere Datenleitungen zur Verfügung die in einem Byte parallel ausgelesen werden können.

Antwort 3
das ist kein Problem. Sie verwenden die Javacomm Bibliothek, darin
dann das Serial Port API, siehe

http://java.sun.com/products/javacomm/re...SerialPort.html

Sie muessen den Schalter (am besten ein Umschalter) an eine der
Handshake Leitungen anschliessen (RTS, CTS) und beachten, dass der Pegel
bei Betaetigung des Tasters von -12V auf +12V (oder umgekehrt) wechselt.
Wenn man es geschickt macht, dann verwendet man die Ausgangssignale der
seriellen Schnittstelle, um die beiden Spannungswerte zu erzeugen.

Antwort 4
Ihr Problem lässt sich von der Softwareseite aus mit der Java commAPI lösen.
Kurze Beschreibung Siehe Attachment. Im Netz finden Sie Beispielprogramme,
etwa der Porttest testEnumeration.

Hardwaremässig verwenden Sie die serielle COM-Schnittstelle des Rechners.
Sie brauchen einen RS-232 Stecker, an den Sie einen Schalter löten.
Pinbelegung der RS-232 Schnittstelle finden Sie im Netz. Bevor Sie das Teil an
einen (FH-) Rechner anschliessen, lassen Sie bitte Herrn K. einen Blick darauf werfen -
falscher Anschluß zerstört die Schnittstelle.