User manual
43 44
6.3 I2C Bus und IO Port Baustein LOW Activ
Der 8574 hat open drain Ausgänge mit einem ganz weichen pullup (100uA) nach +5V. Daher ist es eigentlich
besser, Lasten nach 0V ziehen zu lassen, und nicht wie vorher auf einen hohen Pegel. Hier eine trickreiche
Schaltung dazu. Die LEDs sind mit der Kathode an die Ausgänge des Treibers geschaltet. Nun benötigt man
noch eine positive Versorgungsspannung für die Anoden. Dazu werden zwei Ausgänge des Nano verwendet,
die auf High programmiert sind und damit 5V liefern. Achtung: nicht die 9V der Spannungsquelle zur Versor-
gung der LEDs verwenden, dies könnte den 8574 beschädigen.
+
-
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
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_14 I2C - IO Port 8574AT und 8574T Lowpulse
#include <Wire.h>
#include <avr/pgmspace.h>
#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
// ACHTUNG: hier Zuordnung setzen je nach DILSCHALTER !
#dene myi2cIOadr i2cIO8574A_0 // wir nehmen den 0x70
#dene PULLUP2 2 // Kleiner Trick am Port 2 und 3
#dene PULLUP3 3 // bekommen wir 5V (40mA maximal!)
void setup() {
pinMode(PULLUP2, OUTPUT); // PD2 und PD3 brauchen wir als Ausgang
pinMode(PULLUP3, OUTPUT); // muss man dann noch auf High stellen
digitalWrite(PULLUP2,HIGH); // damit sie beide 5V liefern
digitalWrite(PULLUP3,HIGH); // schnell schnell, da sonst Kurzschluss
Wire.begin(); // I2C aktiviern
}
void loop() {
Wire.beginTransmission(myi2cIOadr); // Dann wie gehabt starten
Wire.write(0x55) ; // IO Ports auf 01010101 abwechseln
Wire.endTransmission(); // Ende
delay(100); // 10ms Verzoegerung
Wire.beginTransmission(myi2cIOadr); // ncohmal starten
Wire.write(0xaa) ; // IO Ports auf 10101010 im Wechsel
Wire.endTransmission(); // und wieder Stopbit
delay(100); // nochmal 100ms Warten fuer Blinkeffekt
}
LED
LED
Was passiert? Die LEDs blinken abwechseln im Se-
kundentakt.
Wenn sie nicht blinken, zuerst die Adress-Einstellun-
gen an den DIL-Schaltern kontrollieren !










