Hardware ansteuern - Signal an PCI-Karte

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

War da nicht mal ein Bericht in der Linux-User zu solchen Sachen, erst vor ein paar Ausgaben?
Ah, hier: http://www.linux-user.de/ausgabe/2007/05/
Es war "LCD am LPT". Da wurde beschrieben, wie man mit ein paar Euronen Hardware ansteuern kann (Leds, kleine Anzeigen auf denen man RAM, CPU-Werte, .. ausgeben kann).
Da wurde eine Lib vorgestellt, die sowas kann, ich habe es aber jetzt gerade nicht im Kopf. Vielleicht sind da ein paar Tips dabei? Ich habe die Ausgabe sicher noch wo rumliegen.
Gruß!
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

Hallöchen,

tja da suchte ich jemanden der schonmal Hardwaremäßig mit Python was
gebastelt hat und wen finde ich da? Gerold!
(hat mir schon beim Web-Projekt sehr weitergeholfen)

Nunja lange Rede... ich knüpfe einfach mal an diesen doch schon älteren
thread an, um erstens mal zu Fragen was denn aus diesen "spielereien"
geworden ist - und ob mir jmd. bei meinem aktuellen Problem behilflich
sein kann.

Ich habe ein alix2d2 board von PC-Engines und möchte über den I2C
Bus (auf board direkt vorhanden) bis zu 16Leds ansteuern.
Den Passenden Controller PCA9552 von Philips habe ich schon gefunden.

Nun macht mir die Ansteuerung mit Python Sorgen.
Ich habe zwar ein Modul für Python gefunden (pyi2c) welches aber
anscheinend nicht für den Einsatzzweck geeignet ist da in der Hilfe steht:

"...access to I2C components through serial or parallel interface.."
Und ich habe ja bereits den I2C-Bus-Connector Hardwaremässig auf dem
Board.

Seriell / Parallel ist schon belegt.

Frage also: hat da jemand schon Erfahrung (speziell Gerold ;-) ) und kann
mir da ein paar Tips geben???

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

Hallo Normann!

Vorab: Das ist nur Theorie, da ich mit Onboard-I2C-Controllern noch nie etwas gemacht habe.
py_lo hat geschrieben:Ich habe ein alix2d2 board von PC-Engines
Auf dem läuft Linux! Also nimm Linux! ;-)
py_lo hat geschrieben:Ich habe zwar ein Modul für Python gefunden (pyi2c) welches aber anscheinend nicht für den Einsatzzweck geeignet ist
Stimmt. pyi2c ist nicht für deine Zwecke geeignet. Aber in weiterer Folge, könntest du pyi2c selbst um die Möglichkeit erweitern, auch eingebaute I2C-Geräte anzusprechen. Dann hättest du ein kleines Rahmenwerk mit dem du arbeiten kannst. Dein Code würde damit ohne große Anpassungen später auch mit externen I2C-Controllern arbeiten. Außerdem könntest du diese Codeanpassung auch an den Programmierer von pyi2c schicken. Vielleicht baut er deinen Code sogar ein.
py_lo hat geschrieben:ich habe ja bereits den I2C-Bus-Connector Hardwaremässig auf dem Board.
Dann sind libi2c-dev und die i2c-tools das was du brauchst.

Unter Ubuntu: ``aptitude install libi2c-dev i2c-tools``

Mit den Kommandozeilenprogrammen i2cdetect, i2cdump, i2cget, i2cset kannst du schon mal herausfinden, wie die Kommunikation über I2C funktioniert und ob du den PCA9552 ansprechen kannst.

Du kannst diese Kommandozeilenprogramme auch direkt in dein Python-Programm einbinden. Entweder mit subprocess oder mit pexpect. Ich kenne diese Kommandozelenprogramme nicht. Wenn es mit subprocess nicht funktioniert -- weil du vielleicht auf Rückmeldungen warten musst -- dann probiere es mit pexpect.
Das dürfte das Einfachste sein, wenn du gelernt hast, mit diesen Kommandozeilenprogrammen eine Verbindung zum PCA9552 herzustellen.

In der Datei /urs/share/doc/libi2c-dev/dev-interface.gz findest du weitere Hinweise. Unbedingt durchlesen!
Dort steht z.B., dass du im Ordner /sys/class/i2c-dev/ Informationen über die I2C-Geräte findest. Weiters ist in dieser Textdatei ein C-Beispiel. Das bedeutet, dass du auch mit Python, direkt auf diese Geräte-Steuerdateien zugreifen kannst (du brauchst vielleicht ctypes dafür). Du musst also nicht unbedingt den Umweg über die Kommandozeilenprogramme (i2c-tools) machen. Wenn du das C-Beispielprogramm verstehst, dann kannst du es direkt nach Python portieren. Das bringt dir wahrscheinlich einen kleinen Geschwindigkeitsvorteil, falls du mit dem Einbinden der Kommandozeilenprogramme Zeitprobleme bekommst -- was ich aber nicht glaube, denn der I2C-Bus ist nicht besonders schnell.

Ich persönlich glaube, dass du mit dem Einbinden der Kommandozeilenprogramme (i2c-tools) mit geringem Aufwand den größten Nutzen hast und am Schnellsten ans Ziel kommst. Du willst ja keine Raumfähre damit steuern.

- http://www.lm-sensors.org/wiki/i2cToolsDocumentation
- http://www.lm-sensors.org/wiki/man/i2cdetect
- http://www.lm-sensors.org/wiki/man/i2cget
- http://www.lm-sensors.org/wiki/man/i2cset
- http://www.lm-sensors.org/wiki/man/i2cdump

------

Ich schrieb bereits, dass ich das alles nicht ausprobiert habe. Außerdem weiß ich nicht, ob es eine bessere Lösung für dich gibt. Das was ich schrieb, ist alles was mir im Moment dazu einfällt.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

ja danke Gerold dafür...

Auf dem Board läuft natürlich schon (voyage)linux und ich habe mir
die i2c-tools schnell mal angeschaut.

Dort gibt es auch etwas was sich py-smbus nennt welches Python-bindings für den Zugriff auf den SMBus über i2c-dev bietet.

Klingt zumindest schonmal sehr interessant.

in /dev * habe ich allerdings nur ein gerät gefunden welches "bus" heisst,
ich hoffe das isser dann auch. Aber das dürfte ich ja recht schnell rausfinden. Anonsten muss ich wohl einen neuen Kernel kompilieren...
aber eins nach dem anderen.

Nu brauch ich dann wohl erstmal die Hardware, in der Zeit werde ich mich
da noch ein wenig einlesen müssen.

Mal gucken was dabei rauskommt....
Antworten