This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADS1120-Q1:ADS1120-Q1通信:回读数据始终为0xFF

Guru**** 2387080 points
Other Parts Discussed in Thread: ADS1120-Q1
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1239116/ads1120-q1-ads1120-q1-communication-read-back-data-is-always-0xff

器件型号: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, &register_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, &register_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;
}

此致

阿南德·罗山

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Roshan:

    /DRDY 是一个指示数据是否就绪的良好输出信号、我建议您通过监控/DRDY 来检索数据。

    您能否提供带逻辑分析仪的时序图以用于寄存器写入和读取? 您的原理图也会对您有所帮助。

    此致、

    戴尔