Files
motor/Common/i2c/Angle_AS5600.c
T
2024-09-26 22:32:20 +08:00

47 lines
785 B
C

/*
* Angle_AS5600.c
*
* Created on: Jun 22, 2020
* Author: matth
*/
#include "Angle_AS5600.h"
bool Ang_AS5600_init(Ang_AS5600_t *ang, const char *name, I2C_DEV_t *dev)
{
ang->name = name;
ang->_dev = dev;
ang->angle = 0;
return true;
}
bool Ang_AS5600_update(Ang_AS5600_t *ang)
{
bool rslt;
rslt = false;
uint8_t buff[4];
if (!I2C_DEV_begin(ang->_dev,1)) {
return rslt;
}
if (I2C_DEV_read_registers(ang->_dev, AS5600_STATUS, buff, 3))
{
ang->status = ((buff[0] & 0x38) >> 2);
if (ang->status == 0x8)
{
ang->status = 0u;
ang->angle = (((buff[1]&0x0F)<<8)+buff[2])*0.087890625f;
rslt = true;
}
}
else
{
ang->status = 1u;
}
I2C_DEV_end(ang->_dev);
return rslt;
}