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
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
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>
#dene i2cIO8574_0 (0x40>>1) // Trick um elegant mit Bytes
#dene i2cIO8574_1 (0x42>>1) // zu arbeiten statt in 7 Bit
#dene i2cIO8574_2 (0x44>>1) // das letzte Bit ist das R/W
#dene i2cIO8574_3 (0x46>>1) // dass von der Arduino
#dene i2cIO8574_4 (0x48>>1) // Bibliothek dazugefuegt wird
#dene i2cIO8574_5 (0x4A>>1) // wir denieren hier alle
#dene i2cIO8574_6 (0x4C>>1) // Bereiche die man mit den
#dene i2cIO8574_7 (0x4E>>1) // Bricks einstellen kann,.
#dene i2cIO8574A_0 (0x70>>1) // Die Serie PCF8474AT
#dene i2cIO8574A_1 (0x72>>1) // beginnt bei Adresse
#dene i2cIO8574A_2 (0x74>>1) // 0x70 = 70 sedezimal
#dene i2cIO8574A_3 (0x76>>1) // 01110000 binaer
#dene i2cIO8574A_4 (0x78>>1) // oder intern 0111000
#dene i2cIO8574A_5 (0x7A>>1) // dabei 0111xxx
#dene i2cIO8574A_6 (0x7C>>1) // mit x fuer die
#dene i2cIO8574A_7 (0x7E>>1) // Dilschalterposition
// ACHTUNG: hier Zuordnung setzen je nach Schalterstellung
// ACHTUNG: hier Zuordnung setzen je nach DILSCHALTER !
#dene myi2cIOadr i2cIO8574A_0 // wir nehmen den 0x70
#dene PULLUP2 2 // Kleiner Trick am Port 2 und 3
#dene 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 !