Dauerhaftes Signal an LPT1

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Hallo,

habe nun ein Problem mit pyparallel. Ich steuere mit den beiden obersten Bit von Data_Out zwei Relais.
Im Prinzip möchte ich das Signal dauerhaft an den Ausgang des LPT´s legen, d.h. wenn ich den Ausgang auf eins setze soll dieser auch auf eins bleiben, solange bis ich ihn auf null setze. Das Problem bei pyparallel ist, dass wenn ich folgendes mache...

import parallel
p = parallel.Parallel() #open LPT1
p.setData(0x55)

...der Ausgang nicht dauerhaft auf eins gesetzt wird, sondern nur ein Puls an den LPT geschickt wird. Dadurch wird das Relais aber nicht dauerhaft geschalten.
Meine Frage: Gibt es irgendwie die Möglickeit das Signal, dass ich z.B. auf das 7te Bit setze, dauerhaft bei der Abarbeitung meines Source Codes zu erhalten?

Gruss,
Toni
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

p.setData(0x55)
Ich weiß nicht wie Du darauf kommst, dass das die zwei höchstwertigen Bits auf eins setzt.

Dazu müßtest Du eigentlich:

Code: Alles auswählen

p.setdata(0x80+0x40)
machen, das sind die zwei höchstwertigen bits (0x80 = bit 8, 0x40 = bit 7). Du setzt sie auf eins, und da sollten sie auch bleiben. Dass Du einen kurzen Spike siehst hat wahrscheinlich damit zu tun dass sich das Device umstellt, und dann wieder auf 0 zurückfällt, weil die Daten genau das hergeben (für das höchste bit, das zweithöchste sollte an sein und auch bleiben, außer Dein paralleler Port ist ziemlich kaputt).
--- Heiko.
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

War wohl etwas missverständlich von mir.
Das war nur ein Beispiel von mir. Das ich damit nicht Bit 6 und 7 ansteuere ist mir schon klar.
Ich habe jetzt ein ziemliches Verständnisproblem. Wenn ich mal angenommen Bit 0 und Bit 1 immer wieder mit setData auf 1 setze läuft mein Schrittmotor mit Python. Wenn allerdings nach deiner Aussage ständig die 1 anliegt wenn ich es mit Python setze, so dürfte mein Motor nicht laufen sondern stehen. Oder werden vor jedem setData erst die Bits wieder auf Null gesetzt?
Werde nochmal versuchen, einen anderen Rechner herzunehmen, um die Tatsache das mein Port zerstört ist, auszuschließen.

Gruss,
Toni
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Oder werden vor jedem setData erst die Bits wieder auf Null gesetzt?
Das kommt auf den Port an, aber im Normalfall gibts beim Wechseln des Zustands (auch vom gleichen in den gleichen) einen undefinierten Zustand dazwischen, der zum Beispiel alles auf Null sein kann, aber nicht sein muß; es kann zum Beispiel auch sein dass der Port bei gleichen Daten gar nichts macht, die Pegel also konstant hält. Das kommt aber auf die genaue Hardware an, und vor allen Dingen wie die Schaltung auf dem Chip genau aussieht (mein E-Technik-Wissen ist ein bisschen rostig, sonst könnte ich jetzt noch die Unterschiede erklären, aber ich glaub kaum dass Dich das interessiert ;-)).

Am einfachsten testest Du das, indem Du ein Spannungsmeßgerät zwischen den Datenpin und Masse hälst, und dann einfach schaust was passiert wenn Du 0x55 anlegst. Dann sollte, aller Voraussicht nach, die Potentialdifferenz über längere Zeit genau 5,0 V betragen, bzw. genau solange bis Du 0x0 auf den Port legst. Dann kannst Du sicher sein dass Dein Port auf 0 zurückfällt beim Daten neu setzen, aber eben sonst korrekt funktioniert.

Auf jeden Fall gibts genau deswegen auch eine Statusleitung die dem Drucker signalisiert, dass das Signal jetzt fertig und korrekt anliegt, so dass der Drucker erst in diesem Moment das nächste Zeichen von den Datenleitungen liest und keinen Müll verarbeitet. Wenn Du also einen Schrittmotor steuerst, solltest Du das ganze machen können indem Du nacheinander:

0xc0
0x00
0xc0
0x00
0xc0
...

anlegst, wobei beim Wechseln auf 0x00 die meißten Ports keine komischen Zwischenzustände haben, und der Schritt beim Wechsel von 0x00 in 0xc0 passieren sollte, und zwar genau einer. Oder Du machst die Steuerung über die Signalleitungen, die sind meines wissens nach einzeln entprellt. Aber da lies Dich schlau in entsprechenden Anleitungen; das weiß ich ehrlich gesagt nicht so ganz genau...
--- Heiko.
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Danke für die Antwort!
Habe jetzt das ganze mit einem Parallel Port Monitor überprüft. Tatsächlich bleibt der Ausgang auf eins wenn man Ihn setzt und er wird nur null wenn ich den Ausgang zurücksetze.
Folgerung daraus: Muss meine Relais-Karte auf Funktion nochmal überprüfen...
Ist wohl sicherer deinem Ratschlag zu folgen und 0x00 zu verwenden.
Danke!

Gruss,
Toni
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Es lag an der Relaiskarte, zu geringe Versorgungsspannung. Habe deswegen noch einen Hochsetzsteller davorgeschaltet.
Jetzt funktionierts, ich kann zwei elektrisch vorgesteuerte Pneumatikventile mit Python ansteuern.
Danke für die Hilfe.

Gruss,
Toni
Antworten