Parallelport mit pyparallel ansteuern

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
nzca
User
Beiträge: 3
Registriert: Mittwoch 11. Juni 2008, 21:33

Hi,

ich möchte ein kleines Programm schreiben, um meine PC-Beleuchtung über den Parallelport steuern zu können. Da wir in der Schule grade mit Python arbeiten, habe ich mich erkundigt, wie man Parallelports mit Python anspricht. Leider habe ich bis jezt nur rausbekommen können, dass das mit pyparallel geht. Also hab ich erst mal pyparallel runtergeladen und installiert.
Dann hab ich mal gegoogelt, was jezt in das Programm ungefähr reinmuss und sowas gefunden:

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

So jezt meine Fragen:
Wie bekomme ich jezt raus, was ich dahin setzen muss, wo 0x55 steht?
Und ist es möglich andere Ports als LPT1 anzusprechen?

Danke schonmal im Vorraus :wink:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

nzca hat geschrieben:Wie bekomme ich jezt raus, was ich dahin setzen muss, wo 0x55 steht?
Und ist es möglich andere Ports als LPT1 anzusprechen?
Hallo nzca!

Willkommen im Python-Forum!

Du kannst beim Initialisieren des Parallelports den Port mit angeben. 0 = LPT1, 1 = LPT2, ...

Code: Alles auswählen

p = parallel.Parallel(port = 0)
Du hast mit dem Parallelport 8 Datenleitungen. Diese 8 Datenleitungen stellen ein Byte dar. Data1 ist das erste Bit. Data2 ist das zweite Bit. Usw.

Im Binärsystem beginnt man mit der Zählung rechts und zählt nach links.

"00000001" = 1
"00000010" = 2
"00000100" = 4
"00001000" = 8
"00010000" = 16
"00100000" = 32
"01000000" = 64
"10000000" = 128

Wenn du einen oder mehrere Datenleitungen einschalten möchtest, dann kannst du dir so einen achtstelligen Text mit dem Befehl ``int(x, 2)`` vom Binärsystem in eine Zahl umwandeln. Und diese Zahl kannst du an ``p.setData()`` übergeben.

Beispiel:

Code: Alles auswählen

import parallel
p = parallel.Parallel(port = 0)
p.setData(int("00000001", 2))
p.setData(int("00000011", 2))
p.setData(int("00000111", 2))
Dann kannst du natürlich auch Binärlogik verwenden um die Zahl zusammenzustellen. Das kommt darauf an, ob du damit etwas anfangen kannst:

Code: Alles auswählen

>>> DATA1 = 1
>>> DATA2 = 2
>>> DATA3 = 4
>>> DATA4 = 8
>>> DATA5 = 16
>>> DATA6 = 32
>>> DATA7 = 64
>>> DATA8 = 128
>>>
>>> DATA1 | DATA8
129
>>> DATA1 | DATA2 | DATA3 | DATA4 | DATA5 | DATA6 | DATA7 | DATA8
255
>>
Du kannst die Zahlen aber auch einfach zusammenzählen. Das habe ich früher gemacht, als ich noch nichts über Binärlogik wusste:

Code: Alles auswählen

>>> data = DATA1 + DATA5 + DATA6
>>> p.setData(data)
>>> 
mfg
Gerold
:-)

PS:
- http://halvar.at/krimskrams/parallelpor ... oppler.gif
- http://www.python-forum.de/post-75211.html#75211

.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
nzca
User
Beiträge: 3
Registriert: Mittwoch 11. Juni 2008, 21:33

Hallo Gerold, danke für die Antwort.
Eine Frage hätte ich aber noch, gibt es auch eine Möglichkeit, bei

Code: Alles auswählen

 p = parallel.Parallel(port = 0) 
anstatt port=0 (bzw =1 etc.)direkt die Portadresse anzugeben? Also in meinem Fall wäre das B400.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

nzca hat geschrieben:direkt die Portadresse anzugeben? Also in meinem Fall wäre das B400.
Hallo nzca!

Du kannst es z.B. auf die harte Tour versuchen und ``parallel.LPT1_base`` überschreiben, bevor du ``parallel.Parallel`` initialisierst.

Sieh dir einfach den Quellcode von "parallel" an.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
nzca
User
Beiträge: 3
Registriert: Mittwoch 11. Juni 2008, 21:33

Danke für die schnelle Hilfe.
Jezt funktioniert alles. :)
Antworten