User manual
41 42
6.2 I2C Bus und IO Port Baustein
Der Bausteine PCF8574 ist ein sogenannter IO Extender. Der beinhaltet 8 IO Ports, die man als Ausgang aber
auch als Eingang verwenden kann. Den Baustein PCF8574 gibt es in zwei Ausführungen, den PCF8574T (40-4E)
und PCF8574AT (70-7E), dabei haben die beiden einen unterschiedlichen Adressbereich. Nach dem Öffnen des
Deckels, gibt es auf der Oberseite noch einen DIL-Schalter mit dem sich die Unteradresse einstellen lässt.
(40,42,44,46,48,4A,4C,4E). Achtung: Beim Aufsetzen des Deckels auf die Orientierung achten. Das kleine Drei-
eck auf der Oberseite kennzeichnet die entsprechende abgeschrägte Ecke bei der Platine! Wir nutzen bei den
Adressen die 8 Bit Zählweise. Beim I2C werden aber nur 7 Bit verwendet, wobei das untere das Schreibbit ist.
Daher werden die Adressen unten in der Tabelle in zweier Schritten gezählt. Der DIL-Schalter hat 4 Positionen,
wobei bei uns Position 4 unbelegt ist, somit sind bis zu 8 unterschiedliche Stellungen möglich.
Die Ausgänge vom PCF8574 haben aber eine Besonderheit, sie sind quasi bidirectional. Als open drain können
sie recht große Lasten auf 0V ziehen, aber auf high nur mit 100 uA nach +5V. Daher blinken die LEDs in diesem
Beispiel nur schwach. Immer wenn man ein hIgh Signal sendet, wird der Ausgang ganz kurz auf Versorgungs-
Spannungslevel hochgezogen, dann aber der Stromquelle überlassen. Dies ermöglicht einen quasi bidirektiona-
len Betrieb ohne zusätzliches Richtungsregister. Will man die LEDs heller leuchten lassen, muss man eine andere
Beschaltung verwenden.
+
-
9V
1A
+9V
8574AT
SCL
SCL
SDASDA
P0 P1
I²C PIO
P4 P2 P3 P5
P6 P7
D
ow
n
sid
e
Adr. 70-7E
LED
LED
SCLS DA
+9V
A0
A1
Tx
Rx
PD2
SCLKMOSI
PD3
PD 6
PD 4
PD 5
PD 7
A7
A3
A2
A6
NANO
to
Br ick`R`
3,3V 5V
USB
B0
SS
MISC
B1
I²C
DIL Schalter:
1234 8574T 8574AT
000x 40h 70h
001x 42h 72h
010x 44h 74h
011x 46h 76h
100x 48h 78h
101x 4Ah 7Ah
110x 4Ch 7Ch
111x 4Eh 7Eh
// DE_13 I2C - IO Port 8574AT und 8574T
#include <Wire.h> // Denitionen laden fuer I2C
#include <avr/pgmspace.h> // weitere Denitionen
// Alle Adressen bei den 8574xx bricks:
#dene i2cIO8574_0 (0x40>>1) // Trick um elegant mit Bytes
#dene i2cIO8574_1 (0x42>>1) // zu arbeiten statt in 7 Bit
#dene i2cIO8574_2 (0x44>>1) // das letzte Bit ist das R/W
#dene i2cIO8574_3 (0x46>>1) // dass von der Arduino
#dene i2cIO8574_4 (0x48>>1) // Bibliothek dazugefuegt wird
#dene i2cIO8574_5 (0x4A>>1) // wir denieren hier alle
#dene i2cIO8574_6 (0x4C>>1) // Bereiche die man mit den
#dene i2cIO8574_7 (0x4E>>1) // Bricks einstellen kann,.
#dene i2cIO8574A_0 (0x70>>1) // Die Serie PCF8474AT
#dene i2cIO8574A_1 (0x72>>1) // beginnt bei Adresse
#dene i2cIO8574A_2 (0x74>>1) // 0x70 = 70 sedezimal
#dene i2cIO8574A_3 (0x76>>1) // 01110000 binaer
#dene i2cIO8574A_4 (0x78>>1) // oder intern 0111000
#dene i2cIO8574A_5 (0x7A>>1) // dabei 0111xxx
#dene i2cIO8574A_6 (0x7C>>1) // mit x fuer die
#dene i2cIO8574A_7 (0x7E>>1) // Dilschalterposition
// ACHTUNG: hier Zuordnung setzen je nach Schalterstellung
#dene myi2cIOadr i2cIO8574A_0 // HIER PASSENDE ADRESSE EINTRAGEN
void setup() {
Wire.begin(); // I2C aktivieren !
}
void loop() {
Wire.beginTransmission(myi2cIOadr);// Startvorgang I2C Adresse
Wire.write(0x55) ; // IO POrts auf 01010101 abwechseln
Wire.endTransmission(); // Stop Kondition setzen bei I2C
delay(100); // 100 ms verzoegern.
Wire.beginTransmission(myi2cIOadr); // Nochmal die Adresse
Wire.write(0xaa) ; // IO POrts auf 10101010 im Wechsel
Wire.endTransmission(); // Stop Kondition setzen
delay(100); // 100 ms verzoegern.
}
Auszug aus dem Phillips Datenblatt zum PCF8574.
Wichtig ist die Logik rechts mit den beiden MOSFETS und
der 100µA Stromquelle, sowie dem einzelnen p-MOSFET der
kurzzeitig beim Setzen der Register auf 1 den Ausgang auf
VDD (=High) setzt
Was passiert? Die LEDs blinken abwechselnd im Sekunden-
takt.
Wenn sie nicht blinken, zuerst die Adress-Einstellungen an
den DIL-Schaltern kontrollieren !










