diff --git a/inc/LDC1612.h b/inc/LDC1612.h index 979f272..02a83b1 100644 --- a/inc/LDC1612.h +++ b/inc/LDC1612.h @@ -30,11 +30,27 @@ #define SENSOR_RESET_REG 0X1C #define SET_DRIVER_CURRENT_REG 0X1E +#define RCOUNT_CH0_REG 0x08 +#define SETTLECOUNT_CH0_REG 0x10 +#define CLOCK_DIVIDERS_CH0_REG 0x14 +#define ERROR_CONFIG_REG 0X19 +#define MUX_CONFIG_REG 0x1B +#define DRIVE_CURRENT_CH0_REG 0x1E +#define SENSOR_CONFIG_REG 0X1A + #define READ_MANUFACTURER_ID 0X7E #define READ_DEVICE_ID 0X7F /******************************************************************************/ +#define CHANNEL_0 0 +#define CHANNEL_1 1 + +/******************************************************************************/ + +#define CONVERSION_TIME_CH0 0X0546 //0536 +#define CONVERSION_OFFSET_CH0 0X0000 +#define LC_STABILIZE_TIME_CH0 0X001E //30 typedef enum { I2C_START = 0, @@ -49,7 +65,7 @@ typedef enum { #define I2C_FAIL 0 #define I2C_END 1 -#define I2C_SPEED 100000 +#define I2C_SPEED 20000 #define RCU_GPIO_I2C RCU_GPIOF #define RCU_I2C RCU_I2C0 #define I2C_SCL_PORT GPIOF diff --git a/src/LDC1612.c b/src/LDC1612.c index a41c217..227d723 100644 --- a/src/LDC1612.c +++ b/src/LDC1612.c @@ -157,6 +157,39 @@ void I2C_scan(void) { } } +/** @brief set conversion interval time. + @param channel LDC1612 has total two channels. + @param result The value to be set. + * */ +void ldc1612_set_conversion_time(uint8_t channel, uint16_t result) { + uint8_t data[2] = {0}; + data[0] = (result >> 8) & 0xFF; + data[1] = result & 0xFF; + ldc1612_iic_write_16bits(SET_CONVERSION_TIME_REG_START + channel, data); +} + +/** @brief set conversion offset. + @param channel LDC1612 has total two channels. + @param result The value to be set. + * */ +void ldc1612_set_conversion_offset(uint8_t channel, uint16_t result) { + uint8_t data[2] = {0}; + data[0] = (result >> 8) & 0xFF; + data[1] = result & 0xFF; + ldc1612_iic_write_16bits(SET_CONVERSION_OFFSET_REG_START + channel, data); +} + +/** @brief Before conversion,wait LC sensor stabilize for a short time. + @param channel LDC1612 has total two channels. + @param result The value to be set. + * */ +void ldc1612_set_LC_stabilize_time(uint8_t channel, uint16_t result) { + uint8_t data[2] = {0}; + data[0] = (result >> 8) & 0xFF; + data[1] = result & 0xFF; + ldc1612_iic_write_16bits(SET_LC_STABILIZE_REG_START + channel, data); +} + int LDC1612_IIC_read_16bits(uint8_t reg, uint16_t *data) { uint16_t timeout = 0; @@ -262,9 +295,8 @@ int LDC1612_IIC_read_16bits(uint8_t reg, uint16_t *data) { void ldc1612_iic_get_sensor_infomation(void) { uint16_t data = 0; - LDC1612_IIC_read_16bits(READ_DEVICE_ID, &data); + LDC1612_IIC_read_16bits(READ_MANUFACTURER_ID, &data); printf("\tManufacturer: 0x%x\r\n", data); - // delay_ms(5000); LDC1612_IIC_read_16bits(READ_DEVICE_ID, &data); printf("\tDevice: 0x%x\r\n", data); } @@ -306,7 +338,7 @@ uint8_t ldc1612_iic_read_16bits(uint8_t reg_addr, uint8_t *data) { /* whether to send ACK or not for the next byte */ i2c_ackpos_config(I2C0, I2C_ACKPOS_NEXT); } else { - i2c_bus_reset(); + // i2c_bus_reset(); timeout = 0; state = I2C_START; printf("i2c bus is busy in READ!\n"); diff --git a/src/main.c b/src/main.c index e19e083..9a2f035 100644 --- a/src/main.c +++ b/src/main.c @@ -60,20 +60,23 @@ int main(void) { printf("\r\n"); delay_ms(500); + ldc1612_iic_get_sensor_infomation(); - uint16_t device_id = 0; - device_id = ldc1612_get_deveice_id(); - printf("device id = 0x%x\r\n", device_id); - - delay_ms(100); - - device_id = 0; - device_id = ldc1612_get_manufacturer_id(); - printf("device id = 0x%x\r\n", device_id); - - uint8_t data[2] = {0x05, 0x36}; - ldc1612_iic_write_16bits(SET_CONVERSION_TIME_REG_START, data); + // uint16_t device_id = 0; + // device_id = ldc1612_get_deveice_id(); + // printf("device id = 0x%x\r\n", device_id); + // + // delay_ms(100); + // + // device_id = 0; + // device_id = ldc1612_get_manufacturer_id(); + // printf("device id = 0x%x\r\n", device_id); + uint16_t result = {0x0546}; + uint8_t data[2] = {0}; + data[0] = (result >> 8) & 0xFF; + data[1] = result & 0xFF; + printf("data[0] = 0x%x, data[1] = 0x%x\r\n", data[0], data[1]); while (1) { // delay_ms(1000);