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.
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 ;)
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.
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 :)
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.
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 ;)
Jan H. schrieb: > C->Clock mit TxD (in Java : ??) Schrieb ich doch: Senden eines Bytes mit dem Wert 0xFF.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.