Forum: Mikrocontroller und Digitale Elektronik PCA9555 Frage


von Max S. (schuby)


Lesenswert?

Hallo, ich schlage mich gerade mit einen PCA9555 rum
Ich habe alle beide Ports als Eingänge gecodet

//PCAaddr = $27   = 100111
TWIoutC(PCAaddr, $6, $FF);   //FF=input 00=Output
TWIoutC(PCAaddr, $7, $FF);   //FF=input 00=Output

Wenn ich den ersten Eingang von Port 0 auf Masse ziehe, bekomme
ich eine 1 als ergebnis.

Wenn ich den ersten Eingang von Port 0 auf Plus 3,3Volt ziehe,
bekomme ich eine 0 zurück

TWIoutC(PCAaddr, InputPort0);
TWIinpC(PCAaddr, byt);

Sind die eingänge von den Ports nur auf Masse bezogen ?
Ich verstehe es nicht, es müsste doch Port0_pin0 = VCC = 1 sein
und nicht eine 0


mfg Schuby

von Clemens L. (c_l)


Lesenswert?

Das sieht so aus, als ob du in Register 4/5 (Polarity Inversion) 
geschrieben hättest.

von Max S. (schuby)


Lesenswert?

Hallo, das habe ich mir auch schon gedacht, ist es aber nicht
Ich habe jetzt den Pin1 von Port0 auf Masse gezogen.
ich bekomme eine 2 zurück.

TWIoutC(PCAaddr, $4, $00);   //
TWIoutC(PCAaddr, $5, $00);   //
TWIoutC(PCAaddr, $6, $FF);   //FF=input 00=Output
TWIoutC(PCAaddr, $7, $FF);   //FF=input 00=Output

Hierbei bekomme ich eine 253 zurück.

TWIoutC(PCAaddr, $4, $FF);   //
TWIoutC(PCAaddr, $5, $FF);   //
TWIoutC(PCAaddr, $6, $FF);   //FF=input 00=Output
TWIoutC(PCAaddr, $7, $FF);   //FF=input 00=Output

Und damit eine 2

Tja ich verstehe es auch nicht mehr.


mfg schuby

von Clemens L. (c_l)


Lesenswert?

Ich hätte noch vermutet, das ein floatender Eingang merkwürdige Effekte 
hat, aber die Eingänge des PCA9555 haben interne Pullups.

Und mit den Pullups müssten alle offenen Eingänge 1 liefern.

Kannst du die anderen Register korrekt lesen?
Oder ist das ein chinesischer Klon, der die Polarity-Inversion-Register 
falsch herum implementiert hat?

von Max S. (schuby)


Lesenswert?

Hallo Clemens,
alle beide Ports sind auf eine Stiftleiste gelegt,
es sind keine pullup Widerstände angeschlossen.

Wenn ich die beiden Ports als Ausgang Programmiere
ist alles ok, ich kann ein Bit setzen und der Ausgang wird high.

Nur wenn ich alle beide Ports auf Eingang Programmiere, bekomme ich 
einen
wert wenn ich den Eingang auf Masse ziehe. Ich verstehe es nicht mehr.
Ich glaube schon fast du hast recht und ich habe so einen China
Chip. Das ist nicht mein erster I2C Chip den ich Programmiere.

PS: Register zb. Config Reg. 6 oder 7 kann ich auslesen

mfg Schuby

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.