123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- /*
- * BMA253.c
- *
- * Created on: 2019. 5. 27.
- * Author: parkyj
- */
- #include "TMP75AIDGKR.h"
-
-
- static HAL_StatusTypeDef Tmp75_Write_Register(I2C_HandleTypeDef *hi2c, uint8_t adr,
- uint8_t register_pointer, uint16_t register_value);
-
-
-
- static HAL_StatusTypeDef Tmp75_Read_Register(I2C_HandleTypeDef *hi2c, uint8_t adr,
- uint8_t register_pointer, uint8_t* receive_buffer);
-
-
-
- /*!
- * \brief Convert address line state to slave address
- *
- * \retval slave address or 0xff if address line state combination is invalid
- */
- uint8_t Tmp75_SlaveAddress(Tmp75_AddressLine_t a2, Tmp75_AddressLine_t a1,
- Tmp75_AddressLine_t a0)
- {
-
- typedef struct
- {
- Tmp75_AddressLine_t a2;
- Tmp75_AddressLine_t a1;
- Tmp75_AddressLine_t a0;
- uint8_t SlaveAddress;
- } Lm75_addrconv_t;
-
- const Lm75_addrconv_t Lm75_addrconv[] =
- {
- {Tmp75Addr_Zero, Tmp75Addr_Zero, Tmp75Addr_Zero, 0x48},
- {Tmp75Addr_Zero, Tmp75Addr_Zero, Tmp75Addr_One, 0x49},
- {Tmp75Addr_Zero, Tmp75Addr_One, Tmp75Addr_Zero, 0x4A},
- {Tmp75Addr_Zero, Tmp75Addr_One, Tmp75Addr_One, 0x4B},
- {Tmp75Addr_One, Tmp75Addr_Zero, Tmp75Addr_Zero, 0x4C},
- {Tmp75Addr_One, Tmp75Addr_Zero, Tmp75Addr_One, 0x4D},
- {Tmp75Addr_One, Tmp75Addr_One, Tmp75Addr_Zero, 0x4E},
- {Tmp75Addr_One, Tmp75Addr_One, Tmp75Addr_One, 0x4F},
- {Tmp75Addr_Float, Tmp75Addr_Zero, Tmp75Addr_Zero, 0x70},
- {Tmp75Addr_Float, Tmp75Addr_Zero, Tmp75Addr_Float, 0x71},
- {Tmp75Addr_Float, Tmp75Addr_Zero, Tmp75Addr_One, 0x72},
- {Tmp75Addr_Float, Tmp75Addr_One, Tmp75Addr_Zero, 0x73},
- {Tmp75Addr_Float, Tmp75Addr_One, Tmp75Addr_Float, 0x74},
- {Tmp75Addr_Float, Tmp75Addr_One, Tmp75Addr_One, 0x75},
- {Tmp75Addr_Float, Tmp75Addr_Float, Tmp75Addr_Zero, 0x76},
- {Tmp75Addr_Float, Tmp75Addr_Float, Tmp75Addr_One, 0x77},
- {Tmp75Addr_Zero, Tmp75Addr_Float, Tmp75Addr_Zero, 0x28},
- {Tmp75Addr_Zero, Tmp75Addr_Float, Tmp75Addr_One, 0x29},
- {Tmp75Addr_One, Tmp75Addr_Float, Tmp75Addr_Zero, 0x2A},
- {Tmp75Addr_One, Tmp75Addr_Float, Tmp75Addr_One, 0x2B},
- {Tmp75Addr_Zero, Tmp75Addr_Zero, Tmp75Addr_Float, 0x2C},
- {Tmp75Addr_Zero, Tmp75Addr_One, Tmp75Addr_Float, 0x2D},
- {Tmp75Addr_One, Tmp75Addr_Zero, Tmp75Addr_Float, 0x2E},
- {Tmp75Addr_One, Tmp75Addr_One, Tmp75Addr_Float, 0x2F},
- {Tmp75Addr_Zero, Tmp75Addr_Float, Tmp75Addr_Float, 0x35},
- {Tmp75Addr_One, Tmp75Addr_Float, Tmp75Addr_Float, 0x36},
- {Tmp75Addr_Float, Tmp75Addr_Float, Tmp75Addr_Float, 0x37},
- {Tmp75Addr_Zero, Tmp75Addr_Zero, Tmp75Addr_Zero, 0x48},
- {Tmp75Addr_Zero, Tmp75Addr_Zero, Tmp75Addr_One, 0x49},
- {Tmp75Addr_Zero, Tmp75Addr_One, Tmp75Addr_Zero, 0x4A},
- {Tmp75Addr_Zero, Tmp75Addr_One, Tmp75Addr_One, 0x4B},
- {Tmp75Addr_One, Tmp75Addr_Zero, Tmp75Addr_Zero, 0x4C},
- {Tmp75Addr_One, Tmp75Addr_Zero, Tmp75Addr_One, 0x4D},
- {Tmp75Addr_One, Tmp75Addr_One, Tmp75Addr_Zero, 0x4E},
- {Tmp75Addr_One, Tmp75Addr_One, Tmp75Addr_One, 0x4F}
- };
-
- int i;
-
- for (i = 0; i<(sizeof(Lm75_addrconv) / sizeof(Lm75_addrconv[0])); i++)
- {
- if ( (Lm75_addrconv[i].a0 == a0) &
- (Lm75_addrconv[i].a1 == a1) &
- (Lm75_addrconv[i].a2 == a2) ) return Lm75_addrconv[i].SlaveAddress;
- }
- printf("Address Not Found \r\n");
- return 0xff;
-
-
- }
-
- /**
- * @brief Init TMP75
- * @param hi2c: pointer to I2C handle
- * @param adr: Slave address
- * @param cfg: configuration register
- * @retval None
- */
- HAL_StatusTypeDef Tmp75_Init(I2C_HandleTypeDef *hi2c, uint8_t adr,
- Tmp75_regconf_t cfg) {
-
- uint16_t regval = cfg.r << 8;
- return Tmp75_Write_Register(hi2c, adr, TMP75_RCONF, regval);
-
- }
-
-
- static HAL_StatusTypeDef Tmp75_Write_Register(I2C_HandleTypeDef *hi2c, uint8_t adr,
- uint8_t register_pointer, uint16_t register_value) {
-
- uint8_t data[3];
-
- data[0] = register_pointer; // Register address
- data[1] = register_value >> 8; // MSB byte of 16bit data
- data[2] = register_value; // LSB byte of 16bit data
-
- return HAL_I2C_Master_Transmit(hi2c, adr<<1, data, 3, 100);
-
- }
-
- static HAL_StatusTypeDef Tmp75_Read_Register(I2C_HandleTypeDef *hi2c, uint8_t adr,
- uint8_t register_pointer, uint8_t* receive_buffer) {
-
- HAL_StatusTypeDef status;
-
- // first set the register pointer to the register wanted to be read
- status = HAL_I2C_Master_Transmit(hi2c, adr<<1, ®ister_pointer, 1, 100);
-
- // receive the 2 x 8bit data into the receive buffer
- status |= HAL_I2C_Master_Receive(hi2c, adr<<1 | 0x01, receive_buffer, 2, 100);
- return status;
-
- }
-
- HAL_StatusTypeDef Tmp75_Read_Teperature(I2C_HandleTypeDef *hi2c, uint8_t adr,
- float* temperature) {
- HAL_StatusTypeDef status;
- uint8_t T_buffer[2];
- uint16_t temp;
-
- status = Tmp75_Read_Register(hi2c, adr, TMP75_RTEMP, T_buffer);
- if (status == HAL_OK)
- {
- temp = ((T_buffer[0]<<8) | T_buffer[1]) >> 4;
- *temperature = (float)temp * 0.0625f;
- }
-
- return status;
- }
-
-
-
- HAL_StatusTypeDef Tmp75_Read_Int_Teperature(I2C_HandleTypeDef *hi2c, uint8_t tmp75addr,
- int32_t* temperature)
- {
- float T;
- Tmp75_regconf_t TMP75_cfg;
- HAL_StatusTypeDef status;
- TMP75_cfg.b.R = TMP75_RESOLUTION_12BITS;
- TMP75_cfg.b.OS = 1;
- TMP75_cfg.b.F = 0;
- TMP75_cfg.b.POL = 0;
- TMP75_cfg.b.TM = 0;
- TMP75_cfg.b.SD = 0;
-
- status = Tmp75_Init(hi2c, tmp75addr, TMP75_cfg);
- if (status == HAL_OK) {
- status = Tmp75_Read_Teperature(hi2c, tmp75addr, &T);
- }
- /////////// TEST
- /// T = -11.5;
- /////////// TEST
- *temperature = (int32_t)(T*1000);
- printf("Current tmp : %f \r\n",(float)(*temperature/1000.0));
- return status;
- }
|