Communication I2C avec un MCP3421

Communication I2C avec un MCP3421 - C - Programmation

Marsh Posté le 12-03-2012 à 14:44:57    

Bonjour, J'ai un souci de communication avec mon MCP3421 18-Bit Analog-to-Digital Converter
Voila une parti du programme que j'ai écris pour communiquer avec l'i2C :
 
       printf((const far rom char *)"\n\n\n\n\n\n\n\n " );
 printf((const far rom char *)"\n\r/--------------------------------------------------------/\n" );
 printf((const far rom char *)"\n\r/---------------------- Test MCP3421 --------------------/\n" );
 printf((const far rom char *)"\n\r/--------------------------------------------------------/\n" );
 
 //Initialisation des différent tableau utilisé
 
 for(a = 0; a <= 3; a++)
 {
  valeur[a]=0;
 }
 
        //On met le MCP3421 en mode High Speed
 SSPCON2bits.SEN=1;
 while(PIR1bits.SSPIF==0);
 PIR1bits.SSPIF=0; // normalement il faudrait lire et traiter ACK
   
 SSPBUF=0x08;
 while(PIR1bits.SSPIF == 0);
 
 PIR1bits.SSPIF=0;
 SSPCON2bits.PEN=1;
 
 while(1)
 {  
 
 
 
  printf((const far rom char *)"\n\n\n\n\n\n" );
  for(a = 0; a <= 3; a++)
  {
    printf((const far rom char *)"\n\rValeur de valeur[%d] : %X \n",a,valeur[a]);
  }
 
  printf((const far rom char *)"\n\rLecture d'une nouvelle valeur du MCP3421 ?\n" );
  printf((const far rom char *)"\n\r1 - Oui lecture" );
  printf((const far rom char *)"\n\r2 - Non ecriture\n" );
  do
  {  
   data=RS232ReadByte();
  }while(data!='1' & data != '2');
  Emi_Rs232(data);
   
 
  /* Lecture */
  if(data=='1')
  {
   
   SSPCON2bits.SEN=1;
   while(PIR1bits.SSPIF==0);
   PIR1bits.SSPIF=0;  
   
   SSPBUF=0xD0;
   while(PIR1bits.SSPIF == 0);
   while(SSPCON2bits.ACKSTAT==1);//On attend ACK de MCP3421
   PIR1bits.SSPIF=0;  
   
   SSPCON2bits.RCEN=1;//1= Enables Receive mode for I2C On change le mode
 
   
 
   while(PIR1bits.SSPIF==0);
   valeur[0]=SSPBUF;//On charge ce que l'on recoi dans le tableau
   PIR1bits.SSPIF=0;  
   SSPCON2bits.ACKDT=0; //On dit que l'on veut un ack
   SSPCON2bits.ACKEN=1; //On envoi l'ack
 
   while(PIR1bits.SSPIF==0);
   valeur[1]=SSPBUF;
   PIR1bits.SSPIF=0;  
   SSPCON2bits.ACKDT=0;  
   SSPCON2bits.ACKEN=1;
 
   while(PIR1bits.SSPIF==0);
   valeur[2]=SSPBUF;
   PIR1bits.SSPIF=0;  
   SSPCON2bits.ACKDT=0;  
   SSPCON2bits.ACKEN=1;
 
   while(PIR1bits.SSPIF==0);
   valeur[3]=SSPBUF;
   PIR1bits.SSPIF=0;
   SSPCON2bits.ACKDT=1;  
   SSPCON2bits.ACKEN=1;
 
   while(PIR1bits.SSPIF==0);
   PIR1bits.SSPIF=0;
   SSPCON2bits.PEN=1;
   
  }  
  else if(data=='2')/* Ecriture */
  {
   IdleI2C();      // ensure module is idle
   StartI2C();
   IdleI2C();
   /* Envoie du 1er Octet "SLAVE ADRESS" : */
   WriteI2C(0b11010000);   // Send and Check SLAVE ADRESS, wait for it to complete
   
   /* Envoie du 2ème Octet "INSTRUCTION BYTE" : */
   IdleI2C();      // ensure module is idle
   WriteI2C(0b10001100);  // Send and Check INSTRUCTION BYTE, wait for it to complete
   IdleI2C();      // ensure module is idle
   
   StopI2C();
  }
}

 
Les valeurs que j'ai enregistrées sont 0xFF dans mon tableau. je ne comprend pas pourquoi il ne m'envoie rien. quelqu'un a déjà utilisé ce convertisseur et pourrai m'aider? Merci

Reply

Marsh Posté le 12-03-2012 à 14:44:57   

Reply

Marsh Posté le 12-03-2012 à 16:34:51    

C Bon j'ai trouvé. merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed