完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
之前温度不对的问题已经解决了,是iic时序不对;现在的主要问题是如何设置红灯和红外灯控制寄存器,采集血氧数据。还有我用的是max30102,不过这两款芯片应该差不多
|
|
|
|
确实这芯片的采集时序跟整点原子的不太一样,我的之前直接用,根本什么都读不到
|
|
|
|
你现在操作改成什么样的时序合适呢?
|
|
|
|
看那芯片的时序图是真心麻烦
|
|
|
|
[C] 纯文本查看 复制代码
int maxim_MAX30102_ReadI2C_FIFO(uint8_t REG_Address,uint8_t *Word_Data,uint8_t count){uint8_t i=0;uint8_t no=count;uint8_t data1, data2; IIC_Start(); IIC_Send_Byte(I2C_WRITE_ADDR); //·¢ËíÆ÷¼tμØÖ·+D′Ãüáî if(IIC_Wait_Ack()) //μè′yó|′e { goto RESTATE; } IIC_Send_Byte(REG_Address); //D′¼Ä′æÆ÷μØÖ· if(IIC_Wait_Ack()) //μè′yó|′e { goto RESTATE; } IIC_Start(); IIC_Send_Byte(I2C_READ_ADDR); //·¢ËíÆ÷¼tμØÖ·+¶á if(IIC_Wait_Ack()) //μè′yó|′e { goto RESTATE; }while(no){if(1==no)Word_Data=IIC_Read_Byte(0);elseWord_Data=IIC_Read_Byte(1);no--;i++;}IIC_Stop();return 1;RESTATE: IIC_Stop();return 0;}int maxim_max30102_read_fifo(uint32_t *un_red_led, uint32_t *un_ir_led)/*** brief Read a set of samples from the MAX30102 FIFO register* par Details* This function reads a set of samples from the MAX30102 FIFO register** param[out] *un_red_led - pointer that stores the red LED reading data* param[out] *un_ir_led - pointer that stores the IR LED reading data** retval true on success*/{ uint32_t un_temp; unsigned char uch_temp; *un_red_led=0; *un_ir_led=0; unsigned char ch_i2c_data[6]; //read and clear status register un_temp=MAX30102_ReadI2C(REG_INTR_STATUS_1); un_temp=MAX30102_ReadI2C(REG_INTR_STATUS_2); un_temp=0; if(maxim_MAX30102_ReadI2C_FIFO(REG_FIFO_DATA, ch_i2c_data, 6)!=1) { return false; } un_temp =(unsigned char) ch_i2c_data[0]; un_temp<<=16; *un_red_led+=un_temp; un_temp =(unsigned char) ch_i2c_data[1]; un_temp<<=8; *un_red_led+=un_temp; un_temp =(unsigned char) ch_i2c_data[2]; *un_red_led+=un_temp; un_temp=0; un_temp=(unsigned char) ch_i2c_data[3]; un_temp<<=16; *un_ir_led+=un_temp; un_temp=(unsigned char) ch_i2c_data[4]; un_temp<<=8; *un_ir_led+=un_temp; un_temp=(unsigned char) ch_i2c_data[5]; *un_ir_led+=un_temp; *un_red_led&=0x03FFFF; //Mask MSB [23:18] *un_ir_led&=0x03FFFF; //Mask MSB [23:18] return true;} |
|
|
|
上面那个是连续读写FIFO程序,后面就是研究算法的问题了
|
|
|
|
真是感叹这个论坛的方便
|
|
|
|
谢谢原子哥帮顶
|
|
|
|
你的时序没有弄好吧,注意标准IIC的地址哦。我的脉搏和血氧都出来了。
|
|
|
|
我之前也是移植Ardunio的,后来测试不对头,现在我把底层驱动剥离出来自己写脉搏和血氧的部分。
|
|
|
|
求工程文件我得冷静冷静
|
|
|
|
我的平台不是在STM32上的,工程附上太繁琐。把IIC和MAX30100的驱动加载到你的工程里就行了。
while(MAX30100_ReadID()){ //wait for.... ; } IIC.zip (2.25 KB ) MAX_00.zip (3.79 KB ) |
|
|
|
可以啊兄弟,我的加了4.7K,3.3V上拉电阻,现在心率读出来了,SpO2总是100和0,不知道是不是时序的问题
|
|
|
|
恩恩,管用,之前一是我的模块本身问题,二是时序有问题,三。。。还差了上拉电阻
|
|
|
|
应该是测试的问题,经常是改变采样后出来有问题
|
|
|
|
多谢多谢
|
|
|
|
网友学习精神可嘉啊,跨平台寻找资料
|
|
|
|
哥们,你的算法呢?数据处理的怎么样
|
|
|
|
有遇过读写寄存器正常,但fifo数据都是0的情况吗?
|
|
|
|
还没呢,FIFO读写不正常就GG了
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-24 18:43 , Processed in 0.958717 second(s), Total 61, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号