Pages: [1] 2 3   Go Down
Author Topic: [Risolto] Invio dati i2c su PCF8574  (Read 3600 times)
0 Members and 1 Guest are viewing this topic.
Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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();
}
« Last Edit: August 13, 2012, 03:28:13 pm by igor97 » Logged


Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7078
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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


Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7078
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

appena mi arrivano qualche altro componente da utilizzare su quei registri li sudierò meglio. grazie comunque dei link molto interessanti smiley-wink
Igor
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 257
Posts: 21460
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
#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();
}
}
Logged

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
#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) smiley-wink
Igor
Logged


Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

purtroppo questo sketch è come quello che avevo fatto io. risultati: nessuno.
Aehm..... a me funziona  smiley-twist

Quel codice e quell' indirizzo !
Logged

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

purtroppo questo sketch è come quello che avevo fatto io. risultati: nessuno.
Aehm..... a me funziona  smiley-twist

Quel codice e quell' indirizzo !
trovato il prolema smiley-razz il tuo è un pcf8594 (ma sei sicuro? così hai scritto)
vabbe stasera rifarò una prova
Logged


Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Io ho questo:

Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ti giro un altro bel codice fatto da me:

Code:
#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();
}
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Pages: [1] 2 3   Go Up
Jump to: