请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:ADS1120-Q1 你好
我一直使用 ADS1120-Q1读取 IN0引脚与 AVSS 间的关系 (IN1、IN2、IN3、REFN0、REFP0、DRDY 保持未使用状态、VA 接入5V、CLK 引脚连接至 GND)且配置寄存器按如下方式进行设置:
配置寄存器0:0x81
配置寄存器1:0x04
配置寄存器2:0xD8
配置寄存器3:0x00
此外、我将 遵循数据表9.1.6伪代码示例部分中所述的序列。
读回我正在读取的写入数据时发生的
配置寄存器0:0xFF
配置寄存器1:0xFE
配置寄存器2:0x80
配置寄存器3:在首次读取期间为0x7F,最终它们被左移并被0xFF 替换。
我还附上了 固件供您参考。
uint8_t rst_register = 0x06; uint8_t write_register_0 = 0x40; uint8_t read_register_0 = 0x20; uint8_t register_data[4] = {0x81,0x04,0xD8,0x00}; uint8_t register_read_data[4]; uint8_t r_data[4]; uint8_t read_adc = 0x10; uint8_t start_adc = 0x08; uint8_t raw_adc; double analog_current; HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, &rst_register,1,100); HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET); HAL_Delay(1); HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, &write_register_0,1,100); for(int i=0;i<4;i++) { HAL_SPI_Transmit(&hspi1, ®ister_data[i],1,100); } HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET); HAL_Delay(1); HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, &read_register_0,1,100); for(int i=0;i<4;i++) { HAL_SPI_Receive(&hspi1, ®ister_read_data[i],1,100); } HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET); HAL_Delay(1); LOOP: { Read_External_ADC_Digital_Value(); } void Read_External_ADC_Digital_Value(void) { HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, 0x10,1,50); for(int i=0;i<4;i++) { HAL_SPI_Receive(&hspi1, &r_data[i],1,50); } HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET); } void External_ADC_Current_Update(void) { analog_current = (raw_adc * 5000)/ 0xFFFF; // analog_current = analog_current /10; }
此致
阿南德·罗山