目录
分享下AD1263驱动相关,调试下来存在几个问题,以下问题是在ADC1连续模式下出现的 1、采样率设置过高了数据会飘的很厉害(暂时不清楚是配置问题还是什么问题) 2、采样时,数据偶现负值(数据最高位为1)或大于该采样点的值。(上述采样的是直流信号)。 希望有这方面经验的大佬可以评论区指点指点。
1、ADS1263命令码
2、串行通讯方式---SPI
可通过SPI来对设备进行读AD采样数据,以及配置寄存器相关。使用SPI1模式,下降沿采样
2.1 SPI读写函数
2.11 模拟SPI读
uint8_t spi_read_byte(void)
{
uint8_t i = 0;
uint8_t read = 0XFF;
for (i = 0; i < 8; i++) {
read = read << 1;
delay_us(6);
ADS_SCK(1);
delay_us(6);
if (READ_DO()) {
read = read + 1;
}
ADS_SCK(0);
}
return read;
}
2.12 模拟SPI写
void spi_write_byte(uint8_t data)
{
uint8_t i;
for (i = 0; i < 8; i++) {
ADS_SCK(1);
if (data & 0x80) {
ADS_DIN(1);
} else {
ADS_DIN(0);
}
data = data << 1;
delay_us(6);
ADS_SCK(0);
delay_us(6);
}
}
3.1 ADS1263读写函数
根据AD1263命令码以及手册时序图,可将SPI读写函数封装一层
3.11 ADS1263读数据时序
3.12 ADS1263读寄存器时序
3.13 ADS1263写寄存器时序
3.14 ADS1263读写寄存器函数
void ads1263_write_command(uint8_t command)
{
ADS_CS(0);
delay_us(10);
spi_write_byte(command);
ADS_CS(1);
delay_us(10);
}
uint8_t ads1263_read_one_reg(uint8_t regAddr)
{
uint8_t temp = 0x00;
uint8_t recData = 0x00;
/* 由读命令位 + 寄存器地址 */
temp = ADS126X_RREG_COMMAND | regAddr;
ADS_CS(0);
delay_us(10);
spi_write_byte(temp);
spi_write_byte(0x00);
recData = spi_read_byte();
ADS_CS(1);
delay_us(10);
return recData;
}
void ads1263_write_one_reg(uint8_t regAddr, uint8_t data)
{
uint8_t temp = 0x00;
/* 由写命令位 + 寄存器地址 */
temp= ADS126X_WREG_COMMAND | regAddr;
ADS_CS(0);
delay_us(10);
spi_write_byte(temp);
spi_write_byte(0x00);
spi_write_byte(data);
delay_us(10);
ADS_CS(1);
delay_us(10);
}