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)
igor97:
grazie mille paolo, ma se ho capito bene quegòi expander posso usarli anche come shiftin?
PS: finalmente una risposta
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.
igor97:
grazie mille paolo, ma se ho capito bene quegòi expander posso usarli anche come shiftin?
PS: finalmente una risposta
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
acik:
Senti ma... prova cosi:
Collega i tre pin di indirizzo del PCF8594 a massa.
Poi compila e invia questo sketch.
#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
#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();
}
Aaaaaa !!!
Allora non dire "non funziona" ma "non fa quello che volevo"
Innanzitutto dovresti dire cosa invii alla seriale.
Come lo invii ?
Ad esempio, se usi Hyperterminal su Windows, e invii "1"... Hyperterminal inviera' il carattere "1", quindi il numero decimale 49, quindi il numero binario 00110001....