主题中讨论的其他器件: ADS131M04
工具与软件:
大家好、您好吗?
我对 ADS131M08的配置和数据读取有一些问题。 我使用这个 ADC 已经有很短的时间了、但是遇到了一些困难。 我相信我已正确配置了 ADC 以用于连续读数、但即使更改模拟输入值、我也看不到任何值(示波器上的位)变化。
我使用的是 ST 微控制器、到目前为止、我已经能够写入寄存器并读回它们以验证写入情况。 我设法通过命令而不是引脚将其复位。 我现在要执行连续数据读取。 我要更改模拟输入值并使用示波器监视 SPI 通信、但与模拟读数值相对应的帧不会改变。
我已将程序配置为在 AI1上只读取、而 ADC 发送的 SPI 字由10个帧组成、其中帧3至10是模拟输入、我不知道前两个帧代表什么。 请帮帮我。
void reset_ads (void) { HAL_SPI_Transmit(&hspi3, reset, 3, 100); int i = 0; int num_repeticoes = 9; while (i < num_repeticoes) { HAL_SPI_Receive(&hspi3, data_readed, 3, 100); data_readed[0] = 0b00000000; data_readed[1] = 0b00000000; data_readed[2] = 0b00000000; i++; } } void standby (void) { uint8_t standby [3]; standby [0] = 0b00000000; standby [1] = 0b00100010; standby [2] = 0b00000000; HAL_SPI_Transmit (&hspi3, standby, 3, 100); } int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); MX_SPI3_Init(); MX_UART4_Init(); MX_UART5_Init(); pre_data [0] = 0b10100001; pre_data [1] = 0b10000000; pre_data [2] = 0b00000000; data_readed [0] = 0b00000000; data_readed [1] = 0b00000000; data_readed [2] = 0b00000000; reset [0] = 0b00000000; reset [1] = 0b00010001; reset [2] = 0b00000000; wrdata[0] = 0b01100001; wrdata[1] = 0b10000000; wrdata[2] = 0b00000000; clkreg [0] = 0b00000010; clkreg [1] = 0b01001110; clkreg [2] = 0b00000000; //-------------------- reset_ads(); HAL_Delay(1); //STAND-BY HAL_GPIO_WritePin (CS_ADS131M08_GPIO_Port, CS_ADS131M08_Pin, GPIO_PIN_RESET); standby(); HAL_Delay(1); HAL_GPIO_WritePin (CS_ADS131M08_GPIO_Port, CS_ADS131M08_Pin, GPIO_PIN_SET); //CONFIGURAÇÃO DOS CANAIS DE LEITURA DO ADC EM 03H HAL_GPIO_WritePin (CS_ADS131M08_GPIO_Port, CS_ADS131M08_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit (&hspi3, wrdata, 3, 100); //WRITE IN 03H asm("nop"); HAL_SPI_Transmit (&hspi3, clkreg, 3, 100); //DATA 03H HAL_GPIO_WritePin (CS_ADS131M08_GPIO_Port, CS_ADS131M08_Pin, GPIO_PIN_SET); //WAKEUP ADC HAL_GPIO_WritePin (CS_ADS131M08_GPIO_Port, CS_ADS131M08_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit (&hspi3, wakeup, 3, 100); //COMANDO WAKEUP HAL_GPIO_WritePin (CS_ADS131M08_GPIO_Port, CS_ADS131M08_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin (CS_ADS131M08_GPIO_Port, CS_ADS131M08_Pin, GPIO_PIN_RESET); data_readed [0] = 0b00000000; data_readed [1] = 0b00000000; data_readed [2] = 0b00000000; while (1) { int i = 0; int num_repeticoes = 10; while (i < num_repeticoes) { HAL_SPI_Receive(&hspi3, data_readed, 3, 100); data_readed[0] = 0b00000000; data_readed[1] = 0b00000000; data_readed[2] = 0b00000000; i++; } } }