ADS1292R和ADS1292的区别好像就是R后缀带呼吸波的阻抗匹配(好像是这样吧,没有细研究。)?由于一开始买的就是1292R,也没有注意就按照手册设计了,后面主要到的时候电路都焊完了,而且芯片还很贵不想重新买芯片了,就先用着吧,内部的寄存器什么的是一样的,使用ADS1292的同学同样可以参考一下。
1.硬件电路
硬件电路部分主要是参考了TI官方的板子来设计的,使用内部参考,默认使用内部的时钟。
2.软件驱动程序部分
Ads1292_Reset();
delay_ms(10);
id = Ads1292_Reg_Read(ADS1292_REG_ID);
printf("ID=%#X\r\n", id);
Ads1292_Reg_Write(ADS1292_REG_CONFIG1, 0x00);//Set sampling rate to 125 SPS
delay_ms(10);
Ads1292_Reg_Write(ADS1292_REG_CONFIG2, 0xA0);//Lead-off comp off,0
id = Ads1292_Reg_Read(ADS1292_REG_CONFIG2);
printf("CFG2=%#X\r\n", id);
delay_ms(10);
Ads1292_Reg_Write(ADS1292_REG_LOFF, 0x10);//Lead-off defaults
delay_ms(10);
Ads1292_Reg_Write(ADS1292_REG_CH1SET, 0x00);//Ch 1 enabled, gain 1
id = Ads1292_Reg_Read(ADS1292_REG_CH1SET);
printf("CH1=%#X\r\n", id);
delay_ms(10);
Ads1292_Reg_Write(ADS1292_REG_CH2SET, 0x00); //Ch 2 enabled, gain 1
delay_ms(10);
Ads1292_Reg_Write(ADS1292_REG_RLDSENS, 0x00); //RLD settings: off
delay_ms(10);
Ads1292_Reg_Write(ADS1292_REG_LOFFSENS, 0x00); //LOFF settings: all disabled
delay_ms(10);
Ads1292_Reg_Write(ADS1292_REG_RESP1, 0xc2); //Respiration: MOD/DEMOD turned only, phase 0
delay_ms(10);
Ads1292_Reg_Write(ADS1292_REG_RESP2, 0x03); //Respiration: Calib OFF, respiration freq defaults
delay_ms(10);
Ads1292_Reg_Write(ADS1292_REG_GPIO, 0x0C); //GPIO input
delay_ms(10);
Ads1292_Enable_Start();
ADS1292R_SPI_SETSPEED(SPI_BaudRatePrescaler_4);
上面的代码就是寄存器配置部分,主要就是读取ID寄存器,然后串口打印寄存器值,看看寄存器是否配置正常等。
/*
* @description : 写寄存器
* @param : void
* @return : void
*/
void Ads1292_Reg_Write(uint8_t reg, uint8_t data)
{
ADS1292_CS = 0;
switch (reg)
{
case 1:
data = data & 0x87;
break;
case 2:
data = data & 0xFB;
data |= 0x80;
break;
case 3:
data = data & 0xFD;
data |= 0x10;
break;
case 7:
data = data & 0x3F;
break;
case 8:
data = data & 0x5F;
break;
case 9:
data |= 0x02;
break;
case 10:
data = data & 0x87;
data |= 0x01;
break;
case 11:
data = data & 0x0F;
break;
default:
break;
}
reg |= WREG; /* 写寄存器 */
ADS1292R_SPI_READWRITEBYTE(reg); /* opcode1 */
ADS1292R_SPI_READWRITEBYTE(0); /* opcode2 1byte */
ADS1292R_SPI_READWRITEBYTE(data); /* data */
delay_ms(1);
ADS1292_CS = 1;
}
上面这部分代码就是写寄存器的部分,根据数据手册里面提供的写寄存器步骤进行写寄存器,这里面有个问题需要注意的就是读写寄存器时SPI的时钟频率不能太快,不能超过芯片内部时钟的2倍。如果使用芯片内部时钟的话就是512K,SPI时钟不能超过1M,如果使用外部的2.048M时钟的话,那么SPI的速度不能超过4.096M。读写寄存器时SPI的速度太快会造成读写不正常。
/*
* @description : 读寄存器
* @param : void
* @return : void
*/
uint8_t Ads1292_Reg_Read(uint8_t reg)
{
uint8_t data;
ADS1292_CS = 0;
ADS1292R_SPI_READWRITEBYTE(SDATAC);
reg |= RREG;
ADS1292R_SPI_READWRITEBYTE(reg); /* opcode1 */
ADS1292R_SPI_READWRITEBYTE(0x00); /* opcode2 1byte */
data = ADS1292R_SPI_READWRITEBYTE(0);
ADS1292_CS = 1;
return data; /* data */
}
上面的代码块就是读寄存器的部分了,这部分代码主要也是根据手册里的步骤进行读取寄存器操作,区别在于每次读寄存器之前要发送SDATAC命令。
需要具体的代码文件的朋友可以点击下面的链接进行下载。ads1292驱动文件
转载:https://blog.csdn.net/weixin_43980908/article/details/108856043
查看评论