added status and block readout

This commit is contained in:
Tim-Erik Düntzsch
2023-03-24 23:23:49 +01:00
parent f2294c896c
commit 745d2a79a7
5 changed files with 55 additions and 16 deletions

View File

@ -8,9 +8,18 @@
#ifndef INC_HTPA_32X32D_H_
#define INC_HTPA_32X32D_H_
typedef struct {
uint8_t block;
uint8_t vdd_meas;
uint8_t blind;
uint8_t eoc;
}HTPA_Status;
void HTPA_Init(I2C_HandleTypeDef *);
void HTPA_ReadBlock(uint8_t, uint8_t, uint16_t *[128]);
void HTPA_WriteRegister(uint8_t, uint8_t);
HTPA_Status HTPA_GetStatus(void);
#endif /* INC_HTPA_32X32D_H_ */

View File

@ -31,6 +31,7 @@
I2C_HandleTypeDef i2c_handle;
HAL_StatusTypeDef i2c_return; // error handling maybe?
uint16_t blockData[128];
void HTPA_Init(I2C_HandleTypeDef *hi2c){
@ -44,13 +45,35 @@ void HTPA_Init(I2C_HandleTypeDef *hi2c){
HTPA_WriteRegister(HTPA_SENSOR_TRIM_5, 0x0C);
HTPA_WriteRegister(HTPA_SENSOR_TRIM_6, 0x0C);
HTPA_WriteRegister(HTPA_SENSOR_TRIM_7, 0x88);
//HTPA_WriteRegister(HTPA_SENSOR_CONFIG, 0x09); // Wakeup | Start
}
void HTPA_ReadBlock(uint8_t array_half, uint8_t block, uint16_t *pData[128]){
uint8_t config = (block << 4); // bit 5,4 block
config |= 0x09; // bit 3 start | bit 1 wakeup
HTPA_WriteRegister(HTPA_SENSOR_CONFIG, config);
}
void HTPA_WriteRegister(uint8_t register_address, uint8_t byte){
uint8_t i2c_data = register_adress;
HAL_I2C_Master_Transmit(&i2c_handle, HTPA_SENSOR_ADDRESS, &i2c_data, 1, I2C_MAX_DELAY);
uint8_t i2c_data = register_address;
uint8_t i2c_address = (HTPA_SENSOR_ADDRESS << 1);
i2c_address |= 0x00; // set read/write bit to write (0)
HAL_I2C_Master_Transmit(&i2c_handle, i2c_address, &i2c_data, 1, I2C_MAX_DELAY);
i2c_data = byte;
HAL_I2C_Master_Transmit(&i2c_handle, HTPA_SENSOR_ADDRESS, &i2c_data, 1, I2C_MAX_DELAY);
HAL_I2C_Master_Transmit(&i2c_handle, i2c_address, &i2c_data, 1, I2C_MAX_DELAY);
}
HTPA_Status HTPA_GetStatus(void){
HTPA_Status status_return;
uint8_t i2c_data = HTPA_SENSOR_STATUS;
uint8_t i2c_address = (HTPA_SENSOR_ADDRESS << 1);
uint8_t i2c_readData = 0;
i2c_address |= 0x00; // set read/write bit to write (0)
HAL_I2C_Master_Transmit(&i2c_handle, i2c_address, &i2c_data, 1, I2C_MAX_DELAY);
i2c_address |= 0x01; // set read/write bit to read (1)
HAL_I2C_Master_Receive(&i2c_handle, i2c_address, &i2c_readData, 1, I2C_MAX_DELAY);
status_return.block = (i2c_readData >> 4) && 0xFC;
status_return.vdd_meas = (i2c_readData >> 2) && 0xFE;
status_return.blind = (i2c_readData >> 1) && 0xFE;
status_return.eoc = i2c_readData && 0xFE;
return status_return;
}