Auslesen PCA9539 über I2C

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
BackupMid
User
Beiträge: 2
Registriert: Donnerstag 6. Dezember 2018, 11:54

Hallo Leute,

ich versuche seit längerem einen PCA9539 16bit GPIO Expander auszulesen.
Dabei nutze ich derzeit das module smbus2.
Folgendes ist der Fall: Ich nutze ein Linux Betriebssystem (welches Read-only ist). Ich kann also keine module über pip installieren, jedoch diese in einem Ordner dazulegen. Mittlerweile konnte ich auf das Device schreiben, aber beim Lesen tritt immer der folgende Fehler auf:

Code:

import smbus2
from smbus2 import SMBus, i2c_msg, SMBusWrapper
from smbus2 import SMBusWrapper
import time

dev_add = 118 # 0x76
cmd = 0 # 0x00

write = i2c_msg.write(dev_add, cmd) # write command byte 0x00 to device 0x76 (activate following read)
#read = i2c_msg.read(dev_add, 1) # read one byte from device 0x76
with SMBusWrapper(1) as bus:
bus.i2c_rdwr(write)
#bus.write_byte(dev_add, 0)
time.sleep(0.2)
# value = bus.read_byte(dev_add) # read on byte from device 0x76
value = bus.read_word_data(dev_add, 0) # read one word from device 0x76 register 0

Fehlermeldung:
Traceback (most recent call last):
File "PCA2.py", line 15, in <module>
value = bus.read_word_data(dev_add, 0) # read one word from device register 0
File "/persistent/spv3/smbus2.py", line 396, in read_word_data
ioctl(self.fd, I2C_SMBUS, msg)
OSError: [Errno 5] Input/output error

Dazu kommt, dass der Schreibbefehl nicht immer funktioniert. Es ist ganz sicher das Device 0x76 (mit i2cdetect 1 überprüft). Dieser Befehl funktioniert auch ohne Probleme.

Ich habe gesehen, dass es einen Pythontreiber PCA95XX.py gibt welcher smbus nutzt (bin aber unfähig dieses Modul zu finden, und zu kopieren).

LG

PS.: Sorry ist mein erster Beitrag, ich weiß nicht genau wie ich den Code vom Text hervorhebe.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Im vollständigen Editor gibt es ein Code Tag. Das ist der </> Button. Code markieren & drücken.

Zu deinem Problem: zu 99.9% ein Hardwareproblem. Ist der Bus gut genug mit pull-ups versehen? Sind die Verbindungen gut? Kabellänge im Rahmen? Etc. Oszillograph hilft beim debugging.
BackupMid
User
Beiträge: 2
Registriert: Donnerstag 6. Dezember 2018, 11:54

Super danke du hattest Recht. Mein Pull-up am Reset-Pin war nicht richtig gelötet!

Rein aus Interesse: wo liegt der Unterschied zwischen dem smbus und smbus2 Modul?
Lg
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Keine Ahnung. Haben die keine Doku? Die würde ich jetzt selbst auch lesen müssen.
Antworten