Go Down

Topic: [Risolto] Invio dati i2c su PCF8574 (Read 4351 times) previous topic - next topic

Jul 20, 2012, 06:47 pm Last Edit: Aug 13, 2012, 10:28 pm by igor97 Reason: 1
Salve a tutti, sto smanettando con questi integrati http://www.ti.com/lit/ds/symlink/pcf8574.pdf
anche per impararae meglio la comunicazione i2c.
-Io sui registri normali (74hc595) ero abituato a inviare il byte tramite shiftOut.
ora per inviare i dati deo usare Wire.write ma non posso mettere tra le parentesi il byte direttamente se prim non lo passo tramite una variabile (questione 1)
-volevo inviare anche un byte attraverso la seriale ma no funziona o meglio vengoo inviati numeri a casaccio.(questione 2)
-il pin INT dell'ic a cosa serve?(questione 3)

lo sketch per il controllo da seriale è questo:
Code: [Select]

#include <Wire.h>
void setup()
{
Serial.begin(115200);
Wire.begin();
}

void loop()
{
Wire.beginTransmission(32);
if (Serial.available()>0)
{
Wire.write(Serial.read());
}
Wire.endTransmission();
}

PaoloP

Ho fatto qualche ricerca, ti allego i link.
--> http://www.practicalmaker.com/blog/arduino-reading-pcf8574-pins-inputs
--> http://skyduino.wordpress.com/librairie-arduino-pcf8574-pcf8575/
--> per i PIC, ma spiega bene il funzionamento --> http://www.laurtec.it/brief-notes/programmazione-pic/125-bn0013-it-pcf8574-i2c-io-expander-libreria-ed-utilizzo

grazie mille paolo, ma se ho capito bene quegòi expander posso usarli anche come shiftin?

PS: finalmente una risposta  :smiley-mr-green:
Igor

PaoloP


grazie mille paolo, ma se ho capito bene quegòi expander posso usarli anche come shiftin?


Boh!! Controlla nel Datasheet.  :smiley-roll-blue:

appena mi arrivano qualche altro componente da utilizzare su quei registri li sudierò meglio. grazie comunque dei link molto interessanti ;)
Igor

uwefed


grazie mille paolo, ma se ho capito bene quegòi expander posso usarli anche come shiftin?

PS: finalmente una risposta  :smiley-mr-green:
Igor

Nel PCF8574 puoi selezionare ogni pin singolarmente se lo vuoi come entrata o uscita. Inoltre c'é un uscita che si puó usare come fonte di interrupt che viene triggerato sia sul fianco discendente che su quello L-H di tutti le entrate.

Ciao Uwe



grazie mille paolo, ma se ho capito bene quegòi expander posso usarli anche come shiftin?

PS: finalmente una risposta  :smiley-mr-green:
Igor

Nel PCF8574 puoi selezionare ogni pin singolarmente se lo vuoi come entrata o uscita. Inoltre c'é un uscita che si puó usare come fonte di interrupt che viene triggerato sia sul fianco discendente che su quello L-H di tutti le entrate.

Ciao Uwe

ah ecco, puoi spiegarmi meglio l'utilizzo di quel pin? non ho ben capito per la mia ignornza  :smiley-sweat:

acik

Senti ma... prova cosi:
Collega i tre pin di indirizzo del PCF8594 a massa.
Poi compila e invia questo sketch.

Code: [Select]

#include <Wire.h>
void setup()
{
Serial.begin(115200);
Wire.begin();
}
void loop()
{
if (Serial.available()>0)
{
int data = Serial.read();
Wire.beginTransmission(56);
Wire.send(data);
Wire.endTransmission();
}
}


Senti ma... prova cosi:
Collega i tre pin di indirizzo del PCF8594 a massa.
Poi compila e invia questo sketch.

Code: [Select]

#include <Wire.h>
void setup()
{
Serial.begin(115200);
Wire.begin();
}
void loop()
{
if (Serial.available()>0)
{
int data = Serial.read();
Wire.beginTransmission(56);
Wire.send(data);
Wire.endTransmission();
}
}


grazie mille e scusa il ritardo.
purtroppo questo sketch è come quello che avevo fatto io. risultati: nessuno.
mettendo dei print ho scoperto che i dati inviati eranosemre gli stessi (tipo 51 52 55 decimale)

PS: l'indirizzo è sbagliato. mettendo a0-1-2 a massa l'indirizzo è 32 (Decimale)  e 0x20(esadecimale) ;)
Igor

acik


purtroppo questo sketch è come quello che avevo fatto io. risultati: nessuno.

Aehm..... a me funziona  ]:D

Quel codice e quell' indirizzo !



purtroppo questo sketch è come quello che avevo fatto io. risultati: nessuno.

Aehm..... a me funziona  ]:D

Quel codice e quell' indirizzo !

trovato il prolema :P il tuo è un pcf8594 (ma sei sicuro? così hai scritto)
vabbe stasera rifarò una prova

acik


acik

Ti giro un altro bel codice fatto da me:

Code: [Select]
#include <Wire.h>
const int pausa = 100;
int n = 1;
int s = 1;

void setup() {
  Wire.begin();
  pcf8574(0);
}

void loop() {
  pcf8574(n);
  if (s == 1){  n = n * 2;}
  else {n = n / 2;}
  delay(pausa);
  if (n == 128) { s = 0; }
  if (n == 1) { s = 1; }
}

void pcf8574(byte data ) {
  Wire.beginTransmission(56);
  Wire.send(data);
  Wire.endTransmission();
}

acik

Ah.... forse ho trovato l' inghippo !

Quote
the PCF8574 has as address 0100xxx, while the PCF857A has 0111xxx.



Ah.... forse ho trovato l' inghippo !

Quote
the PCF8574 has as address 0100xxx, while the PCF857A has 0111xxx.



infatti, il mio è pcf8574n.
vabbe mo provo

Go Up