Forum: PC-Programmierung Ausgangserweiterung für den COM-Port mit Java ansteuern


von Jan H. (derbastelfreund)


Lesenswert?

Hallo zusammen,

Da das hier ist mein erster Beitrag im Forum ist, schlagt mir bitten 
nicht gleich alle den Kopf ein falls die Lösung hier schon X-Mal 
beschrieben wurde.
(Ich habe aber die Forensuche benutzt.)

Also, da Ich schon Erfahrungen im Bereich der Elektronik habe und ein 
wenig Java kann dachte Ich mir Ich steuere mal den Com Port an.
Für alle die jetzt denken Ich will wissen wie man den ansteuert:
Bitte weiterlesen!

Mein Problem ist jetzt, dass mir die drei Ausgänge nicht reichen.
Daher dachte Ich mir, ich Bastele mir eine Ausgangserweiterung wie auf 
http://www.skilltronics.de/versuch/elektronik_pc/4094.html nach.
Da dort nur ein Beispiel in Quick Basic ist, Ich aber mit Java darauf 
zugreifen will,ist nun meine Frage:
Wie kriege ich das geforderte Data Signal aus dem TXD Ausgang raus, ohne 
mit einer Baudrate von 9600 arbeiten zu müssen?

Helft mir bitte!!
Ansonsten muss ich mit primitiven Sprachen wie Quick Basic arbeiten :(
PS: An C/C++ bin ich weniger Interessiert.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Das wird so (auch unter C/C++ und Basic) auf modernen Betriebssystemen 
(Win2k+) nicht ohne weiteres funktionieren.
Ich kann dir nur empfehlen da einen uC zu nutzen dem du dann einfach 
Befehle per Serielle Schnittstelle zusendest.
Dann kanst du z.B. die RXTX Lib verwenden.

> Wie kriege ich das geforderte Data Signal aus dem TXD Ausgang raus,
> ohne mit einer Baudrate von 9600 arbeiten zu müssen?
Mit der Baudrate hat das erstmal garnix zu tun ;)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Zunächst mal ist die Lösung Pfusch, weil sie die serielle Schnittstelle 
auf eine nicht vorgesehene Art und Weise nutzt, was daran zu erkennen 
ist, daß dauerhaft definierte Signalpegel auf der TX-Leitung ausgegeben 
werden sollen.

Retten kann man die Situation aber trotzdem, indem zwei der Leitungen 
vertauscht werden, nämlich DTR und TxD.

TxD hat per Definition dauerhaften High-Pegel, wird das Byte 0xFF 
übertragen und ist die Schnittstelle auf keine Parität konfiguriert, 
lässt sich damit recht schön ein Rechtecksignal generieren, das als Takt 
vom Schieberegister ausgewertet werden kann:
1
-----+   +----------------------------+   +-------
2
     | S | 0  1  2  3  4  5  6  7  S  | S | 0  1  2 ...
3
     +---+                            +---+

Das Startbit erzeugt sowohl eine fallende als auch eine steigende 
Flanke, alle anderen Bits (8 Daten- und mindestens ein Stopbit) bleiben 
auf High-Pegel.

Die Dauer des Startbits ist eine Bitzeit und folglich direkt von der 
Baudrate abhängig.

Um diese Variante zu betreiben, muss jegliches Handshake deaktiviert 
werden (Hard- und Software, also auch kein XON/XOFF) und die 
Schnitstelle auf 8 Datenbits ohne Parität und beliebig viele Stopbits 
konfiguriert werden.


Je nach Aufbau der Schaltung (mit oder ohne Pegelkonverter) kommt es zu 
invertierten Pegeln.

von Jan H. (derbastelfreund)


Lesenswert?

Danke für die schnellen Antworten echt super!!

@ Läubi ..
Deine Idee ist gut, aber könntest du mir bitte genauer erklären,
wie das mit dem uC geht??Ggf. mit Schaltplan?
Übrigens habe ich schon mal mit RXTX versucht zu arbeiten, aber Ich
bevorzuge die API von Sun, würde aber zur Not umsteigen.

@ Rufus t. Firefly
Deine Idee gefällt mir auch, nur das mit der Baudrate ist ärgerlich aber
noch akzeptabel.
Nur eine Sache verstehe Ich noch nicht ganz, muss der Takt nicht 
gleichmäßig
(gleichlange high;gleichlange low)sein?

Ich bin gespannt auf eure Antworten :)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jan H. schrieb:
> nur das mit der Baudrate ist ärgerlich aber noch akzeptabel.

Was ist das Problem? Eine serielle Schnittstelle hat nun mal eine 
Baudrate, das ist grundlegendes Prinzip.


> Nur eine Sache verstehe Ich noch nicht ganz, muss der Takt nicht
> gleichmäßig (gleichlange high;gleichlange low)sein

Warum sollte er das? Sieh Dir das Datenblatt des CD4094 an, wird da ein 
bestimmtes Puls/Pauseverhältnis (duty cycle) gefordert?
Entscheidend ist die steigende Flanke des CLK-Einganges, mehr nicht.

von Jan H. (derbastelfreund)


Lesenswert?

Das mit dem duty cicle habe Ich aus bem Datenblatt interpretiert, weil 
da nur gleichmäßige duty cicles waren, ist jetzt aber OK.
Mir stellt sich nun ein neues Problem.
Wie generiere Ich das Data und Strobe Signal?
Ich stellte mir das so vor:

Pin 1 High:

T:|____1____|____2____|____3____|____4____|____5____|____6____|____7____ 
|____8____|_... 
C:S01234567SS01234567SS01234567SS01234567SS01234567SS01234567SS01234567S 
S01234567SS0...
D:__H_I_G_H____L_O_W_____L_O_W_____L_O_W_____L_O_W_____L_O_W_____L_O_W__ 
__L_O_W___...
S:___L_O_W_____L_O_W_____L_O_W_____L_O_W_____L_O_W_____L_O_W_____L_O_W__ 
_H_I_G_H__...

T->Takt
C->Clock  mit TxD (in Java : ??)
D->Data   mit DTR (in Java : setDTR(boolean))
S->Strobe mit RTS (in Java : setRTS(boolean))

Ist diese Überlegung richtig oder muss Ich mir etwas anderes überlegen?

Freue mich wie immer auf Antworten ;)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jan H. schrieb:
> C->Clock  mit TxD (in Java : ??)

Schrieb ich doch: Senden eines Bytes mit dem Wert 0xFF.

von Jan H. (derbastelfreund)


Lesenswert?

Gut.
Danke Rufus!
Das war 'ne echt große Hilfe für mich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.