Go Down

Topic: [Risolto] Invio dati i2c su PCF8574 (Read 4827 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

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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy