vinay shabad
Junior Member level 3

hiii everyone, i am working on SHT21 sensor using I2C
i am unable to read the values from sensor please need help where i am going wrong ,correct my programme .It will be very help full if u have any code or suggestion to work on
here is my code
#include <P24F16KA102.h>
#include "I2CM1.h"
#include "displayM1.h"
void initI2CportSHT2X() {
TRISBbits.TRISB5 = 1; // Digital Output (make it input only when reading data. see spi)
// PORTBbits.RB5 = 1;
TRISBbits.TRISB6 = 1; // Digital Output
// PORTBbits.RB6 = 1;
// I2C1CON = 0x28; // enable I2C Master mode
//I2C1CON2 = 0x00; // clear control bits
I2C1STAT = 0x4014; // disable slew rate control; disable SMBus
//I2C1ADD = 19; // set baud rate to 100 kHz (Fosc = 48 MHz)
IFS1bits.MI2C1IF = 0;
IEC1bits.MI2C1IE = 0;
}
void config_i2c1_write(){
unsigned char value;
I2C1CON=0b1001000000111111;
//I2C1BRG=39;
//__________________________________________________________________________________
IdleI2C1();
StartI2C1();
/* Wait till Start sequence is completed */
while(I2C1CONbits.SEN);
/* Clear interrupt flag */
IFS1bits.MI2C1IF = 0;
/*send Slaveaddress for write*/
MasterWriteI2C1(0x80);//9f
while(I2C1STATbits.TBF); // 8 clock cycles
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
// while(I2C1STATbits.ACKSTAT); // Wait for the ack bit
/*send REGaddress for write*/
MasterWriteI2C1(0xE6);//9f
while(I2C1STATbits.TBF); // 8 clock cycles
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
// while(I2C1STATbits.ACKSTAT); // Wait for the ack bit
/*send Dataaddress for write*/
MasterWriteI2C1(0xE5);//9f
while(I2C1STATbits.TBF); // 8 clock cycles
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
//while(I2C1STATbits.ACKSTAT); // Wait for the ack bit
StopI2C1();
//_____________________________________________________________________________
IdleI2C1();
RestartI2C1();
/*send adress for read*/
MasterWriteI2C1(0x81);//9f
while(I2C1STATbits.TBF); // 8 clock cycles
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
// while(I2C1STATbits.ACKSTAT); // Wait for the ack bit
value = MasterReadI2C1();
while(I2C1STATbits.RBF); // 8 clock cycles
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
//___________________________________________
AckI2C1();
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
NotAckI2C1();
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
StopI2C1();
return;
}
please help me i struck at this point
i am unable to read the values from sensor please need help where i am going wrong ,correct my programme .It will be very help full if u have any code or suggestion to work on
here is my code
#include <P24F16KA102.h>
#include "I2CM1.h"
#include "displayM1.h"
void initI2CportSHT2X() {
TRISBbits.TRISB5 = 1; // Digital Output (make it input only when reading data. see spi)
// PORTBbits.RB5 = 1;
TRISBbits.TRISB6 = 1; // Digital Output
// PORTBbits.RB6 = 1;
// I2C1CON = 0x28; // enable I2C Master mode
//I2C1CON2 = 0x00; // clear control bits
I2C1STAT = 0x4014; // disable slew rate control; disable SMBus
//I2C1ADD = 19; // set baud rate to 100 kHz (Fosc = 48 MHz)
IFS1bits.MI2C1IF = 0;
IEC1bits.MI2C1IE = 0;
}
void config_i2c1_write(){
unsigned char value;
I2C1CON=0b1001000000111111;
//I2C1BRG=39;
//__________________________________________________________________________________
IdleI2C1();
StartI2C1();
/* Wait till Start sequence is completed */
while(I2C1CONbits.SEN);
/* Clear interrupt flag */
IFS1bits.MI2C1IF = 0;
/*send Slaveaddress for write*/
MasterWriteI2C1(0x80);//9f
while(I2C1STATbits.TBF); // 8 clock cycles
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
// while(I2C1STATbits.ACKSTAT); // Wait for the ack bit
/*send REGaddress for write*/
MasterWriteI2C1(0xE6);//9f
while(I2C1STATbits.TBF); // 8 clock cycles
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
// while(I2C1STATbits.ACKSTAT); // Wait for the ack bit
/*send Dataaddress for write*/
MasterWriteI2C1(0xE5);//9f
while(I2C1STATbits.TBF); // 8 clock cycles
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
//while(I2C1STATbits.ACKSTAT); // Wait for the ack bit
StopI2C1();
//_____________________________________________________________________________
IdleI2C1();
RestartI2C1();
/*send adress for read*/
MasterWriteI2C1(0x81);//9f
while(I2C1STATbits.TBF); // 8 clock cycles
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
// while(I2C1STATbits.ACKSTAT); // Wait for the ack bit
value = MasterReadI2C1();
while(I2C1STATbits.RBF); // 8 clock cycles
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
//___________________________________________
AckI2C1();
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
NotAckI2C1();
while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
IFS1bits.MI2C1IF = 0; // Clear interrupt flag
StopI2C1();
return;
}
please help me i struck at this point