请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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;
}
此致
阿南德·罗山