工具/软件:
我是一名初学者、以前从未使用过 SPI。
您是否有用于控制的示例代码 ADC084S021 ?
如果不是、我至少需要一个 伪代码 了解如何控制它。
根据我的理解、我是否要测量输入的 ADC 值 IN2 、
我需要 通过 SPI 写入0x80 (因为 IN2对应该寄存器值)、然后 读取 数据、这应该是 IN2的 ADC 值。
但是、获取的值始终不正确、而不是预期的结果。
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.
工具/软件:
我是一名初学者、以前从未使用过 SPI。
您是否有用于控制的示例代码 ADC084S021 ?
如果不是、我至少需要一个 伪代码 了解如何控制它。
根据我的理解、我是否要测量输入的 ADC 值 IN2 、
我需要 通过 SPI 写入0x80 (因为 IN2对应该寄存器值)、然后 读取 数据、这应该是 IN2的 ADC 值。
但是、获取的值始终不正确、而不是预期的结果。
尊敬的 Jeffery:
感谢您联系我们! 该器件在前8个 SCLK 上升沿加载其控制寄存器。 因此、DIN[7:0]是完整控制寄存器、但只有 DIN[5:3]对于通道选择很重要、这对应于 ADD[2:0]位。 现在、您似乎正在将 DIN[6]设置为高电平、这样就不会对器件产生影响。 如果您想在通道之间切换、可能需要尝试发送0x00来选择通道0、发送0x08来选择通道1、发送0x10来选择通道2、或发送0x18来选择通道3。
由于此器件具有16位宽的 SPI 帧、因此您可能还 需要使用尾部为0将命令填充到16位。 您可能需要发送0x1000而不是0x10。
还应注意的是、从选择通道到完成通道转换之间存在1帧延迟。 如果在帧 n 中对 SDI 上的通道2进行编程、则通道2 的数据将在帧 n+1中通过 SDO 输出。
希望这能帮助您改变渠道、但请告诉我、以防我能提供更多帮助。
此致、
Joel
尊敬的 Joel:
感谢您的快速答复。
我之前写的0x80是一个错误。
目前、我正在使用 Windows 测量 Youyeetoo X1 SBC 上的 ADC。
Youyeetoo 为 SPI 通信提供以下接口:
公共 Int32 SPI_WriteRead (Byte[] lpWriteBuf、int32 WriteBuf_len、Byte[] lpReadBuf、int32 ReadBuf_len)
公共 Int32 SPI_FullDuplex (Byte[] lpWriteBuf、int32 WriteBuf_len、Byte[] lpReadBuf、int32 ReadBuf_len)
根据 ADC084S021数据表的8.5寄存器映射部分:
IN1对应于0x00
IN2对应于0x08
IN3对应于0x10
IN4对应于0x18
根据硬件工程师的说法、IN1、IN3和 IN4均为0V、而只有 IN2为3.3V。
要测量 IN2、I SET:
LpWriteBuf ={0x08、0x00}
然后、我使用 SPI_WriteRead 或 SPI_FullDuplex 函数写入此值并检查 lpReadBuf。
但是、未收到预期值。
由于硬件团队提到 VA 为5V、因此预期的 ADC 值应约为168到169。
但是、当我持续读取 IN2时、这些值会发生显著波动、有时读数为0、有时会超出预期范围、并表现出较大的变化。
关于 SPI 模式、我之前在这里收到了一个响应、指出 ADC 使用 SPI 模式3。
根据 Youyeetoo 提供的文档、我修改了 ASL 代码以将 SPI 模式设置为模式3。
您能给我一些建议吗?
此致、
Jeffery。