Forum: Mikrocontroller und Digitale Elektronik I2C PCF8574T schaltet permanent - warum auch immer?!


von MOBA 2. (Gast)


Lesenswert?

Hallo Forumsmitglieder;

ich habe ein Problem mit den I²C-Expandern PCF8574A(T).

Die AT laufen einwandfrei; auf die gleiche Hardware habe ich einmal A 
und AT-Versionen eingelötet; da die AT einwandfrei auf den 
Adressbereichen funktionieren schließe ich einen allg. Hardwarefehler 
aus; da ich selber ätze kann natürlich mal eine Leiterbahn unterbrochen 
sein; deswegen habe ich auch das alles nachgemessen - funktioniert.

Probleme machen mir die A-Versionen, komischerweise.
Diese Adressen habe ich ermittelt (wird dann beim Senden nach links 
geschoben um ein Bit, das letzte ist 0==>write). Software muss auch 
funktionieren, da ich einfach nur die Adressen getauscht habe.

//Adressen der I/0 Expander (0-7 ist normal; 8-15 ist A-Prefix)
#define I2C_ADRS0  0x40
#define I2C_ADRS1  0x42
#define I2C_ADRS2  0x44
#define I2C_ADRS3  0x46
#define I2C_ADRS4  0x48
#define I2C_ADRS5  0x4B
#define I2C_ADRS6  0x4C
#define I2C_ADRS7  0x4E
#define I2C_ADRS8  0x38  //Ab hier AT
#define I2C_ADRS9  0x39
#define I2C_ADRS10  0x3A
#define I2C_ADRS11  0x3B
#define I2C_ADRS12  0x3C
#define I2C_ADRS13  0x3D
#define I2C_ADRS14  0x3E
#define I2C_ADRS15  0x3F

Die Adressen habe ich vergeben.

Ich habe bei allen A-Karten den gleichen Fehler; sobald eine Spannung 
anliegt, werden alle I/O Leitungen auf High gelegt, ob ich da nun was 
sende oder nicht spielt keine Rolle; genausowenig ob ich versuche diese 
auszuschalten (es ist auch egal, wie ich A0-A2 verschalte, also die 
Adresse).

Hoffe auf baldige Antwort :~

von Hubert G. (hubertg)


Lesenswert?

ICh nehme mal an du meinst PCF8574T und PCF8574AT, ist die SO16 Version.
Nach dem Datenblatt hat die PCF8574AT 0x7x als Slaveadresse.

von MOBA 2. (Gast)


Lesenswert?

Hallo Hubert,

die PCF 8574AT funktionieren, die 8574T machen es nicht.

ich habe für die AT-Versionen folgende Adressen:

#define I2C_ADRS8  0x38  //Ab hier AT
#define I2C_ADRS9  0x39
#define I2C_ADRS10  0x3A
#define I2C_ADRS11  0x3B
#define I2C_ADRS12  0x3C
#define I2C_ADRS13  0x3D
#define I2C_ADRS14  0x3E
#define I2C_ADRS15  0x3F

die müssen dann noch nach links geschoben werden; wie kommst du auf 
0x7x; ich verwende übrigends die I²C PCFs von NXP.

von tmomas (Gast)


Lesenswert?


von MOBA 2. (Gast)


Lesenswert?

Ich werde es testen mit 0x7x, aber lt. Nxp Datenblatt sind die AT 
Versionen 0111A1A2A3 R/W, so komme ich auf die oberen Adressen für den 
AT, welcher auch funktioniert.  Die ohne A-Prefix sind 0100A3A2A1 R/W, 
also 0x20 aufsteigend was aber auch nicht klappt :(.

von Hubert G. (hubertg)


Lesenswert?

Marius Dege schrieb:
> Ich werde es testen mit 0x7x, aber lt. Nxp Datenblatt sind die AT
> Versionen 0111A1A2A3 R/W, so komme ich auf die oberen Adressen für den
> AT, welcher auch funktioniert.  Die ohne A-Prefix sind 0100A3A2A1 R/W,
> also 0x20 aufsteigend was aber auch nicht klappt :(.

Das zählst du aber mächtig falsch.
0111 ergibt 7
A1A2A3R/W ergibt wenn Ax nicht gesetzt 0 oder 1 je nach R/W

Es wird nichts nach links geschoben.

von tmomas (Gast)


Lesenswert?

Siehe Datenblatt http://www.nxp.com/documents/data_sheet/PCF8574.pdf

Seite 9, Punkt 7.1, Fig. 10

Beachte die unterschiedliche Länge der geschweiften Klammer!

Gib beide Adressen mal in einen BIN-HEX Rechner ein.

Richtiges Beispiel für PCF8574A: 01110000 -> 0x70
Deine falsche Rechnung für PCF8574A: 0111000 -> 0x38

Beachte die längere Adresse für die A-Version!

von spess53 (Gast)


Lesenswert?

Hi

>Siehe Datenblatt http://www.nxp.com/documents/data_sheet/PCF8574.pdf

Warum kein aktuelles Datenblatt? Da stehen die Adressen sogar als Text:

http://www.nxp.com/documents/data_sheet/PCF8574_PCF8574A.pdf

MfG Spess

von Falk B. (falk)


Lesenswert?

@ Marius Dege (2009marius15)

>Die AT laufen einwandfrei; auf die gleiche Hardware habe ich einmal A
>und AT-Versionen eingelötet;

Es gibt keine A und AT, nur T oder AT, beide haben das SO16 Gehäuse.
T und AT unterscheiden sich nur in den Basisadressen. Steht auch so im 
Artikel.

von MOBA 2. (Gast)


Lesenswert?

Ich danke euch! Meinte natürlich die T und AT Versionen in SMD.
1
#define I2C_ADRS0  0x20
2
#define I2C_ADRS1  0x21
3
#define I2C_ADRS2  0x22
4
#define I2C_ADRS3  0x23
5
#define I2C_ADRS4  0x24
6
#define I2C_ADRS5  0x25
7
#define I2C_ADRS6  0x26
8
#define I2C_ADRS7  0x27
9
#define I2C_ADRS8  0x38  //Ab hier AT
10
#define I2C_ADRS9  0x39
11
#define I2C_ADRS10  0x3A
12
#define I2C_ADRS11  0x3B
13
#define I2C_ADRS12  0x3C
14
#define I2C_ADRS13  0x3D
15
#define I2C_ADRS14  0x3E
16
#define I2C_ADRS15  0x3F

Die Adressen sind es nun - die AT habe ich richtig berechnet gehabt. Die 
normalen Adressen sind von 0x20-0x27; alle Adressen MÜSSEN noch 
geschoben und 0/1 angehängt werden.

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.