Ich habe vor mit pyParallel zu arbeiten. Hierbei möchte ich nur ein Signal auslesen, welches von der parallelen Schnittstelle gesendet wird. Hierzu ist es also "nur" nötig ein bestimmtes Register auszulesen, doch da stellen sich mir als Neuling die Fragen:
Welche Register mit welcher Adresse?
Wie lese ich sie aus?
hat irgendjemand eine Idee?^^
pyParallel - Auslesen eines Registers
Hast du dir die pyParallel-Doku und ggf. -Beispiele mal angesehen? Weißt du, auf welcher Leitung du das Signal erwartest? Dann kannst du entsprechend herausfinden, wie pyParallel dir den Zugriff darauf erlaubt (so sind z.B. die Attribute[?] anhand des Einsatzzweckes im Druckerbereich benannt, wenn ich mich recht erinnere).
Ich hatte bei meinem ersten und bisher letzten Projekt damit allerdings einige Probleme. Wie ich kürzlich herausfand oder mir wieder ins Gedächtnis rief, habe ich wohl ignoriert, dass bei einigen der Leitungen 0 und 1 in der Bedeutung vertauscht sind.
Ich hatte bei meinem ersten und bisher letzten Projekt damit allerdings einige Probleme. Wie ich kürzlich herausfand oder mir wieder ins Gedächtnis rief, habe ich wohl ignoriert, dass bei einigen der Leitungen 0 und 1 in der Bedeutung vertauscht sind.
Hier mal die Möglichkeiten von pyparallel Signale zu empfangen:
Allerdings kann daraus nur maximal ein 5-bittiges Datenwort eingelesen werden, für höhere Genauigkeiten eignet sich dann pyserial.
Um das Shannon´sche Abtasttheorem bzw. Nyquist nicht zu verletzen und die Reaktionszeit der Anordnung zu erhöhen würde ich aber auf eine C-Implementation des Sachverhalts plädieren. Dieser Snippet kann dan einfach mit SWIG in dein bestehendes Python-Programm eingebunden werden.
Code: Alles auswählen
def getInError(self):
"""Error pin"""
return _pyparallel.inp(self.statusRegAdr) & 0x08 and 1
def getInSelected(self):
"""select pin"""
return _pyparallel.inp(self.statusRegAdr) & 0x10 and 1
def getInPaperOut(self):
"""paper out pin"""
return _pyparallel.inp(self.statusRegAdr) & 0x20 and 1
def getInAcknowledge(self):
"""Acknowledge pin"""
return _pyparallel.inp(self.statusRegAdr) & 0x40 and 1
def getInBusy(self):
"""input from busy pin"""
return not (_pyparallel.inp(self.statusRegAdr) & 0x80)
Um das Shannon´sche Abtasttheorem bzw. Nyquist nicht zu verletzen und die Reaktionszeit der Anordnung zu erhöhen würde ich aber auf eine C-Implementation des Sachverhalts plädieren. Dieser Snippet kann dan einfach mit SWIG in dein bestehendes Python-Programm eingebunden werden.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Toni83!Toni83 hat geschrieben:Hier mal die Möglichkeiten von pyparallel Signale zu empfangen:Allerdings kann daraus nur maximal ein 5-bittiges Datenwort eingelesen werden, für höhere Genauigkeiten eignet sich dann pyserial.Code: Alles auswählen
def getInError(self): """Error pin""" return _pyparallel.inp(self.statusRegAdr) & 0x08 and 1 def getInSelected(self): """select pin""" return _pyparallel.inp(self.statusRegAdr) & 0x10 and 1 def getInPaperOut(self): """paper out pin""" return _pyparallel.inp(self.statusRegAdr) & 0x20 and 1 def getInAcknowledge(self): """Acknowledge pin""" return _pyparallel.inp(self.statusRegAdr) & 0x40 and 1 def getInBusy(self): """input from busy pin""" return not (_pyparallel.inp(self.statusRegAdr) & 0x80)
???
Die Daten stehen im Datenregister das aus 8 Bit besteht. Diese oben aufgezeigten Signale stellen "nur" die Statussignale dar, die z.B. bei der Druckeransteuerung zur Synchronisierung der Datenübertragung und für Fehlersignale verwendet werden. Was mir bei pyParallel fehlt, ist die Möglickeit auf das Datenregister lesend zuzugreifen. Schreiben kann man ja.
Ich persönlich würde mich nicht lange mit pyParallel aufhalten und sofort nach "(ich weiß nicht mehr -- habe es in einem anderen Topic empfohlen)" umschwenken.
Und was hat pySeriell mit pyParallel zu tun? Damit kann man die Serielle Schnittstelle und nicht die Parallele Schnittstelle auslesen.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hallo Gerold,
Nachdem der Beitrag von alfadas sich bei dem Thread "Python und Sensoren" auf das empfangen von Sensordaten mit Hilfe von Python bezog und ich angenommen habe, dass er das selbe Problem in seinem eigenen Beitrag diskutieren wollte, habe ich ihm hier Möglichkeiten gezeigt, wie man Daten über das parallele Port empfangen kann. Dabei ging ich davon aus, das der Mikrocontroller direkt mit der Schnittstelle verbunden werden soll. Das hat dann rein gar nichts mit dem Drucker zu tun. Er kann ja über diese Leitungen Signale vom Mikrocontroller empfangen wie er grad lustich ist. Für Echtzeit würde ich aber sowieso auf andere Schnittstellen ausweichen.
Das mit pyserial war nur als ein alternativer Vorschlag zu pyparallel gedacht.[/quote]
Nachdem der Beitrag von alfadas sich bei dem Thread "Python und Sensoren" auf das empfangen von Sensordaten mit Hilfe von Python bezog und ich angenommen habe, dass er das selbe Problem in seinem eigenen Beitrag diskutieren wollte, habe ich ihm hier Möglichkeiten gezeigt, wie man Daten über das parallele Port empfangen kann. Dabei ging ich davon aus, das der Mikrocontroller direkt mit der Schnittstelle verbunden werden soll. Das hat dann rein gar nichts mit dem Drucker zu tun. Er kann ja über diese Leitungen Signale vom Mikrocontroller empfangen wie er grad lustich ist. Für Echtzeit würde ich aber sowieso auf andere Schnittstellen ausweichen.
Das mit pyserial war nur als ein alternativer Vorschlag zu pyparallel gedacht.[/quote]
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Toni83!Toni83 hat geschrieben:Dabei ging ich davon aus, das der Mikrocontroller direkt mit der Schnittstelle verbunden werden soll. Das hat dann rein gar nichts mit dem Drucker zu tun.
Nichts für Ungut. Das kommt nur weil wir so wenig Informationen von alfadas erhalten. Jetzt verstehe ich dich. Du hast ihm eine Lösung präsentiert, mit der er zumindest fünf Pins des Parallelports auslesen kann und ich dachte immer, dass er alle acht Datenleitungen benötigt.
In einem seiner Beiträge schrieb er, dass er den Parallelport nehmen *müsse* und darauf keinen Einfluss hat. Also ging ich davon aus, dass der Mikrocontroller-Programmierer eine parallele (8 Bit) Schnittstelle zum Computer vorgibt. Anscheinend funktioniert bei alfadas der Treiber für den Zugriff auf den Parallelport. Jetzt braucht er nur noch eine Python-Schnittstelle, die nicht nur schreibend, sondern auch lesend auf das Datenregister zugreifen kann. pyParallel kann man sicher mit ein wenig mehr Wissen erweitern. Aber einfacher wäre es, wenn man gleich eine Python-Schnittstelle nimmt, die auch lesen kann. Ich habe mir den Quellcode von winioport.py angesehen und konnte dort Funktionen zum Auslesen des Datenregisters finden. Diese habe ich in einem anderen Topic bereits bekannt gegeben. Jetzt muss alfadas nur noch den alten Treiber deinstallieren, den neuen installieren und mit diesem arbeiten. -- Und uns am Laufenden halten.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.