Kontrollpins vom LPT-Port

  • VB.NET

Es gibt 59 Antworten in diesem Thema. Der letzte Beitrag () ist von Jogl.

    Kontrollpins vom LPT-Port

    hi allerseits!

    Ich möchte mit meinem Programm die Kontrollpins (Pin 1,14,16,17) des LPT-Ports ansteuern.
    Bei den Kontrollpins möchte ich, dass wenn ich z.B. auf Button1 drücke, nur Pin 1 aktiv ist, also Strom hat und die anderen Pins sollen aus sein. Genau so bei Button2, da soll der Pin 14 aktiv sein und die anderen nicht. Bei Button3 soll Pin 16, und bei Button4 Pin 17 aktiv sein.

    Meine Frage ist: Welchen Wert muss ich verwenden wenn ich mit der InpOut32.dll die eben beschriebene Sache machen will.

    Ich hab folgendes vor:
    Ich möchte mit dem LPT-Port 5 7-Segment Anzeigen steuern, dazu brauch ich die Kontrollpins und den achten Datenpin zum multiplexen der Anzeigen.
    Eignet sich diese Methode überhaupt?
    Die Adresse des Controlports ist üblicherweise Datenport +2. Bei 888 (378) wäre dies dann 890 (37A).
    Standard sind meines Wissens nach 4 Ausgänge beim Controlport 1(Bit 0),14(Bit 1),16(Bit2),17(Bit3).
    Bit 0 setzen = 1
    Bit 1 setzen = 2
    Bit 2 setzen = 4
    Bit 3 setzen = 8
    Alles aus = 0

    Als Stromlieferant würde ich die Pins aber nicht nutzen, normalerweise fragt man den Pegel (Low, High) ab und wertet diesen dann aus. Mehr als 3 mA pro Pin würde ich nicht empfehlen. Diese reichen aber locker aus, um z.B. einen Transistor anzusteuern.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    So gehts beim Datenport, nicht aber beim Kontrollport weil Pin 1, 14 und 17 invertiert sind.

    Mit dem Transistor wollt ich sowieso machen. Aber ist das nicht so, wenn bei der Basis des Transistors kein Strom anliegt er dann leitet, und wenn Strom da ist, er dann sperrt? Weil dann müsste man das ganze irgendwie umdrehen, d.h. Alle Pins sind an, außer der wo die Anzeige leuchten soll.
    Durch Zufall bin ich auf Schieberegister gestoßen. Geht das damit einfacher, bzw. braucht man dann die Kontrollpins auch (ein Datenpin ist übrig)?
    Meines Wissens nach, genügt es wenn man bei einem Eingang (welcher weiß ich nicht) einen kurzen Impuls abgibt, und das Schieberegister schiebt dann ein Bit um eine Stelle weiter, sodass mit jedem Impuls die aktive Anzeige um eins weitergeschaltet wird.
    Die meisten Schieberegister (die ich gesehen habe) sind mit 8 Ausgängen belegt. Kann man die auch ganz einfach zurücksetzen? Zur Not kann ich auch 8 Anzeigen machen :P.

    Bitte korrigiert mich wenn ich falsch liege.
    Ein Schaltplan, wie ich das am besten mache, wäre auch ganz nett :D
    Strom liegt nicht an, sondern fließt. Spannung liegt an ...
    Wenn der Transistor inner Luft hängt (kein Strom in die Basis fließt), dann sperrt er. Wenn genug Strom in die Basis fließt (er gesättigt ist), schaltet er ganz durch (- Flussspannung). Dazwischen hat du eine Kennlinie, "Transistor als Verstärker". Genaueres entnimmst du am Besten nem guten Buch, Google oder der Wikipedia. Die Funktion, die du suchst ist "Transistor als Schalter".

    Zum Schieberegister:
    Wiki: Schieberegister
    Wenn die invertiert sind, dann kannst du das doch im Programm berücksichtigen und die Bits löschen statt zu setzen.
    Wenn du mit Schieberegistern arbeitest, dann könntest du z.b. nen cd 4094 nehmen. Diesen kannst du hintereinanderschalten. Jeder dieser Schieberegister steuert dann z.B. ein 7Segment Display an. Das heisst du schickst jedesmal alle Digits aller Anzeigen auf Reise und wenn diese durch sind, wird per enable Leitung alles angezeigt. Für diese Schaltung bräuchtest du nur 6 Adern inkl Spannungsversorgung.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Bei Conrad heißt er 74 HCT 4094 .
    Die beiden, welche Du genannt hast, arbeiten genau anders herum: Parallel rein und Seriell raus. Sind also nicht für Deine Zwecke geeignet.
    Einen Prinzipschaltplan und die Ansteuerung findest du z.B. hier . Ich selbst habe noch keinen Schaltplan erstellt, da ich mir damals einige fertige Display mit dem Schieberegister gekauft hatte.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Das lief im Februar über die Bucht ab. Der Hersteller der Displays war/ist Bergmann Automaten. Zumindest steht das auf der Platine. Scheinen also Teile aus irgendeinenem Spielautomaten gewesen zu sein.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    aso, ist egal...

    wegen dem schieberegister:
    Ich glaub, ich habs jetzt verstanden
    Über "D" (Pin 2) kommen die Bits rein, Zustand 0 entspricht LOW (0V), Zustand 1 entspricht HIGH (5V).
    Wenn an Pin 2 Spannung anliegt (oder auch nicht) braucht man einen Strobe-Impuls (Pin 1) dass der Wert ins Schieberegister übernommen wird.
    Wenn alle Bits gesetzt sind wird "OE" (Pin 15) auf HIGH gesetzt und an "D0" - "D7" kommt je nach gesetztem Bit Strom raus 8o
    Und wenn man mehrere Schieberegister hintereinandergeschaltet hat, muss man mit dem letzten Bit anfangen, wenn ichs richtig verstanden habe.
    Bitte korrigiert mich wieder, wenn ich unrecht habe...

    Kleine Frage am Rande: Für was ist "Clk" (Pin 3)?
    Prinzipiell so:

    Die Daten werden durch das Register geschoben, wenn Clock auf high steht.
    Wenn strobe auf high steht, dann werden die Daten ins Speicherregister der Ausgänge kopiert.
    Wenn Output Enable high ist, werden diese dann an den Ausgängen ausgegeben.

    Pin 9 ist der Ausgang, welcher dann zum nächsten 4094 geht. Wenn da Probleme auftreten, kannst Du Pin 10
    probieren. Dieser schiebt die Bits dann bei fallender Flanke raus. Allerdings würde ich das nur zur Fehlersuche machen.
    Besser wäre bei Pin 9 zu bleiben und die Timings zu entschärfen (Längere Pausen vor setzen und löschen des clock Signals)

    Output Enable kann z.B. die ganze Zeit auf high stehen. Oder im Takt getoggelt werden, so dass die Anzeige blinkt. Die Werte für die Ausgänge bleiben dabei erhalten.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „peterfido“ ()

    OE ist normalerweise immer an (außer hald blinken).
    CLK ist das, was du als "Strobe-Impuls" bezeichnet hast (da hast du dich also geirrt). Sobald CLK HIGH wird, werden alle vorhandenen Bits eins weiter bewegt und das, was an D anliegt, kommt ins erste Bit.
    Zwischen altem und neuem Inhalt schaltest du mit Strobe um. Also erst neue Daten reinfüllen, dann kurz Strobe auf High.
    Wenn du mehrer Schieberegister aneinander hängst, müssen logischweise alle CLK miteinander verbunden werden.

    Geschwindigkeitsmäßig wirst du bei dem Teil vermutlich keine Problem haben, jedoch bist du auf der sicheren Seite, wenn du CLK und Strobe besser zu lang als zu kurz auf HIGH setzt. Bei CLK würd ich die LOW-Dauer genauso lang machen wie die HIGH-Dauer, solang nichts zeitkritisch ist. Umso mehr Freiraum du hast, desto mieser kann die Schaltung aufgebaut sein (Kapazitäten, Induktivitäten, Wiederstände, ...) ^^

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Mad Andy“ ()

    also, wenn ich das richtig verstanden habe:
    1. An D High oder Low anlegen.
    2. CLK High
    3. Warten
    4. CLK Low
    5. Neue Daten rein und 1 - 4 wiederholen bis alle Schieberegister "voll" sind (mit letztem Bit beginnend)
    6. Strobe High
    7. Warten
    8. Strobe Low
    9. Eventuell OE High
    Fertig

    Ist das eigentlich egal, welche Spannung man an D und Vcc reinlässt?
    Kommen dann bei D0 - D7 auch wieder z.B. 5V raus?
    Wie willst Du ihm denn am Eingang einen höheren Strom aufzwingen, als er braucht? Die Ausgänge sollten vor zu hohen Lasten geschützt werden, z.B. indem größere Lasten von einem Transistor oder einem nachgeschalteten ULN2803 angesteuert werden.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Sieh Dir doch einfach mal das Datenblatt dazu an. Dieser kann z.B. 500mA pro Kanal verkraften.

    Ich würd mal sagen: Fang doch erstmal an und wenn dann Probleme auftauchen frag speziell nach.
    Gruß
    Peterfido

    Keine Unterstützung per PN!