43#define CHIP_NAME "Microchip MCP3421"
44#define MANUFACTURER_NAME "Microchip"
45#define SUPPLY_VOLTAGE_MIN 2.7f
46#define SUPPLY_VOLTAGE_MAX 5.5f
47#define MAX_CURRENT 10.0f
48#define TEMPERATURE_MIN -40.0f
49#define TEMPERATURE_MAX 125.0f
50#define DRIVER_VERSION 1000
55#define MCP3421_ADDRESS (0xD0)
67static uint8_t a_mcp3421_iic_read(
mcp3421_handle_t *handle, uint8_t *buf, uint16_t len)
89static uint8_t a_mcp3421_iic_write(
mcp3421_handle_t *handle, uint8_t *buf, uint16_t len)
123 handle->
debug_print(
"mcp3421: iic_init is null.\n");
129 handle->
debug_print(
"mcp3421: iic_deinit is null.\n");
135 handle->
debug_print(
"mcp3421: iic_read_cmd is null.\n");
141 handle->
debug_print(
"mcp3421: iic_write_cmd is null.\n");
147 handle->
debug_print(
"mcp3421: delay_ms is null.\n");
154 handle->
debug_print(
"mcp3421: iic init failed.\n");
188 res = a_mcp3421_iic_read(handle, buf, 4);
191 handle->
debug_print(
"mcp3421: read config failed.\n");
196 res = a_mcp3421_iic_write(handle, &buf[3], 1);
199 handle->
debug_print(
"mcp3421: write config failed.\n");
206 handle->
debug_print(
"mcp3421: iic deinit failed.\n");
240 res = a_mcp3421_iic_read(handle, buf, 4);
243 handle->
debug_print(
"mcp3421: read config failed.\n");
247 buf[3] &= ~(0x03 << 2);
248 buf[3] |= adc_bit << 2;
249 res = a_mcp3421_iic_write(handle, &buf[3], 1);
252 handle->
debug_print(
"mcp3421: write config failed.\n");
285 res = a_mcp3421_iic_read(handle, buf, 4);
288 handle->
debug_print(
"mcp3421: read config failed.\n");
322 res = a_mcp3421_iic_read(handle, buf, 4);
325 handle->
debug_print(
"mcp3421: read config failed.\n");
329 buf[3] &= ~(0x03 << 0);
331 res = a_mcp3421_iic_write(handle, &buf[3], 1);
334 handle->
debug_print(
"mcp3421: write config failed.\n");
367 res = a_mcp3421_iic_read(handle, buf, 4);
370 handle->
debug_print(
"mcp3421: read config failed.\n");
398 uint32_t timeout = 500;
409 res = a_mcp3421_iic_read(handle, buf, 4);
412 handle->
debug_print(
"mcp3421: read config failed.\n");
418 res = a_mcp3421_iic_write(handle, &buf[3], 1);
421 handle->
debug_print(
"mcp3421: write config failed.\n");
431 if (((adc_bit >> 2) & 0x3) == 3)
433 res = a_mcp3421_iic_read(handle, buf, 4);
436 handle->
debug_print(
"mcp3421: read config failed.\n");
440 if (((buf[3] >> 7) & 0x1) == 0)
447 res = a_mcp3421_iic_read(handle, buf, 3);
450 handle->
debug_print(
"mcp3421: read config failed.\n");
454 if (((buf[2] >> 7) & 0x01) == 0)
466 if (((adc_bit >> 2) & 0x3) == 3)
468 if (((buf[0] >> 1) & 0x01) != 0)
470 *raw = (int32_t)(((uint32_t)(buf[0] & 0x3) << 16) |
471 ((uint32_t)buf[1] << 8) |
472 ((uint32_t)buf[2] << 0) |
473 ((uint32_t)0xFF << 24) |
474 ((uint32_t)0xFC << 16));
478 *raw = (int32_t)(((uint32_t)(buf[0] & 0x3) << 16) |
479 ((uint32_t)buf[1] << 8) |
480 ((uint32_t)buf[2] << 0));
482 *v = (double)(*raw) * 2.048 / (pow(2, 17) * pow(2, pga));
484 else if (((adc_bit >> 2) & 0x3) == 2)
486 if (((buf[0] >> 7) & 0x01) != 0)
488 *raw = (int32_t)(((uint32_t)buf[0] << 8) |
489 ((uint32_t)buf[1] << 0) |
490 ((uint32_t)0xFF << 24) |
491 ((uint32_t)0xFF << 16));
495 *raw = (int32_t)(((uint32_t)buf[0] << 8) |
496 ((uint32_t)buf[1] << 0));
498 *v = (double)(*raw) * 2.048 / (pow(2, 15) * pow(2, pga));
500 else if (((adc_bit >> 2) & 0x3) == 1)
502 if (((buf[0] >> 6) & 0x01) != 0)
504 *raw = (int32_t)(((uint32_t)buf[0] << 8) |
505 ((uint32_t)buf[1] << 0) |
506 ((uint32_t)0xFF << 24) |
507 ((uint32_t)0xFF << 16));
511 *raw = (int32_t)(((uint32_t)buf[0] << 8) |
512 ((uint32_t)buf[1] << 0));
514 *v = (double)(*raw) * 2.048 / (pow(2, 13) * pow(2, pga));
518 if (((buf[0] >> 5) & 0x01) != 0)
520 *raw = (int32_t)(((uint32_t)buf[0] << 8) |
521 ((uint32_t)buf[1] << 0) |
522 ((uint32_t)0xFF << 24) |
523 ((uint32_t)0xFF << 16));
527 *raw = (int32_t)(((uint32_t)buf[0] << 8) |
528 ((uint32_t)buf[1] << 0));
530 *v = (double)(*raw) * 2.048 / (pow(2, 11) * pow(2, pga));
566 pga = handle->
config & 0x3;
567 if (((adc_bit >> 2) & 0x3) == 3)
569 res = a_mcp3421_iic_read(handle, buf, 4);
572 handle->
debug_print(
"mcp3421: read config failed.\n");
579 res = a_mcp3421_iic_read(handle, buf, 3);
582 handle->
debug_print(
"mcp3421: read config failed.\n");
588 if (((adc_bit >> 2) & 0x3) == 3)
590 if (((buf[0] >> 1) & 0x01) != 0)
592 *raw = (int32_t)(((uint32_t)(buf[0] & 0x3) << 16) |
593 ((uint32_t)buf[1] << 8) |
594 ((uint32_t)buf[2] << 0) |
595 ((uint32_t)0xFF << 24) |
596 ((uint32_t)0xFC << 16));
600 *raw = (int32_t)(((uint32_t)(buf[0] & 0x3) << 16) |
601 ((uint32_t)buf[1] << 8) |
602 ((uint32_t)buf[2] << 0));
604 *v = (double)(*raw) * 2.048 / (pow(2, 17) * pow(2, pga));
606 else if (((adc_bit >> 2) & 0x3) == 2)
608 if (((buf[0] >> 7) & 0x01) != 0)
610 *raw = (int32_t)(((uint32_t)buf[0] << 8) |
611 ((uint32_t)buf[1] << 0) |
612 ((uint32_t)0xFF << 24) |
613 ((uint32_t)0xFF << 16));
617 *raw = (int32_t)(((uint32_t)buf[0] << 8) |
618 ((uint32_t)buf[1] << 0));
620 *v = (double)(*raw) * 2.048 / (pow(2, 15) * pow(2, pga));
622 else if (((adc_bit >> 2) & 0x3) == 1)
624 if (((buf[0] >> 6) & 0x01) != 0)
626 *raw = (int32_t)(((uint32_t)buf[0] << 8) |
627 ((uint32_t)buf[1] << 0) |
628 ((uint32_t)0xFF << 24) |
629 ((uint32_t)0xFF << 16));
633 *raw = (int32_t)(((uint32_t)buf[0] << 8) |
634 ((uint32_t)buf[1] << 0));
636 *v = (double)(*raw) * 2.048 / (pow(2, 13) * pow(2, pga));
640 if (((buf[0] >> 5) & 0x01) != 0)
642 *raw = (int32_t)(((uint32_t)buf[0] << 8) |
643 ((uint32_t)buf[1] << 0) |
644 ((uint32_t)0xFF << 24) |
645 ((uint32_t)0xFF << 16));
649 *raw = (int32_t)(((uint32_t)buf[0] << 8) |
650 ((uint32_t)buf[1] << 0));
652 *v = (double)(*raw) * 2.048 / (pow(2, 11) * pow(2, pga));
682 res = a_mcp3421_iic_read(handle, buf, 4);
685 handle->
debug_print(
"mcp3421: read config failed.\n");
691 res = a_mcp3421_iic_write(handle, &buf[3], 1);
694 handle->
debug_print(
"mcp3421: write config failed.\n");
727 res = a_mcp3421_iic_read(handle, buf, 4);
730 handle->
debug_print(
"mcp3421: read config failed.\n");
735 res = a_mcp3421_iic_write(handle, &buf[3], 1);
738 handle->
debug_print(
"mcp3421: write config failed.\n");
770 return a_mcp3421_iic_write(handle, buf, len);
796 return a_mcp3421_iic_read(handle, buf, len);
#define SUPPLY_VOLTAGE_MAX
#define MANUFACTURER_NAME
#define SUPPLY_VOLTAGE_MIN
#define MCP3421_ADDRESS
iic address definition
#define CHIP_NAME
chip information definition
driver mcp3421 header file
uint8_t mcp3421_get_adc_bit(mcp3421_handle_t *handle, mcp3421_bit_t *adc_bit)
get the adc bit
uint8_t mcp3421_set_pga(mcp3421_handle_t *handle, mcp3421_pga_t pga)
set the adc pga
uint8_t mcp3421_set_adc_bit(mcp3421_handle_t *handle, mcp3421_bit_t adc_bit)
set the adc bit
uint8_t mcp3421_start_continuous_read(mcp3421_handle_t *handle)
start the chip reading
mcp3421_pga_t
mcp3421 pga enumeration definition
uint8_t mcp3421_single_read(mcp3421_handle_t *handle, int32_t *raw, double *v)
read data from the chip once
uint8_t mcp3421_init(mcp3421_handle_t *handle)
initialize the chip
uint8_t mcp3421_deinit(mcp3421_handle_t *handle)
close the chip
uint8_t mcp3421_stop_continuous_read(mcp3421_handle_t *handle)
stop the chip reading
uint8_t mcp3421_continuous_read(mcp3421_handle_t *handle, int32_t *raw, double *v)
read data from the chip continuously
uint8_t mcp3421_get_pga(mcp3421_handle_t *handle, mcp3421_pga_t *pga)
get the adc pga
mcp3421_bit_t
mcp3421 bit enumeration definition
struct mcp3421_handle_s mcp3421_handle_t
mcp3421 handle structure definition
struct mcp3421_info_s mcp3421_info_t
mcp3421 information structure definition
uint8_t mcp3421_info(mcp3421_info_t *info)
get chip's information
uint8_t mcp3421_set_reg(mcp3421_handle_t *handle, uint8_t *buf, uint16_t len)
set the chip register
uint8_t mcp3421_get_reg(mcp3421_handle_t *handle, uint8_t *buf, uint16_t len)
get the chip register
void(* delay_ms)(uint32_t ms)
void(* debug_print)(const char *const fmt,...)
uint8_t(* iic_init)(void)
uint8_t(* iic_read_cmd)(uint8_t addr, uint8_t *buf, uint16_t len)
uint8_t(* iic_deinit)(void)
uint8_t(* iic_write_cmd)(uint8_t addr, uint8_t *buf, uint16_t len)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v