| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> MAX30102心率模块初步认识 -> 正文阅读 |
|
[嵌入式]MAX30102心率模块初步认识 |
1.MAX30102编程 1.中断初始化 A_FULL_EN, PPG_RDY_EN set to 1. MAX30102_Write_Byte(INTERRUPT_ENABLE2, 0x02); //TEMP RDY EN 0x02 MAX30102 FIFO 的深度为32,每个buf是6个字节(两通道数据,每通道3字节)。我么可以开启 PPG_RDY_EN,这样就能每来一个新的数据,就会中断一次通知我们去取数据。读FIFO_DATA 就会自动清掉中断标志位。 FIFO Write Pointer FIFO Write Pointer是指MAX30102写入下一个sample的位置。这个指针向前推进每个样品推到先进先出。当MODE[2:0]为010,011或111时,也可以通过I2C接口进行更改。 FIFO溢出计数器当FIFO满时,样品不推到FIFO,样品丢失。OVF_COUNTER统计丢失的样本数量。饱和到0xF。当一个完整的样本从FIFO弹出(即,删除旧的FIFO数据和移动样本)(当读取指针前进),OVF_COUNTER重置为零。 FIFO读指针FIFO读指针指向处理器通过I2C接口从FIFO获取下一个样本的位置。每次从FIFO中取出样品时,这一技术都会进步。处理器也可以在读取样本后写入这个指针,以便在出现数据通信错误时从FIFO重新读取样本。 圆形FIFO深度是32,可以容纳多达32个数据样本。样本大小取决于配置为活动的LED通道(又称通道)的数量。由于每个通道信号被存储为一个3字节的数据信号,FIFO宽度可以是3字节或6字节大小。I2C寄存器映射中的FIFO_DATA寄存器指向要从FIFO读取的下一个样本。FIFO_RD_PTR指向这个示例。读取FIFO_DATA寄存器,不会自动增加I2C寄存器地址。突然读取这个寄存器,一遍又一遍地读取同一个地址。每个样本每个通道有3个字节的数据(即RED有3个字节,IR有3个字节,等等)。FIFO寄存器(0x04 0x07)都可以被写入和读取,但实际上只有FIFO_RD_PTR寄存器应该被写入操作中。其他部分由MAX30102自动递增或填充数据。当开始一个新的SpO2或心率转换时,建议首先清除FIFO_WR_PTR, OVF_COUNTER和FIFO_RD_PTR寄存器到所有的零(0x00),以确保FIFO是空的,处于一个已知的状态。当在一个突发读I2C事务中读取MAX30102寄存器时,寄存器地址指针通常会增加,以便发送的下一个字节的数据来自下一个寄存器,等等。例外情况是FIFO数据寄存器,寄存器0x07。当读取这个寄存器时,地址指针不会增加,但是FIFO_RD_PTR会增加。所以发送的数据的下一个字节表示FIFO中可用的数据的下一个字节。进入和退出接近模式(当PROX_INT_EN = 1时)通过设置写指针和读指针相等来清除FIFO。 ?FIFO Write Pointer:好理解,就是写指针寄存器。保存下一个新数据在 FIFO 中的写地址。每次来一个数据,这个写指针会自动移动一位。 FIFO数据每个通道包含3个字节FIFO数据左对齐,这意味着无论ADC分辨率设置如何,MSB总是在相同的位置。FIFO DATA[18][23]未被使用。表2显示了每个三重字节的结构(包含每个通道的18位ADC数据输出)。SpO2模式下的每个数据样本包含两个数据三胞胎(每个3字节),要读取一个样本,每个字节需要一个I2C读命令。因此,在SpO2模式下读取一个样本需要6个I2C字节。FIFO读指针在每个样本的第一个字节被读取后自动递增。 3. 设置为一,获取原始数据就行。 4. 第7位:关机控制(SHDN)将该位设置为1,可使部件进入省电模式。在省电模式下,所有寄存器都保留它们的值,并且读写操作正常运行。在这种模式下,所有中断都清除为零。 5. 位6:5:SpO2 ADC范围控制该寄存器设置SpO2传感器ADC的全量程范围,如表5所示 频率精度设置 6.复位 7. 8.读写时序 9.接收两组数据写入 此时FIFO已经有数据 当一个中断被触发时,MAX30102将active-low中断引脚拉到它的低状态,直到中断被清除。 ? 最大从FIFO寄存器读取6次 清除标志 I2C寄存器映射中的FIFO_DATA寄存器指向要从FIFO读取的下一个样本。 FIFO_RD_PTR指向此样本。所以虽然通过连续读 FIFO_DATA 不会使该寄存器自增,但是 FIFO_DATA 寄存器实际是映射到FIFO_RD_PTR,而FIFO_RD_PTR 寄存器始终指向下一个待读取的数据,所以对FIFO_DATA 连续读,是能够实现的。读 FIFO 函数如下:
读出红光数据最大采集3字节数据
等待,直到中断引脚断言,检测数据当有数据时为低电平,跳出循环。 低电平有效中断(校验)。用上拉电阻连接外部电压。 一个样本的数据(红光和红外数据) Longlonglong可能是防止溢出 //将前100组样本转储到内存中,并将后400组样本移到内存顶部 在计算心率前,取100组样本。 最后通过UART将计算结果和样本输出到终端程序中 sprintf指的是字符串格式化命令,函数声明为 int sprintf(char *string, char *format [,argument,…]);,主要功能是把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串。sprintf 是个变参函数。使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:39:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |