salut
pour mon projet je doit contrôler un PCA9532 avec un pic18F452,et comme j'ai pas encore le PCA9532 j'ai commencer à faire des test sur un PCA9535 mais j'arrive pas avec la liaison I2C voila mon code :
#include <p18f452.h> //for ports declarations
#include <delays.h> //for delay routines
#include <i2c.h> //gestion de la communication I2C
#define TRIS_RC3 TRISCbits.TRISC3
#define TRIS_RC4 TRISCbits.TRISC4
#define ledACK PORTAbits.RA0
#define TRIS_ledACK TRISAbits.TRISA0
#define ledNAK PORTAbits.RA1
#define TRIS_ledNAK TRISAbits.TRISA1
/////////////////////////////////////////////////////////////////////////////
// //
// Fonctions //
// //
/////////////////////////////////////////////////////////////////////////////
//from T. Cremel
unsigned char envoyer_i2c(unsigned char addr, unsigned char commande, unsigned char data1, unsigned char data2)
{
IdleI2C();
StartI2C();
IdleI2C();
putcI2C(addr&0xFE);
IdleI2C();
if ( SSPCON2bits.ACKSTAT ) // test received ack bit state
{
StopI2C();
return 0; // bus device responded with NOT ACK
}
putcI2C(commande);
IdleI2C();
if ( SSPCON2bits.ACKSTAT ) // test received ack bit state
{
ledNAK = 1;
StopI2C();
return 0; // bus device responded with NOT ACK
}
putcI2C(data1);
IdleI2C();
putcI2C(data2);
IdleI2C();
StopI2C();
return 1;
}
/////////////////////////////////////////////////////////////////////////////
// //
// Fonction Principale //
// //
/////////////////////////////////////////////////////////////////////////////
void main (void)
{
//On désactive l'acquisition analogique
ADCON1=6;
TRIS_RC3 = 1;
TRIS_RC4 = 1;
TRIS_ledACK = 0;
TRIS_ledNAK = 0;
ledACK = 0;
ledNAK = 0;
OpenI2C(MASTER, SLEW_OFF);
// SSPADD = 99; //100KHz sous 40MHz
while(1)
{
if(envoyer_i2c(0x40,0x07,0xFF, 0x01)) //Si l'esclave envoie un ack, on allume la led ACK
ledACK = 1;
else
ledNAK = 1;
Delay10KTCYx(0);
Delay10KTCYx(0);
ledACK = 0;
ledNAK = 0;
}
}
//config du PIC
#pragma config OSC = HSPLL
#pragma config PWRT = ON
#pragma config WDT = OFF
#pragma config BOR = ON
#pragma config BORV = 42
#pragma config LVP = OFF
si quelqu'un peut me aider ou me montre mon erreur le problème que la ledACK s'allume mais rien ne passe et je comprend pas pourquoi
merci
-----