Ejemplo n.º 1
0
int RcvIMUData(unsigned int reg_addr) {
//	//see page 92 of https://www.adafruit.com/datasheets/BST_BNO055_DS000_12.pdf
   
    rcv = 0;
    StartI2C2();                //Send line start condition
    IdleI2C2();                 //Wait to complete
    MasterWriteI2C2(0x50);      //Write slave addr WRITE (OR 0)
    IdleI2C2();
    MasterWriteI2C2(reg_addr);      //BNO055_QUATERNION_DATA_W_LSB_ADDR
    IdleI2C2();             
  
    RestartI2C2();
    IdleI2C2();
    
    MasterWriteI2C2(0x51);      //Write the slave address, READ (OR 1)
    IdleI2C2(); 
    
    rcv |= MasterReadI2C2();    //Read in LSB
    IdleI2C2();       
    AckI2C2();
    IdleI2C2();
    rcv |= MasterReadI2C2()<<8;    //Read in MSB

    NotAckI2C2();
    IdleI2C2();
    StopI2C2();                 //Send line stop condition
    IdleI2C2();                 
    return rcv;  
    
}
Ejemplo n.º 2
0
/**
 * Reads temperature from IR sensor of an object in front of sensor
 * @return A hex value from 0x27AD (-70 ?C) to 0x7fff (382.19?C)
 */
int RcvIRTemp(void){
    rcv = 0;
    StartI2C2();                //Send line start condition
    IdleI2C2();                 //Wait to complete
    MasterWriteI2C2(0xb4);      //Write slave addr WRITE (OR 0)
    IdleI2C2();
    MasterWriteI2C2(0x07);      //0x07 = read RAM for TObj1 temperature
    IdleI2C2();             
  
    RestartI2C2();
    IdleI2C2();
    
    MasterWriteI2C2(0xb5);      //Write the slave address, READ (OR 1)
    IdleI2C2(); 
    
    rcv |= MasterReadI2C2();    //Read in LSB
    IdleI2C2();         
    AckI2C2();                  //Acknowledge LSB
    IdleI2C2();
    
    rcv |= MasterReadI2C2()<<8; //Read in MSB       
    AckI2C2();                  //Acknowledge MSB
    IdleI2C2();
    
    MasterReadI2C2();           //Read in PEC            
    AckI2C2();                  //Acknowledge MSB
    IdleI2C2();
   
    StopI2C2();                 //Send line stop condition
    IdleI2C2();                 
    return rcv;                 //Return read value    
}
Ejemplo n.º 3
0
 char I2C2_READ_String(U8 DevAdd, U8 RegAdd, U8 *RegValue, U8 len)
 {
	int DataWait = len*100;
	char ComRes,DevAddr;

	DevAddr = (DevAdd<<1)|M_I2C_Write;
	StartI2C2();					// Send the start bit
	IdleI2C2();					// Wait to complete
	while(I2C2STATbits.ACKSTAT);			//wait for acknowledgement
	ComRes=MasterWriteI2C2(DevAddr);		// Adress with write mode
	IdleI2C2();                                     // Wait to complete
	while(I2C2STATbits.ACKSTAT);			//wait for acknowledgement
	ComRes=MasterWriteI2C2(RegAdd);			// Write the chip ID register loaction for read
	IdleI2C2();					// Send the start bit
	while(I2C2STATbits.ACKSTAT);			//wait for acknowledgement
	RestartI2C2();					// Send the start bit
	IdleI2C2();					// Wait to complete
	while(I2C2STATbits.ACKSTAT);                    //wait for acknowledgement
	DevAddr = (DevAdd<<1)|M_I2C_Read;
	MasterWriteI2C2(DevAddr);                       // Adress with write mode
	IdleI2C2();					// Wait to complete
	while(I2C2STATbits.ACKSTAT);                    //wait for acknowledgement
	MastergetsI2C2(len, RegValue, DataWait);        // Read the Register value
	IdleI2C2();					// Wait to complete
	NotAckI2C2();                                   // Not Acknowledge I2C
	IdleI2C2();					// Wait to complete
	StopI2C2();					// Stop I2C communication
	IdleI2C2();					// Wait to complete;

	return ComRes;
}
Ejemplo n.º 4
0
S8 I2C2_WRITE_String(U8  DevAdd, U8 RegAdd, U8 *RegValue, U8 len)
 {
	char ComRes;

	DevAdd = (DevAdd<<1)|M_I2C_Write;
	StartI2C2();                                    // Send the start bit
	IdleI2C2();                                     // Wait to complete
	while(I2C2STATbits.ACKSTAT);			//wait for acknowledgement
	ComRes=MasterWriteI2C2(DevAdd);			// Adress with write mode
	IdleI2C2();                                     // Wait to complete
	while(I2C2STATbits.ACKSTAT);			//wait for acknowledgement
	ComRes=MasterWriteI2C2(RegAdd);			// Write the chip ID register loaction for read
	IdleI2C2();                                     // Send the start bit
	while(I2C2STATbits.ACKSTAT);			//wait for acknowledgement
	while(len--)
	{
		ComRes=MasterWriteI2C2(*RegValue);	// Write the chip ID register loaction for read
		IdleI2C2();                             // Wait to complete
		while(I2C2STATbits.ACKSTAT);		//wait for acknowledgement
		RegValue++;
	}
	StopI2C2();                                     // Stop the I2C communication
	IdleI2C2();                                     // Wait to complete
	return ComRes;
 }
