//----------------------------------------------- long _24c01_read_4byte(short adr) { long temp; //char temp1; long temp_[4]; i2c_Start(); i2c_SendByte(0xa0); if(i2c_ReadAcknowledge()) goto Stop_label_24c01_read_4byte; i2c_SendByte((char)adr); if(i2c_ReadAcknowledge()) goto Stop_label_24c01_read_4byte; i2c_Restart(); i2c_SendByte(0xa1); if(i2c_ReadAcknowledge()) goto Stop_label_24c01_read_4byte; temp_[0]=i2c_ReadByte(); i2c_SendAcknowledge(1); temp_[1]=i2c_ReadByte(); i2c_SendAcknowledge(1); temp_[2]=i2c_ReadByte(); i2c_SendAcknowledge(1); temp_[3]=i2c_ReadByte(); i2c_SendAcknowledge(0); Stop_label_24c01_read_4byte: i2c_Stop(); temp_[0]&=0x000000ff; temp_[1]<<=8; temp_[1]&=0x0000ff00; temp_[2]<<=16; temp_[2]&=0x00ff0000; temp_[3]<<=24; temp_[3]&=0xff000000; temp=temp_[0]+temp_[1]+temp_[2]+temp_[3]; return temp; }
// Read a char from servo ic uint8_t i2c_slave_read(uint8_t slave_address, uint8_t address) { uint8_t read_byte; // Read one byte (i.e. servo pos of one servo) i2c_Start(); // send Start i2c_Address(slave_address, I2C_WRITE); // Send slave address with write operation i2c_Write(address); // Set register for servo 0 i2c_Restart(); // Restart i2c_Address(slave_address, I2C_READ); // Send slave address with read operation read_byte = i2c_Read(0); // Read one byte // If more than one byte to be read, (0) should // be on last byte only // e.g.3 bytes= i2c_Read(1); i2c_Read(1); i2c_Read(0); i2c_Stop(); // send Stop return read_byte; // return byte. If reading more than one byte // store in an array }
//----------------------------------------------- short _24c01_read_2byte(short adr) { short temp; char temp1; i2c_Start(); i2c_SendByte(0xa0); if(i2c_ReadAcknowledge()) goto Stop_label_24c01_read_2byte; i2c_SendByte((char)adr); if(i2c_ReadAcknowledge()) goto Stop_label_24c01_read_2byte; i2c_Restart(); i2c_SendByte(0xa1); if(i2c_ReadAcknowledge()) goto Stop_label_24c01_read_2byte; temp1=i2c_ReadByte(); i2c_SendAcknowledge(1); temp=i2c_ReadByte(); i2c_SendAcknowledge(0); Stop_label_24c01_read_2byte: i2c_Stop(); temp<<=8; temp+=temp1; return temp; }
//----------------------------------------------- void _24c01_read_nbyte(short adr, char* buff, char n) { char i; i2c_Start(); i2c_SendByte(0xa0); if(i2c_ReadAcknowledge()) goto Stop_label_24c01_read_nbyte; i2c_SendByte((char)adr); if(i2c_ReadAcknowledge()) goto Stop_label_24c01_read_nbyte; i2c_Restart(); i2c_SendByte(0xa1); if(i2c_ReadAcknowledge()) goto Stop_label_24c01_read_nbyte; for(i=0;i<(n-1);i++) { buff[i]=i2c_ReadByte(); i2c_SendAcknowledge(1); } buff[i]=i2c_ReadByte(); i2c_SendAcknowledge(0); Stop_label_24c01_read_nbyte: i2c_Stop(); }
void readMag(int magArr[3]){ i2c_Start(mag_i2c_addr,I2C_WRITE); i2c_Write(mag_xH_addr); i2c_Restart(mag_i2c_addr,I2C_READ); unsigned int xH = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(mag_i2c_addr,I2C_WRITE); i2c_Write(mag_xL_addr); i2c_Restart(mag_i2c_addr,I2C_READ); unsigned int xL = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(mag_i2c_addr,I2C_WRITE); i2c_Write(mag_yH_addr); i2c_Restart(mag_i2c_addr,I2C_READ); unsigned int yH = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(mag_i2c_addr,I2C_WRITE); i2c_Write(mag_yL_addr); i2c_Restart(mag_i2c_addr,I2C_READ); unsigned int yL = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(mag_i2c_addr,I2C_WRITE); i2c_Write(mag_zH_addr); i2c_Restart(mag_i2c_addr,I2C_READ); unsigned int zH = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(mag_i2c_addr,I2C_WRITE); i2c_Write(mag_zL_addr); i2c_Restart(mag_i2c_addr,I2C_READ); unsigned int zL = i2c_ReadFinal(); i2c_ResetBus(); magArr[0] = (xH<<8) | xL; magArr[1] = (yH<<8) | yL; magArr[2] = (zH<<8) | zL; }//end read mag
void readGyr(int gyrArr[6]){ i2c_Start(gyr_i2c_addr,I2C_WRITE); i2c_Write(gyr_xH_addr); i2c_Restart(gyr_i2c_addr,I2C_READ); unsigned int xH = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(gyr_i2c_addr,I2C_WRITE); i2c_Write(gyr_xL_addr); i2c_Restart(gyr_i2c_addr,I2C_READ); unsigned int xL = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(gyr_i2c_addr,I2C_WRITE); i2c_Write(gyr_yH_addr); i2c_Restart(gyr_i2c_addr,I2C_READ); unsigned int yH = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(gyr_i2c_addr,I2C_WRITE); i2c_Write(gyr_yL_addr); i2c_Restart(gyr_i2c_addr,I2C_READ); unsigned int yL = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(gyr_i2c_addr,I2C_WRITE); i2c_Write(gyr_zH_addr); i2c_Restart(gyr_i2c_addr,I2C_READ); unsigned int zH = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(gyr_i2c_addr,I2C_WRITE); i2c_Write(gyr_zL_addr); i2c_Restart(gyr_i2c_addr,I2C_READ); unsigned int zL = i2c_ReadFinal(); i2c_ResetBus(); gyrArr[0] = (xH<<8) | xL; gyrArr[1] = (yH<<8) | yL; gyrArr[2] = (zH<<8) | zL; }
void readAcc(int accArr[6]){ i2c_Start(acc_i2c_addr,I2C_WRITE); i2c_Write(acc_xH_addr); i2c_Restart(acc_i2c_addr,I2C_READ); unsigned int xH = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(acc_i2c_addr,I2C_WRITE); i2c_Write(acc_xL_addr); i2c_Restart(acc_i2c_addr,I2C_READ); unsigned int xL = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(acc_i2c_addr,I2C_WRITE); i2c_Write(acc_yH_addr); i2c_Restart(acc_i2c_addr,I2C_READ); unsigned int yH = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(acc_i2c_addr,I2C_WRITE); i2c_Write(acc_yL_addr); i2c_Restart(acc_i2c_addr,I2C_READ); unsigned int yL = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(acc_i2c_addr,I2C_WRITE); i2c_Write(acc_zH_addr); i2c_Restart(acc_i2c_addr,I2C_READ); unsigned int zH = i2c_ReadFinal(); i2c_ResetBus(); i2c_Start(acc_i2c_addr,I2C_WRITE); i2c_Write(acc_zL_addr); i2c_Restart(acc_i2c_addr,I2C_READ); unsigned int zL = i2c_ReadFinal(); i2c_ResetBus(); accArr[0] = (xH<<8) + xL; accArr[1] = (yH<<8) + yL; accArr[2] = (zH<<8) + zL; }