Arduino
The first sketch is about how to control PCF8575 PINs.
I connected a LED to each PIN to show its state. This IC can’t provide (source mode) enougth current to power on a LED, you need to connect the LED in sink mode, with current flowing from Vcc into the PIN:
With this connection, the LED will be on when IC PIN is connected to ground, that is logical level 0.
Let me show you how to control PIN states:
- write, starting from P7 to P0, the required logical stage (0 or 1), for example: 10110000;
- do the same for PINs from P17 to P10: 10110000 01011101;
- (for convenience) convert the two numbers in hexadecimal: B0 5D;
- send the two values to the expander.
I2C bus allows to connect more than two devices: when you send commands on the bus, you have to specify the target’s address. Every I2C device has a builtin address; for PCF8575 that address is 0x20 (decimal 32). If you connect to ground or Vcc PINs A0, A1 e A2 you can change its address:
For example, if you connect A0 to ground and A1, A2 to Vcc, the resulting address is 0100110 = 0x26. If you change the builtin address, you can connect more than one IC of the same type on the same I2C bus.
After having set the address, you can send commands and data with the following code:
#include <Wire.h> #define PCF8575_ADDRESS 0x20 ... Wire.beginTransmission(PCF8575_ADDRESS); Wire.write(0xB0); Wire.write(0x5D); Wire.endTransmission(); |
I wrote a simple sketch to light up 16 LEDs with a rolling animation:
In the next page, an Arduino working with both modules…
I get :error:
PCF8575_Led_rolling_Demo.cpp: In function ‘void loop()’:
PCF8575_Led_rolling_Demo.cpp:24:8: error: ‘class TwoWire’ has no member named ‘write’
PCF8575_Led_rolling_Demo.cpp:25:8: error: ‘class TwoWire’ has no member named ‘write’
I able to compile by change it for
Wire.write(low);
Wire.write(high);
to
Wire.send(low);
Wire.send(high);
but still now a blink from any of the LED’s. Are you using any resistor? I”ve tryed it using just the pcf8575 anf an arduino board, no RTC module. Is that doable and if so what I’m I doing wrong?
Hi
You’re probably using an older (< 1.0) version of Arduino IDE... anyway you don't need a RTC module for this example, could you post your connections so I can check?
Cool demo. I have some questions http://arduino.cc/forum/index.php/topic,100097.msg750764.html#msg750764
Hello!
I’m trying to build a circuit with a RTC and a PCF8575 .
It happens that the RTC does not tell the correct time.
There must be some conflict.
The code I’m using to test is this:
[…]
The code does not appear correctly.
Here’s a link to it.
https://gist.github.com/21dfdc057cfbd1cc44a9/5e7c42002b4025b9d48a21896d81c9a6bd74cbba
Best regards.
Hi Fernando,
are you using an Arduino Mega?
Hello Luca.
Thanx for your manual!
Could you advise IO extender on 24 pins (for 6 tubes)?
I’ve found the Tca6424rgjr but probably there is something better.
Hi Dmitry… it depends on you: on the I2C bus you can connect more than one expander, therefore you can use 3 8-pins expanders or the one you found that works fine!
Hi, where i can read more about power supply ?
Thx.
Hi, please see this blog post -> http://www.lucadentella.it/2011/11/20/orologio-nixie-1-lalimentatore/
Ciao Luca,
non riesco a compilare NESSUN esempio che utilizza il pcf8575!
Ho scaricato le librerie da github le istallo ma gli esempi Blinkled non si compilano . dice che manca il file PCG8575.h.
Ho cercato altre libreria MA IN TUTTO L’UNIVERSO ESISTONO SOLO QUELLE SU GITHUB CHE NON FUNZIONANO !!
Dove sbaglio ?
Devo usare tre 8575 in I2C e collegare ai pin digitali 2 e 3 di Arduino Nano il modulo Bluetooth HC-06 .
Le librerie 8575.h e SoftwareSerial.h sembra che non possano convivere assieme.
Con qualsiasi IDE con cui cerco di compilare mi da sempre:
SoftwareSerial\SoftwareSerial.cpp.o: In function `__vector_3′:
\\Srv01\dati\Comune\Arduino\IDE_ARDUINO\arduino-1.5.8\hardware\arduino\avr\libraries\SoftwareSerial/SoftwareSerial.cpp:306: multiple definition of `__vector_3′
PCF8575\PCF8575.cpp.o:\\Srv01\dati\Comune\Arduino\IDE_ARDUINO\arduino-1.5.8\libraries\PCF8575/PCint.h:104: first defined here
SoftwareSerial\SoftwareSerial.cpp.o: In function `__vector_4′:
\\Srv01\dati\Comune\Arduino\IDE_ARDUINO\arduino-1.5.8\hardware\arduino\avr\libraries\SoftwareSerial/SoftwareSerial.cpp:313: multiple definition of `__vector_4′
PCF8575\PCF8575.cpp.o:\\Srv01\dati\Comune\Arduino\IDE_ARDUINO\arduino-1.5.8\libraries\PCF8575/PCint.h:107: first defined here
SoftwareSerial\SoftwareSerial.cpp.o: In function `__vector_5′:
\\Srv01\dati\Comune\Arduino\IDE_ARDUINO\arduino-1.5.8\hardware\arduino\avr\libraries\SoftwareSerial/SoftwareSerial.cpp:320: multiple definition of `__vector_5′
PCF8575\PCF8575.cpp.o:\\Srv01\dati\Comune\Arduino\IDE_ARDUINO\arduino-1.5.8\libraries\PCF8575/PCint.h:110: first defined here
collect2: error: ld returned 1 exit status
Errore durante la compilazione