大家好!
我是 ADS8681 ADC 的新用户、也是此类 ADC 的新用户阅读数据表后、我有一些问题请帮助我
1) 1)我尝试读取 ADC 值、这里是+- ADC、所以分辨率值如何变化(我读取了数据表、但不明白)。
2)配置 ADC +-1.25*ADC 的编程流程是什么 Vref (我们正在使用内部参考) (需要哪个寄存器来配置)使用哪个命令来设置 Hword 或 Write 等寄存器。 以及我如何创建寄存器值。
3) 3)我正在使用 Beagle Bone Black 来连接 ADC、因此我正在使用 C 代码、现在我不进行任何配置、因此当我通过 SPI 读取时、3.3V 输入的分辨率约为41795、0v/ GND 的分辨率约为32764、这是正确的吗?
4)什么是计算带+- ADC 分辨率的电压的公式(我知道正常的公式、即 Vout=(Vref/ 2^no of bits ADC)*分辨率值)、但我认为它不能与此一起工作。
我正在使用以下代码
#包含
#包含
#包含
#包含
#包含
#包含
#包含
#包含
#define SPI_DEVICE "/dev/spidev1.0
#define SPI_MODE SPI_MODE_0
#define SPI_SPEED 100000 // 100 kHz
INT SPI_FD;
//用于初始化 SPI 通信的函数
int spi_init(){
SPI_FD =开路(SPI_DEVICE、O_RDWR);
如果(SPI_FD => 1){
perror ("Error opening SPI device");
返回-1;
}
uint8_t mode = SPI_MODE;
if (ioctl (SPI_FD、SPI_IOC_WR_MODE、&MODE)==-1){
perror ("Error setting SPI mode"(设置 SPI 模式时出错);
关闭(SPI_FD);
返回-1;
}
uint32_t speed = SPI_SPEED;
如果(ioctl (SPI_FD、SPI_IOC_WR_MAX_SPEED_Hz、&SPEED)=-1){
perror ("Error setting SPI speed");
关闭(SPI_FD);
返回-1;
}
返回0;
}
//通过 SPI 传输数据的函数
void spi_transmit (uint16_t * data、size_t len){
结构 SPI_IOC_TRANSMIT ={
.tx_buf =(无符号长整型)数据、
.len = len、
};
if (ioctl (SPI_FD、SPI_IOC_MESSAGE (1)、&TRANSMIT)==-1){
perror ("传输 SPI 数据时出错");
}
}
//通过 SPI 接收数据的函数
void spi_receive (uint16_t * data、size_t len){
结构 SPI_IOC_TRANSMIT ={
rx_buf =(无符号长整型)数据、
.len = len、
};
if (ioctl (SPI_FD、SPI_IOC_MESSAGE (1)、&TRANSMIT)==-1){
perror ("Error receiving SPI data");
}
}
//关闭 SPI 通信功能
void spi_close(){
关闭(SPI_FD);
}
int main(){
如果(spi_init ()==-1){
返回1;
}
//示例数据
uint16_t TX_DATA[]={0x0000};
size_t len = sizeof (TX_DATA);
//发送数据
SPI_TRANSMIT (TX_DATA、len);
while (1)
{
//接收数据
uint16_t rx_data[len];
SPI_RECEIVE (Rx_DATA、len);
printf("以十进制格式收到的数据:");
for (size_t i = 0;i < len;++i){
printf ("%d "、rx_data[i]);
}
printf("\n");
printf ("十六进制接收的数据:");
for (size_t i = 0;i < len;++i){
printf ("0x%X"、RX_DATA[i]);
}
printf("\n");
usleep (1000000);
}
//关闭 SPI 通信
SPI_CLOSE();
返回0;
}
6) 6)如果有任何人具有 ADS8681或其库/驱动程序的 C 代码、请提供给我。