From e9cbf90132abdad60628ecdbd8644fb9efda5887 Mon Sep 17 00:00:00 2001 From: macphyter Date: Tue, 6 Feb 2024 00:02:36 -0700 Subject: [PATCH] refine transfer functions, write more config settings --- main/TPS546.c | 313 ++++++++++++++++++++++++++++++++------------------ main/TPS546.h | 26 ++--- 2 files changed, 215 insertions(+), 124 deletions(-) diff --git a/main/TPS546.c b/main/TPS546.c index 6fd5900c..ca8b7bb9 100644 --- a/main/TPS546.c +++ b/main/TPS546.c @@ -29,7 +29,8 @@ static const char *TAG = "TPS546.c"; -static uint8_t DEVICE_ID[] = {0x54, 0x49, 0x54, 0x6B, 0x24, 0x41}; +static uint8_t DEVICE_ID1[] = {0x54, 0x49, 0x54, 0x6B, 0x24, 0x41}; +static uint8_t DEVICE_ID2[] = {0x54, 0x49, 0x54, 0x6D, 0x24, 0x41}; static uint8_t MFR_ID[] = {'B', 'A', 'X'}; static uint8_t MFR_MODEL[] = {'H', 'E', 'X'}; static uint8_t MFR_REVISION[] = {0x00, 0x00, 0x01}; @@ -196,9 +197,9 @@ static int slinear11_2_int(uint16_t value) // check the first bit of the mantissa to see if its negative if (value & 0x400) { // mantissa is negative - mantissa = -1 * ((~value & 0x07FF) + 1); + mantissa = -1 * ((~value & 0x03FF) + 1); } else { - mantissa = (value & 0x07FF); + mantissa = (value & 0x03FF); } // calculate result (mantissa * 2^exponent) @@ -207,65 +208,124 @@ static int slinear11_2_int(uint16_t value) return (int)result; } +/** + * @brief Convert an SLINEAR11 value into an int + */ +static float slinear11_2_float(uint16_t value) +{ + int exponent, mantissa; + float result; + + // First 5 bits is exponent in twos-complement + // check the first bit of the exponent to see if its negative + if (value & 0x8000) { + // exponent is negative + exponent = -1 * (((~value >> 11) & 0x001F) + 1); + } else { + exponent = (value >> 11); + } + // last 11 bits is the mantissa in twos-complement + // check the first bit of the mantissa to see if its negative + if (value & 0x400) { + // mantissa is negative + mantissa = -1 * ((~value & 0x03FF) + 1); + } else { + mantissa = (value & 0x03FF); + } + + // calculate result (mantissa * 2^exponent) + result = mantissa * powf(2.0, exponent); + return result; +} + /** * @brief Convert an int value into an SLINEAR11 */ static uint16_t int_2_slinear11(int value) { - float mantissa; - int exponent; + int mantissa; + int exponent = 0; uint16_t result = 0; + int i; - mantissa = frexp(value, &exponent); - ESP_LOGI(TAG, "mantissa: %f, exponent: %d", mantissa, exponent); - - result = (mantissa * 1024); - - -// int i; // First see if the exponent is positive or negative -// if (value > 0) { + if (value >= 0) { // exponent is positive -// } else { - // exponent is negative -// } + for (i=0; i<=15; i++) { + mantissa = value / powf(2.0, i); + if (mantissa < 1024) { + exponent = i; + break; + } + } + if (i == 16) { + ESP_LOGI(TAG, "Could not find a solution"); + return 0; + } + } else { + // value is negative + ESP_LOGI(TAG, "No negative numbers at this time"); + return 0; + } + result = ((exponent << 11) & 0xF800) + mantissa; + //ESP_LOGI(TAG, "mantissa: %d, exponent: %d", mantissa, exponent); + //ESP_LOGI(TAG, "result: %04x", result); - // First 5 bits is exponent in twos-complement - // check the first bit of the exponent to see if its negative -// if (value & 0x8000) { - // exponent is negative -// exponent = -1 * (((~value >> 11) & 0x001F) + 1); -// } else { -// exponent = (value >> 11); -// } - // last 11 bits is the mantissa in twos-complement - // check the first bit of the mantissa to see if its negative -// if (value & 0x400) { - // mantissa is negative -// mantissa = -1 * ((~value & 0x07FF) + 1); -// } else { -// mantissa = (value & 0x07FF); -// } - - - // calculate result (mantissa * 2^exponent) -// result = mantissa * powf(2.0, exponent); return result; } /** - * @brief Convert a ULINEAR16 value into an int + * @brief Convert a float value into an SLINEAR11 + */ +static uint16_t float_2_slinear11(float value) +{ + int mantissa; + int exponent = 0; + uint16_t result = 0; + int i; + + // First see if the exponent is positive or negative + if (value > 0) { + // exponent is negative + for (i=0; i<=15; i++) { + mantissa = value * powf(2.0, i); + if (mantissa >= 1024) { + exponent = i-1; + mantissa = value * powf(2.0, exponent); + break; + } + } + if (i == 16) { + ESP_LOGI(TAG, "Could not find a solution"); + return 0; + } + } else { + // value is negative + ESP_LOGI(TAG, "No negative numbers at this time"); + return 0; + } + + result = (( (~exponent + 1) << 11) & 0xF800) + mantissa; + + //ESP_LOGI(TAG, "mantissa: %d, exponent: -%d", mantissa, exponent); + //ESP_LOGI(TAG, "result: %04x", result); + + return result; +} + +/** + * @brief Convert a ULINEAR16 value into a float * the exponent comes from the VOUT_MODE bits[4..0] * stored in twos-complement * The mantissa occupies the full 16-bits of the value */ -static int ulinear16_2_int(uint16_t value) +static int ulinear16_2_float(uint16_t value) { - float exponent; - int result; uint8_t voutmode; + int exponent; + float result; smb_read_byte(PMBUS_VOUT_MODE, &voutmode); if (voutmode & 0x10) { @@ -275,21 +335,23 @@ static int ulinear16_2_int(uint16_t value) exponent = (voutmode & 0x1F); } - result = (value * powf(2.0, exponent)) * 1000; + //ESP_LOGI(TAG, "value: %04x", value); + //ESP_LOGI(TAG, "mantissa: %d, exponent: %d", value, exponent); + result = (value * powf(2.0, exponent)); return result; } /** - * @brief Convert an int value into a ULINEAR16 + * @brief Convert a float value into a ULINEAR16 * the exponent comes from the VOUT_MODE bits[4..0] * stored in twos-complement * The mantissa occupies the full 16-bits of the result **/ -static uint16_t int_2_ulinear16(int value) +static uint16_t float_2_ulinear16(float value) { uint8_t voutmode; float exponent; - int result; + uint16_t result; smb_read_byte(PMBUS_VOUT_MODE, &voutmode); if (voutmode & 0x10) { @@ -299,9 +361,8 @@ static uint16_t int_2_ulinear16(int value) exponent = (voutmode & 0x1F); } - ESP_LOGI(TAG, "Exp: %f", exponent); - result = (value / powf(2.0, exponent)) / 1000; - //result = (value * powf(2.0, exponent)) * 1000; + result = (value / powf(2.0, exponent)); + ESP_LOGI(TAG, "result: %04x, exponent: %f", result, exponent); return result; } @@ -314,8 +375,10 @@ int TPS546_init(void) uint8_t data[6]; uint8_t u8_value; uint16_t u16_value; - int iout; - uint8_t mfr_revision[3]; + float vin; + float iout; + float vout; + uint8_t read_mfr_revision[3]; int temp; uint8_t comp_config[5]; @@ -325,27 +388,28 @@ int TPS546_init(void) smb_read_block(PMBUS_IC_DEVICE_ID, data, 6); ESP_LOGI(TAG, "Device ID: %02x %02x %02x %02x %02x %02x", data[0], data[1], data[2], data[3], data[4], data[5]); - if (memcmp(data, DEVICE_ID, 6) != 0) + if ( (memcmp(data, DEVICE_ID1, 6) != 0) && (memcmp(data, DEVICE_ID2, 6) != 0) ) { ESP_LOGI(TAG, "ERROR- cannot find TPS546 regulator"); return -1; } /* Make sure power is turned off until commanded */ - ESP_LOGI(TAG, "Setting power config"); + ESP_LOGI(TAG, "Verifying power config"); u8_value = ON_OFF_CONFIG_CMD | ON_OFF_CONFIG_PU | ON_OFF_CONFIG_CP | ON_OFF_CONFIG_POLARITY | ON_OFF_CONFIG_DELAY; smb_write_byte(PMBUS_ON_OFF_CONFIG, u8_value); /* Read version number and see if it matches */ - TPS546_read_mfr_info(mfr_revision); - if (memcmp(mfr_revision, MFR_REVISION, 3) != 0) { - // If it doesn't match, then set the version and write all the registers + TPS546_read_mfr_info(read_mfr_revision); + if (memcmp(read_mfr_revision, MFR_REVISION, 3) != 0) { + uint8_t voutmode; + // If it doesn't match, then write all the registers and set new version number + ESP_LOGI(TAG, "--------------------------------"); ESP_LOGI(TAG, "Config version mismatch, writing new config values"); - //TPS546_write_entire_config(); - // TODO write new config version here - - + smb_read_byte(PMBUS_VOUT_MODE, &voutmode); + ESP_LOGI(TAG, "VOUT_MODE: %02x", voutmode); + TPS546_write_entire_config(); } /* Show temperature */ @@ -359,18 +423,22 @@ int TPS546_init(void) /* Show voltage settings */ TPS546_show_voltage_settings(); - ESP_LOGI(TAG, "-----------CURRENT---------------------"); + ESP_LOGI(TAG, "-----------VOLTAGE/CURRENT---------------------"); + /* Get voltage input (SLINEAR11) */ + smb_read_word(PMBUS_READ_VIN, &u16_value); + vin = slinear11_2_float(u16_value); + ESP_LOGI(TAG, "Vin measured: %2.3f V", vin); + /* Get output current (SLINEAR11) */ smb_read_word(PMBUS_READ_IOUT, &u16_value); - iout = slinear11_2_int(u16_value); - ESP_LOGI(TAG, "Iout measured: %d", iout); + iout = slinear11_2_float(u16_value); + ESP_LOGI(TAG, "Iout measured: %2.3f A", iout); /* Get voltage output (ULINEAR16) */ // This gets a timeout, don't know why. clock stretching? -// ESP_LOGI(TAG, "--------------------------------"); // smb_read_word(PMBUS_READ_VOUT, &u16_value); -// millivolts = ulinear16_2_int(u16_value); -// ESP_LOGI(TAG, "Vout measured: %d mV", millivolts); +// vout = ulinear16_2_float(u16_value); +// ESP_LOGI(TAG, "Vout measured: %2.3f V", vout); ESP_LOGI(TAG, "-----------TIMING---------------------"); smb_read_word(PMBUS_TON_DELAY, &u16_value); @@ -432,64 +500,90 @@ void TPS546_set_mfr_info(void) /* Set all the relevant config registers for normal operation */ void TPS546_write_entire_config(void) { + ESP_LOGI(TAG, "---Writing new config values to TPS546---"); /* set up the ON_OFF_CONFIG */ + ESP_LOGI(TAG, "Setting ON_OFF_CONFIG"); smb_write_byte(PMBUS_ON_OFF_CONFIG, TPS546_INIT_ON_OFF_CONFIG); /* Switch frequency */ + ESP_LOGI(TAG, "Setting FREQUENCY"); smb_write_word(PMBUS_FREQUENCY_SWITCH, int_2_slinear11(TPS546_INIT_FREQUENCY)); /* vin voltage */ - smb_write_word(PMBUS_VIN_ON, int_2_slinear11(TPS546_INIT_VIN_ON)); - smb_write_word(PMBUS_VIN_OFF, int_2_slinear11(TPS546_INIT_VIN_OFF)); - smb_write_word(PMBUS_VIN_UV_WARN_LIMIT, int_2_slinear11(TPS546_INIT_VIN_UV_WARN_LIMIT)); - smb_write_word(PMBUS_VIN_OV_FAULT_LIMIT, int_2_slinear11(TPS546_INIT_VIN_OV_FAULT_LIMIT)); + ESP_LOGI(TAG, "Setting VIN"); + smb_write_word(PMBUS_VIN_ON, float_2_slinear11(11.5)); + smb_write_word(PMBUS_VIN_OFF, float_2_slinear11(TPS546_INIT_VIN_OFF)); + smb_write_word(PMBUS_VIN_UV_WARN_LIMIT, float_2_slinear11(TPS546_INIT_VIN_UV_WARN_LIMIT)); + smb_write_word(PMBUS_VIN_OV_FAULT_LIMIT, float_2_slinear11(TPS546_INIT_VIN_OV_FAULT_LIMIT)); smb_write_byte(PMBUS_VIN_OV_FAULT_RESPONSE, TPS546_INIT_VIN_OV_FAULT_RESPONSE); /* vout voltage */ + ESP_LOGI(TAG, "Setting VOUT"); smb_write_word(PMBUS_VOUT_SCALE_LOOP, TPS546_INIT_SCALE_LOOP); /* no conversion necessary */ - smb_write_word(PMBUS_VOUT_MAX, int_2_slinear11(TPS546_INIT_VOUT_MAX)); - smb_write_word(PMBUS_VOUT_OV_FAULT_LIMIT, int_2_slinear11(TPS546_INIT_VOUT_OV_FAULT_LIMIT)); - smb_write_word(PMBUS_VOUT_OV_WARN_LIMIT, int_2_slinear11(TPS546_INIT_VOUT_OV_WARN_LIMIT)); - //TODO enable this someplace smb_write_word(PMBUS_VOUT_COMMAND, int_2_slinear11(TPS546_INIT_VOUT_COMMAND)); - smb_write_word(PMBUS_VOUT_UV_WARN_LIMIT, int_2_slinear11(TPS546_INIT_VOUT_UV_WARN_LIMIT)); - smb_write_word(PMBUS_VOUT_UV_FAULT_LIMIT, int_2_slinear11(TPS546_INIT_VOUT_UV_FAULT_LIMIT)); - smb_write_word(PMBUS_VOUT_MIN, int_2_slinear11(TPS546_INIT_VOUT_MIN)); + ESP_LOGI(TAG, "VOUT_COMMAND"); + smb_write_word(PMBUS_VOUT_COMMAND, float_2_ulinear16(TPS546_INIT_VOUT_COMMAND)); + ESP_LOGI(TAG, "VOUT_MAX"); + smb_write_word(PMBUS_VOUT_MAX, float_2_ulinear16(TPS546_INIT_VOUT_MAX)); + ESP_LOGI(TAG, "VOUT_MAX_OV_FAULT_LIMIT"); + smb_write_word(PMBUS_VOUT_OV_FAULT_LIMIT, float_2_ulinear16(TPS546_INIT_VOUT_OV_FAULT_LIMIT)); + ESP_LOGI(TAG, "VOUT_OV_WARN_LIMIT"); + //smb_write_word(PMBUS_VOUT_OV_WARN_LIMIT, float_2_ulinear16(TPS546_INIT_VOUT_OV_WARN_LIMIT)); + ESP_LOGI(TAG, "VOUT_UV_WARN_LIMIT"); + //smb_write_word(PMBUS_VOUT_UV_WARN_LIMIT, float_2_ulinear16(TPS546_INIT_VOUT_UV_WARN_LIMIT)); + ESP_LOGI(TAG, "VOUT_UV_FAULT_LIMIT"); + smb_write_word(PMBUS_VOUT_UV_FAULT_LIMIT, float_2_ulinear16(TPS546_INIT_VOUT_UV_FAULT_LIMIT)); + ESP_LOGI(TAG, "VOUT_MIN"); + smb_write_word(PMBUS_VOUT_MIN, float_2_ulinear16(TPS546_INIT_VOUT_MIN)); /* iout current */ - smb_write_word(PMBUS_IOUT_OC_WARN_LIMIT, int_2_slinear11(TPS546_INIT_IOUT_OC_WARN_LIMIT)); - smb_write_word(PMBUS_IOUT_OC_FAULT_LIMIT, int_2_slinear11(TPS546_INIT_IOUT_OC_FAULT_LIMIT)); + ESP_LOGI(TAG, "Setting IOUT"); + smb_write_word(PMBUS_IOUT_OC_WARN_LIMIT, float_2_slinear11(TPS546_INIT_IOUT_OC_WARN_LIMIT)); + smb_write_word(PMBUS_IOUT_OC_FAULT_LIMIT, float_2_slinear11(TPS546_INIT_IOUT_OC_FAULT_LIMIT)); smb_write_byte(PMBUS_IOUT_OC_FAULT_RESPONSE, TPS546_INIT_IOUT_OC_FAULT_RESPONSE); /* temperature */ + ESP_LOGI(TAG, "Setting TEMPERATURE"); + ESP_LOGI(TAG, "OT_WARN_LIMIT"); smb_write_word(PMBUS_OT_WARN_LIMIT, int_2_slinear11(TPS546_INIT_OT_WARN_LIMIT)); + ESP_LOGI(TAG, "OT_FAULT_LIMIT"); smb_write_word(PMBUS_OT_FAULT_LIMIT, int_2_slinear11(TPS546_INIT_OT_FAULT_LIMIT)); + ESP_LOGI(TAG, "OT_FAULT_RESPONSE"); smb_write_byte(PMBUS_OT_FAULT_RESPONSE, TPS546_INIT_OT_FAULT_RESPONSE); /* timing */ + ESP_LOGI(TAG, "Setting TIMING"); + ESP_LOGI(TAG, "TON_DELAY"); smb_write_word(PMBUS_TON_DELAY, int_2_slinear11(TPS546_INIT_TON_DELAY)); + ESP_LOGI(TAG, "TON_RISE"); smb_write_word(PMBUS_TON_RISE, int_2_slinear11(TPS546_INIT_TON_RISE)); + ESP_LOGI(TAG, "TON_MAX_FAULT_LIMIT"); smb_write_word(PMBUS_TON_MAX_FAULT_LIMIT, int_2_slinear11(TPS546_INIT_TON_MAX_FAULT_LIMIT)); smb_write_byte(PMBUS_TON_MAX_FAULT_RESPONSE, TPS546_INIT_TON_MAX_FAULT_RESPONSE); smb_write_word(PMBUS_TOFF_DELAY, int_2_slinear11(TPS546_INIT_TOFF_DELAY)); smb_write_word(PMBUS_TOFF_FALL, int_2_slinear11(TPS546_INIT_TOFF_FALL)); - /* Stack/sync config */ - smb_write_word(PMBUS_STACK_CONFIG, INIT_STACK_CONFIG); - smb_write_word(PMBUS_SYNC_CONFIG, INIT_SYNC_CONFIG); - /* Compensation config */ - smb_write_block(PMBUS_COMPENSATION_CONFIG, COMPENSATION_CONFIG, 5); + //ESP_LOGI(TAG, "COMPENSATION"); + //smb_write_block(PMBUS_COMPENSATION_CONFIG, COMPENSATION_CONFIG, 5); /* Slave address */ - smb_write_byte(PMBUS_SLAVE_ADDRESS, TPS546_I2CADDR); + //smb_write_byte(PMBUS_SLAVE_ADDRESS, TPS546_I2CADDR); /* configure the bootup behavior regarding pin detect values vs NVM values */ + ESP_LOGI(TAG, "Setting PIN_DETECT_OVERRIDE"); smb_write_word(PMBUS_PIN_DETECT_OVERRIDE, INIT_PIN_DETECT_OVERRIDE); /* TODO write new MFR_REVISION number to reflect these parameters */ + ESP_LOGI(TAG, "Writing MFR ID"); + smb_write_block(PMBUS_MFR_ID, MFR_ID, 3); + ESP_LOGI(TAG, "Writing MFR MODEL"); + smb_write_block(PMBUS_MFR_ID, MFR_MODEL, 3); + ESP_LOGI(TAG, "Writing MFR REVISION"); + smb_write_block(PMBUS_MFR_ID, MFR_REVISION, 3); /* store configuration in NVM */ - smb_write_byte(PMBUS_STORE_USER_ALL, 0xFF); + ESP_LOGI(TAG, "---Saving new config---"); + //smb_write_byte(PMBUS_STORE_USER_ALL, 0xFF); } @@ -556,7 +650,7 @@ void TPS546_set_vout(int millivolts) ESP_LOGI(TAG, "ERR- Voltage requested is out of range"); } else { /* set the output voltage */ - value = int_2_ulinear16(millivolts); + value = float_2_ulinear16((float)(millivolts / 1000)); smb_write_word(PMBUS_VOUT_COMMAND, value); ESP_LOGI(TAG, "Vout changed to %d mV", millivolts); @@ -569,65 +663,62 @@ void TPS546_set_vout(int millivolts) void TPS546_show_voltage_settings(void) { uint16_t u16_value; - int i_value; - int millivolts; + float f_value; ESP_LOGI(TAG, "-----------VOLTAGE---------------------"); /* VIN_ON SLINEAR11 */ smb_read_word(PMBUS_VIN_ON, &u16_value); - i_value = slinear11_2_int(u16_value); - ESP_LOGI(TAG, "VIN ON set to: %d", i_value); + f_value = slinear11_2_float(u16_value); + ESP_LOGI(TAG, "VIN ON set to: %f", f_value); /* VIN_OFF SLINEAR11 */ smb_read_word(PMBUS_VIN_OFF, &u16_value); - i_value = slinear11_2_int(u16_value); - ESP_LOGI(TAG, "VIN OFF set to: %d", i_value); + f_value = slinear11_2_float(u16_value); + ESP_LOGI(TAG, "VIN OFF set to: %f", f_value); /* VOUT_MAX */ smb_read_word(PMBUS_VOUT_MAX, &u16_value); - i_value = ulinear16_2_int(u16_value); - ESP_LOGI(TAG, "Vout Max set to: %d mV", i_value); + f_value = ulinear16_2_float(u16_value); + ESP_LOGI(TAG, "Vout Max set to: %f V", f_value); /* VOUT_OV_FAULT_LIMIT */ smb_read_word(PMBUS_VOUT_OV_FAULT_LIMIT, &u16_value); - i_value = ulinear16_2_int(u16_value); - ESP_LOGI(TAG, "Vout OV Fault Limit: %d mV", i_value); + f_value = ulinear16_2_float(u16_value); + ESP_LOGI(TAG, "Vout OV Fault Limit: %f V", f_value); /* VOUT_OV_WARN_LIMIT */ smb_read_word(PMBUS_VOUT_OV_WARN_LIMIT, &u16_value); - i_value = ulinear16_2_int(u16_value); - ESP_LOGI(TAG, "Vout OV Warn Limit: %d mV", i_value); + f_value = ulinear16_2_float(u16_value); + ESP_LOGI(TAG, "Vout OV Warn Limit: %f V", f_value); /* VOUT_MARGIN_HIGH */ smb_read_word(PMBUS_VOUT_MARGIN_HIGH, &u16_value); - i_value = ulinear16_2_int(u16_value); - ESP_LOGI(TAG, "Vout Margin HIGH: %d mV", i_value); + f_value = ulinear16_2_float(u16_value); + ESP_LOGI(TAG, "Vout Margin HIGH: %f V", f_value); /* --- VOUT_COMMAND --- */ smb_read_word(PMBUS_VOUT_COMMAND, &u16_value); - millivolts = ulinear16_2_int(u16_value); - ESP_LOGI(TAG, "Vout set to: %d mV", millivolts); - //u16_value = int_2_ulinear16(millivolts); - //ESP_LOGI(TAG, "Converted back: %04x", u16_value); + f_value = ulinear16_2_float(u16_value); + ESP_LOGI(TAG, "Vout set to: %f V", f_value); /* VOUT_MARGIN_LOW */ smb_read_word(PMBUS_VOUT_MARGIN_LOW, &u16_value); - i_value = ulinear16_2_int(u16_value); - ESP_LOGI(TAG, "Vout Margin LOW: %d mV", i_value); + f_value = ulinear16_2_float(u16_value); + ESP_LOGI(TAG, "Vout Margin LOW: %f V", f_value); /* VOUT_UV_WARN_LIMIT */ smb_read_word(PMBUS_VOUT_UV_WARN_LIMIT, &u16_value); - i_value = ulinear16_2_int(u16_value); - ESP_LOGI(TAG, "Vout UV Warn Limit: %d mV", i_value); + f_value = ulinear16_2_float(u16_value); + ESP_LOGI(TAG, "Vout UV Warn Limit: %f V", f_value); /* VOUT_UV_FAULT_LIMIT */ smb_read_word(PMBUS_VOUT_UV_FAULT_LIMIT, &u16_value); - i_value = ulinear16_2_int(u16_value); - ESP_LOGI(TAG, "Vout UV Fault Limit: %d mV", i_value); + f_value = ulinear16_2_float(u16_value); + ESP_LOGI(TAG, "Vout UV Fault Limit: %f V", f_value); /* VOUT_MIN */ smb_read_word(PMBUS_VOUT_MIN, &u16_value); - i_value = ulinear16_2_int(u16_value); - ESP_LOGI(TAG, "Vout Min set to: %d mV", i_value); + f_value = ulinear16_2_float(u16_value); + ESP_LOGI(TAG, "Vout Min set to: %f V", f_value); } diff --git a/main/TPS546.h b/main/TPS546.h index b64a3f28..c45fb4d4 100644 --- a/main/TPS546.h +++ b/main/TPS546.h @@ -17,25 +17,25 @@ #define TPS546_INIT_FREQUENCY 650 /* KHz */ /* vin voltage */ -#define TPS546_INIT_VIN_ON 11900 /* mV */ -#define TPS546_INIT_VIN_OFF 11000 /* mV */ -#define TPS546_INIT_VIN_UV_WARN_LIMIT 11000 /* mV */ -#define TPS546_INIT_VIN_OV_FAULT_LIMIT 14000 /* mV */ +#define TPS546_INIT_VIN_ON 11.5 /* V */ +#define TPS546_INIT_VIN_OFF 11.0 /* V */ +#define TPS546_INIT_VIN_UV_WARN_LIMIT 11.0 /* V */ +#define TPS546_INIT_VIN_OV_FAULT_LIMIT 14.0 /* V */ #define TPS546_INIT_VIN_OV_FAULT_RESPONSE 0xB7 /* retry 6 times */ /* vout voltage */ #define TPS546_INIT_SCALE_LOOP 0xC808 /* 0.125 */ -#define TPS546_INIT_VOUT_MAX 4500 /* mV */ -#define TPS546_INIT_VOUT_OV_FAULT_LIMIT 4500 /* mV */ -#define TPS546_INIT_VOUT_OV_WARN_LIMIT 4400 /* mV */ -#define TPS546_INIT_VOUT_COMMAND 3600 /* mV */ -#define TPS546_INIT_VOUT_UV_WARN_LIMIT 3100 /* mV */ -#define TPS546_INIT_VOUT_UV_FAULT_LIMIT 3000 /* mV */ -#define TPS546_INIT_VOUT_MIN 3000 /* mv */ +#define TPS546_INIT_VOUT_MAX 5.00 /* V */ +#define TPS546_INIT_VOUT_OV_FAULT_LIMIT 1.20 /* V relative to VOUT_COMMAND */ +#define TPS546_INIT_VOUT_OV_WARN_LIMIT 0.90 /* V relative to VOUT_COMMAND */ +#define TPS546_INIT_VOUT_COMMAND 3.60 /* V absolute value */ +#define TPS546_INIT_VOUT_UV_WARN_LIMIT 0.50 /* V relative to VOUT_COMMAND */ +#define TPS546_INIT_VOUT_UV_FAULT_LIMIT 0.60 /* V relative to VOUT_COMMAND */ +#define TPS546_INIT_VOUT_MIN 3.00 /* v */ /* iout current */ -#define TPS546_INIT_IOUT_OC_WARN_LIMIT 25000 /* mA */ -#define TPS546_INIT_IOUT_OC_FAULT_LIMIT 30000 /* mA */ +#define TPS546_INIT_IOUT_OC_WARN_LIMIT 25.00 /* A */ +#define TPS546_INIT_IOUT_OC_FAULT_LIMIT 30.00 /* A */ #define TPS546_INIT_IOUT_OC_FAULT_RESPONSE 0xC0 /* shut down, no retries */ /* temperature */