Orologio Nixie: 3 – RTC ed expander

by luca
13 comments

Arduino

Il primo sketch mostrerà come comandare le uscite dell’integrato PCF8575.

Per visualizzare lo stato delle singole uscite, ho collegato un LED ad ognuna di esse. L’integrato non è in grado di fornire (modalità source) sufficiente corrente per alimentare un LED, è quindi necessario un collegamento in modalità sink, ovvero con la corrente che “entra” nel PIN:

In questo caso quindi il LED sarà acceso quando il PIN sarà a massa, ovvero a livello logico 0.

Vediamo come comandare le uscite:

  1. scriviamo, partendo dall’uscita P7 fino all’uscita P0, lo stato desiderato (0 oppure 1), ad esempio: 10110000;
  2. facciamo lo stesso per le uscite dalla P17 alla P10: 10110000 01011101;
  3. (per comodità) convertiamo le due parti in esadecimale: B0 5D;
  4. inviamo i due valori trovati all’integrato.

Il bus I2C consente di collegare più dispositivi; perché i comandi arrivino al dispositivo corretto, è necessario introdurre il concetto di indirizzo. Ogni dispositivo I2C ha un indirizzo di fabbrica; per il chip PCF8575 tale indirizzo è 0x20 (32 in decimale). Collegando a massa o a Vcc i PIN A0, A1 e A2 è possibile modificare tale indirizzo:

Se ad esempio colleghiamo A0 a massa e A1, A2 a Vcc, l’indirizzo sarà 0100110 ovvero 0x26. La modifica dell’indirizzo di fabbrica consente di collegare più integrati dello stesso tipo ad un singolo bus I2C.

Una volta stabilito l’indirizzo, possiamo inviare i comandi con il seguente codice:

#include <Wire.h>
#define PCF8575_ADDRESS  0x20
...
Wire.beginTransmission(PCF8575_ADDRESS);
Wire.write(0xB0);
Wire.write(0x5D);
Wire.endTransmission();

Utilizzando gli stessi comandi, ho preparato uno sketch che accende a rotazione i 16 LED:

[youtube id=”UXPuzbEV_ic” width=”600″ height=”350″]
Nella prossima pagina vedremo un esempio di utilizzo di entrambi i moduli…

Related Posts

13 comments

pitchoilcan 6 aprile 2012 - 06:19

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?

Reply
luca 10 aprile 2012 - 08:07

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?

Reply
pitchoilcan 6 aprile 2012 - 07:15 Reply
Fernando Garcia 25 dicembre 2012 - 18:27

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:
[…]

Reply
Fernando Garcia 25 dicembre 2012 - 18:43

The code does not appear correctly.

Here’s a link to it.

https://gist.github.com/21dfdc057cfbd1cc44a9/5e7c42002b4025b9d48a21896d81c9a6bd74cbba

Best regards.

Reply
luca 11 gennaio 2013 - 08:32

Hi Fernando,

are you using an Arduino Mega?

Reply
lucadentella.it – Macchina a stati finiti e Arduino 30 aprile 2013 - 21:27

[…] Per leggere l’orario dal modulo RTC, ho scelto la libreria RTCLib fornita da Adafruit, già usata in un precedente post. […]

Reply
Dmitry 19 marzo 2015 - 09:15

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.

Reply
luca 19 marzo 2015 - 11:15

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!

Reply
DRS 30 novembre 2015 - 11:50

Hi, where i can read more about power supply ?
Thx.

Reply
luca 1 dicembre 2015 - 11:23 Reply
Mauro 6 settembre 2016 - 10:07

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 ?

Reply
Mauro 19 ottobre 2016 - 14:57

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

Reply

Rispondi a Fernando Garcia Cancel Reply

10 − quattro =