Go Down

Topic: [Risolto] Problema con PCF8574AP (Read 915 times) previous topic - next topic

gengysghey

Mar 29, 2013, 11:07 pm Last Edit: Mar 29, 2013, 11:17 pm by Giuseppe G. Reason: 1
Un saluto a tutti.

Mi sapreste aiutare a risolvere questo problema ?

Non riesco a capire perchè non funziona il PCF8574AP collegato ai pin SDA ed SCL rispettivamente ai pin A4 ed A5 di arduino con la comunicazione I2C.

Mi spiego.
Il circuito legge 8 ingressi digitali collegati al primo PCF8574AP configurato in ingresso e rispettivamente il secondo PCF8574A configurato in uscita ha collegato 8 led.
Alla pressione del tato 1 si deve accendere il led 1, 2 il led 2 e così via.

Tutto bene fino al tasto 4, dopo tutto un casino.

Ho notato che in ingresso, vengono letti tutti gli ingressi correttamente, mentre per le uscite, il valore corretto che viene gestito si ferma a 14, dopo di chè non comprendo perchè le uscite con peso binario 16 e 32 sono sempre attive e quelle con peso 32 e 64 sempre spente.


Il codice utilizzato è il seguente:
Quote

// test in-out PCF8574AP

#include<Wire.h>

byte x=0;
byte y=0;

void setup()
{
   Wire.begin();
   Serial.begin(9600);
}

void loop()
{

 Wire.requestFrom(0x3A,1);
   if(Wire.available())              //If the request is available
   {
       x=Wire.read();                //Receive the data
   }
   if(x<255)                         //If the data is less than 255
   {
       if (x==0) { y = 0; }; //null
       if (x==1) { y = 1; }; //P1
       if (x==2) { y = 2; }; //P2
       if (x==4) { y = 4; }; //P3
       if (x==8) { y = 8; }; //P4
       if (x==16) { y = 16; }; //P5        
       if (x==32) { y = 32; }; //P6
       if (x==64) { y = 64; }; //P7
       if (x==128) { y = 128; }; //P8        
   }
   Wire.beginTransmission(0x3B);      //Begin the transmission to PCF8574
   Wire.print(y);                     //Send the data to PCF8574
   Wire.endTransmission();            //End the Transmission
 Serial.println(y);
}


Grazie per l'attenzione.
Un saluto a tutta la comunità.
Giuseppe G.

gengysghey

:smiley-mr-green:

Scusatemi, ho risolto.

Avevo sbagliato il comando di scrittura.

Lascio comunque la soluzione, anche se mi sento un pò ridicolo per l'errore.

Se i moderatori del forum ritengono che questo sia obsoleto, possono cancellarlo.


Correzione sul comando "wire.print":

Code: [Select]

// test in-out PCF8574AP

#include<Wire.h>

byte x=0;
byte y=0;

void setup()
{
   Wire.begin();
   Serial.begin(9600);
}

void loop()
{

 Wire.requestFrom(0x3A,1);
   if(Wire.available())              //If the request is available
   {
       x=Wire.read();                //Receive the data
   }
   if(x<255)                         //If the data is less than 255
   {
       if (x==0) { y = 0; }; //null
       if (x==1) { y = 1; }; //P1
       if (x==2) { y = 2; }; //P2
       if (x==4) { y = 4; }; //P3
       if (x==8) { y = 8; }; //P4
       if (x==16) { y = 16; }; //P5        
       if (x==32) { y = 32; }; //P6
       if (x==64) { y = 64; }; //P7
       if (x==128) { y = 128; }; //P8        
   }
   Wire.beginTransmission(0x3B);      //Begin the transmission to PCF8574
   Wire.print(y,0);                     //Send the data to PCF8574
   Wire.endTransmission();            //End the Transmission
 Serial.println(y);
}


La riga corretta è la seguente:

   Wire.print(y,0);                     //Send the data to PCF8574

gli esempi che ho trovato su internet, non evidenziavano questo aspetto "wire.print(y, 0);", ma solo "wire.print(y);" in particolare il codice che vedete l'ho copiato pari da un esempio.

Lascio per scontato che gli esempi che si trovano nelle descrizioni delle librerie, siano testati. Da qui, il problema.


Un saluto a tutta la comunità.
Giuseppe G.

Go Up