Ejemplo n.º 5
0
Archivo: main.c Proyecto: reebot/wins
void LDWordReadI2C(unsigned char SlaveAddress, unsigned  char reg, unsigned char *data1, unsigned char *data2){
                StartI2C2();	//Send the Start Bit
		IdleI2C2();		//Wait to complete
		MasterWriteI2C2(SlaveAddress); //transmit write command
		IdleI2C2();		//Wait to complete
                MasterWriteI2C2(reg);
                IdleI2C2();
                StopI2C2();
                IdleI2C2();


                StartI2C2();	//Send the Start Bit
		IdleI2C2();		//Wait to complete
		MasterWriteI2C2(SlaveAddress|0x01); //transmit read command
		IdleI2C2();		//Wait to complete
                unsigned char data[2];
      		MastergetsI2C2(2, data, 30);		// "MCHP I2C"
                *data1=data[0];
                *data2=data[1];
//		if (status!=0)
//			while(1);

		StopI2C2();	//Send the Stop condition
		IdleI2C2();	//Wait to complete


}
Ejemplo n.º 6
0
Archivo: main.c Proyecto: reebot/wins
void LDWordWriteI2C(unsigned char SlaveAddress, unsigned char reg, unsigned char data1, unsigned char data2){
    StartI2C2();	//Send the Start Bit
    IdleI2C2();		//Wait to complete
    MasterWriteI2C2(SlaveAddress); //transmit write command
    IdleI2C2();		//Wait to complete
    MasterWriteI2C2(reg);
    IdleI2C2();
    MasterWriteI2C2(data1);
    IdleI2C2();
    MasterWriteI2C2(data2);
    IdleI2C2();
    StopI2C2();
    IdleI2C2();
}
void sleepIRTemp(){
    StartI2C2();				//Send line start condition
	IdleI2C2();			        //Wait to complete
	MasterWriteI2C2(0xb4);      //Write slave addr WRITE (OR 0)
    IdleI2C2();
    MasterWriteI2C2(0xff);      //sleep command
    IdleI2C2();				
   
    MasterReadI2C2();           //Read in PEC
    IdleI2C2();	        
    AckI2C2();                  //Acknowledge PEC
    IdleI2C2();
    StopI2C2();
}
Ejemplo n.º 8
0
void SendIMUData (int reg_addr, int data){
	StartI2C2();	        //Send the Start Bit
	IdleI2C2();		//Wait to complete

	MasterWriteI2C2(0x50);  //Sends the slave address over the I2C line.                                               
	IdleI2C2();             //Wait to complete

	MasterWriteI2C2(reg_addr);  //Sends data byte over I2C line
	IdleI2C2();                 //Wait to complete
    
    MasterWriteI2C2(data);
    IdleI2C2();                 //wait for ack
    
	StopI2C2();	        //Send the Stop condition
	IdleI2C2();	        //Wait to complete
} 
Ejemplo n.º 9
0
void i2cSendByte(unsigned char channel, unsigned char byte) {
    if (channel == 1) {
        MasterWriteI2C1(byte);
        while(I2C1STATbits.TRSTAT);
        while(I2C1STATbits.ACKSTAT);
    } else {
        MasterWriteI2C2(byte);
        while(I2C2STATbits.TRSTAT);
        while(I2C2STATbits.ACKSTAT);
    }
}
Ejemplo n.º 10
0
/*****************************************************
 * RcvData(unsigned int address)             *
 *                           *
 * Gets a byte of data from I2C slave device at      *
 *  ADDRESS.                         *
 *                           *
 * Returns: Received data                *
 ****************************************************/
int RcvData(unsigned int address) {
    StartI2C2();                //Send line start condition
    IdleI2C2();                 //Wait to complete
    MasterWriteI2C2((address << 1) | 1);    //Write out slave address OR 1 (read command)
    IdleI2C2();             //Wait to complete
    rcv = MasterReadI2C2();     //Read in a value  
    IdleI2C2();
    AckI2C2();
    IdleI2C2();
    StopI2C2();             //Send line stop condition
    IdleI2C2();             //Wait co complete
    return rcv;             //Return read value
}
int RcvIRTemp(unsigned int address){
    rcv = 0;
    StartI2C2();				//Send line start condition
	IdleI2C2();			        //Wait to complete
	MasterWriteI2C2(0xb4);	//Write slave addr WRITE (OR 0)
    IdleI2C2();
    MasterWriteI2C2(0xf0); //command
//    //Command to read Tobj1 on ir sensor's ram: 000 = read ram; 0x07 = tobj1
	IdleI2C2();				//Wait to complete
    
//    StopI2C2();             //restart
//    IdleI2C2();
//    StartI2C2();
//    IdleI2C2();
//    
//    MasterWriteI2C2(0xb5); //Write the slave address, READ (OR 1)
//    IdleI2C2(); 
    
    MasterReadI2C2();		//Read in LSB
    IdleI2C2();	        
    AckI2C2();              //Acknowledge LSB
    IdleI2C2();
    
    MasterReadI2C2();		//Read in MSB
    IdleI2C1();	        
    AckI2C2();              //Acknowledge MSB
    IdleI2C2();
    
    MasterReadI2C2();		//Read in PEC
    IdleI2C1();             
    AckI2C2();              //Acknowledge MSB
    IdleI2C2();
   
	StopI2C2();				//Send line stop condition
	IdleI2C2();				//Wait co complete
	return rcv;				//Return read value    
}
Ejemplo n.º 12
0
/*****************************************************************************
* Function Name : gyroSendByte
* Description   : Send a byte to gyroscope
* Parameters    : byte - a byte to send
* Return Value  : None
*****************************************************************************/
static inline void gyroSendByte( unsigned char byte ) {
    MasterWriteI2C2(byte);
    while(I2C2STATbits.TRSTAT);
    while(I2C2STATbits.ACKSTAT);
}