[技术问答] MAX30100

[复制链接]
 楼主| qq709631261 发表于 2016-8-20 21:40 | 显示全部楼层 |阅读模式
最近在做这个MAX30100的模块 数据都出来 样本数都不出来 有没有做过的人能请教下。我直接STC12做的,
598330983 发表于 2016-8-20 23:33 | 显示全部楼层
数据是出来了还是没出来?
 楼主| qq709631261 发表于 2016-8-21 09:36 | 显示全部楼层
AD是几乎一直递减的 没有波动
mintspring 发表于 2016-8-21 20:42 | 显示全部楼层
确认读取的正确吗?是不是根本没有让AD工作。
zhuotuzi 发表于 2016-8-22 20:10 来自手机 | 显示全部楼层
如果时序正确,那就可以读取出来
Thethree 发表于 2016-8-23 09:19 | 显示全部楼层
其实这个芯片的datasheet里面已经介绍很清楚了,你可以认真读读读写过程
M小涛 发表于 2016-9-19 12:34 | 显示全部楼层
Thethree 发表于 2016-8-23 09:19
其实这个芯片的datasheet里面已经介绍很清楚了,你可以认真读读读写过程

你好,我想问一下,为什么我读MAX30100的时候,0x06的值是0xfe,而不是0x00;
wahahaheihei 发表于 2016-9-19 22:44 | 显示全部楼层
读写方法是否正确呢
kk118a 发表于 2016-9-19 22:47 | 显示全部楼层
我的都没读出来,请楼主分享一下读取各个数据操作
空心杯 发表于 2016-10-30 17:52 | 显示全部楼层
qq709631261 发表于 2016-8-21 09:36
AD是几乎一直递减的 没有波动

楼主请问你的基本读写完成了吗?
空心杯 发表于 2016-10-30 17:54 | 显示全部楼层
M小涛 发表于 2016-9-19 12:34
你好,我想问一下,为什么我读MAX30100的时候,0x06的值是0xfe,而不是0x00;

哥们你的基本读写完成了吗?我读写搞了两星期了,老师给的任务半天没搞完
984335200 发表于 2017-1-1 17:11 | 显示全部楼层
您好,请问你的测心率血氧做出来没?问问传感器上那个RD  IRD引脚连哪里呢?有没有中文手册呢?发我一个。谢谢大哥。984335200@qq.com
984335200 发表于 2017-1-1 17:12 | 显示全部楼层
空心杯 发表于 2016-10-30 17:54
哥们你的基本读写完成了吗?我读写搞了两星期了,老师给的任务半天没搞完 ...

您好,请问你的测心率血氧做出来没?问问传感器上那个RD  IRD引脚连哪里呢?有没有中文手册呢?发我一个。谢谢大哥。984335200@qq.com
M小涛 发表于 2017-2-21 09:39 | 显示全部楼层
前几天弄了一下,发现原来的时序有点问题,现在可以读出0x06的数据。但是按照使用说明书上的流程读取ad转换数据,读不出来
zhuomuniao110 发表于 2017-2-21 19:38 | 显示全部楼层
  1. //RCWL-0530模块与51接口连接:

  2. // 1:VCC --〉 1.8V-5.5V电源

  3. // 2:SCL --〉 P3.5

  4. // 3:SDA --〉 P3.7

  5. // 4:INT --〉 NC

  6. // 5:IRD --〉 NC

  7. // 6:RD --〉 NC

  8. // 7:GND --〉 地

  9. //-------------------------------------------------------------------------------------//

  10. # include <reg52.h>

  11. # include <stdio.h>

  12. # include <intrins.h>

  13. //定义IIC接口

  14. sbit IIC_SCL =P3^5; //IIC的SCL

  15. sbit IIC_SDA =P3^7; //IIC的SDA

  16. bit IIC_ACK; //IIC的ACK

  17. int rda; //IIC读出

  18. //-------------------------------------------------------------------------------------//

  19. //函数: delayms()

  20. //功能: 延时程序

  21. //-------------------------------------------------------------------------------------//

  22. void delayms(unsigned int ms)

  23. {

  24. unsigned char i=100,j;

  25. for(;ms;ms--)

  26. {

  27. while(--i)

  28. {

  29. j=10;

  30. while(--j);

  31. }

  32. }

  33. }

  34. //-------------------------------------------------------------------------------------//

  35. //函数: void iic_start();

  36. //功能: I2C总线开始

  37. //-------------------------------------------------------------------------------------//

  38. // SCL --- --- ___

  39. // SDA --- ___ ___

  40. void iic_start()

  41. {

  42. IIC_SDA=1;

  43. _nop_();

  44. _nop_();

  45. IIC_SCL=1;

  46. _nop_();

  47. _nop_();

  48. IIC_SDA=0;

  49. _nop_();

  50. _nop_();

  51. IIC_SCL=0;

  52. _nop_();

  53. _nop_();

  54. }

  55. //-------------------------------------------------------------------------------------//

  56. //函数: void iic_stop();

  57. //功能: I2C总线结束

  58. //需定义:

  59. //-------------------------------------------------------------------------------------//

  60. // SCL ___ --- ---

  61. // SDA ___ ___ ---

  62. void iic_stop()

  63. {

  64. IIC_SCL=0;

  65. _nop_();

  66. _nop_();

  67. IIC_SDA=0;

  68. _nop_();

  69. _nop_();

  70. IIC_SCL=1;

  71. _nop_();

  72. _nop_();

  73. IIC_SDA=1;

  74. _nop_();

  75. _nop_();

  76. }

  77. //-------------------------------------------------------------------------------------//

  78. //函数: void iic_sendbyte(unsigned char c);

  79. //功能: 发送 8_BIT 数据

  80. //-------------------------------------------------------------------------------------//

  81. void iic_sendbyte(unsigned char c)

  82. {

  83. unsigned char bitcnt;

  84. for(bitcnt=0;bitcnt<8;bitcnt++)

  85. {

  86. if((c<<bitcnt)&0x80)

  87. IIC_SDA=1;

  88. else

  89. IIC_SDA=0;

  90. _nop_();

  91. _nop_();

  92. IIC_SCL=1;

  93. _nop_();

  94. _nop_();

  95. IIC_SCL=0;

  96. }

  97. _nop_();

  98. _nop_();

  99. IIC_SDA=1;

  100. _nop_();

  101. _nop_();

  102. IIC_SCL=1;

  103. _nop_();

  104. _

  105. nop_();

  106. if(IIC_SDA==0)

  107. IIC_ACK=0;

  108. else

  109. IIC_ACK=1;

  110. IIC_SCL=0;

  111. _nop_();

  112. _nop_();

  113. }

  114. //-------------------------------------------------------------------------------------//

  115. //函数: int iic_rcvbyte_nack();

  116. //功能: 接收 8_BIT 数据 最后ack信号

  117. //-------------------------------------------------------------------------------------//

  118. int iic_rcvbyte_nack()

  119. {

  120. unsigned char retc;

  121. unsigned char bitcnt;

  122. retc=0;

  123. IIC_SDA=1;

  124. for(bitcnt=0;bitcnt<8;bitcnt++)

  125. {

  126. _nop_();

  127. _nop_();

  128. IIC_SCL=0;

  129. _nop_();

  130. _nop_();

  131. IIC_SCL=1;

  132. _nop_();

  133. _nop_();

  134. retc=retc<<1;

  135. if(IIC_SDA==1)

  136. retc=retc+1;

  137. _nop_();

  138. _nop_();

  139. }

  140. //给出NACK信号

  141. _nop_();

  142. _nop_();

  143. IIC_SCL=0;

  144. _nop_();

  145. _nop_();

  146. IIC_SDA=1;

  147. _nop_();

  148. _nop_();

  149. IIC_SCL=1;

  150. _nop_();

  151. _nop_();

  152. IIC_SCL=0;

  153. _nop_();

  154. _nop_();

  155. return(retc);

  156. }

  157. //-------------------------------------------------------------------------------------//

  158. //函数: int iic_rcvbyte_ack();

  159. //功能: 接收 8_BIT 数据 最后ack信号

  160. //-------------------------------------------------------------------------------------//

  161. int iic_rcvbyte_ack()

  162. {

  163. unsigned char retc;

  164. unsigned char bitcnt;

  165. retc=0;

  166. IIC_SDA=1;

  167. for(bitcnt=0;bitcnt<8;bitcnt++)

  168. {

  169. _nop_();

  170. _nop_();

  171. IIC_SCL=0;

  172. _nop_();

  173. _nop_();

  174. IIC_SCL=1;

  175. _nop_();

  176. _nop_();

  177. retc=retc<<1;

  178. if(IIC_SDA==1)

  179. retc=retc+1;

  180. _nop_();

  181. _nop_();

  182. }

  183. //给出ACK信号

  184. _nop_();

  185. _nop_();

  186. IIC_SCL=0;

  187. _nop_();

  188. _nop_();

  189. IIC_SDA=0;

  190. _nop_();

  191. _nop_();

  192. IIC_SCL=1;

  193. _nop_();

  194. _nop_();

  195. IIC_SCL=0;

  196. _nop_();

  197. _nop_();

  198. return(retc);

  199. }

  200. //-------------------------------------------------------------------------------------//

  201. //函数: wr_max30100_one_data()

  202. //功能: 写一位max30100数据

  203. //address: 芯片从地址

  204. //saddress: 写寄存器地址

  205. //w_data: 待写数据

  206. //-------------------------------------------------------------------------------------//

  207. void wr_max30100_one_data(int address,int saddress,int w_data )

  208. {

  209. _nop_();

  210. iic_start();

  211. _nop_();

  212. iic_sendbyte(address);

  213. _nop_();

  214. iic_sendbyte(saddress);

  215. _nop_();

  216. iic_sendbyte(w_data);

  217. _nop_();

  218. iic_stop();

  219. _nop_();

  220. }

  221. //-------------------------------------------------------------------------------------//

  222. //函数: rd_max30100_one_data()

  223. //功能: 读一位max30100数据

  224. //address: 芯片从地址

  225. //saddress: 读寄存器地址

  226. //rda: 读出的数据

  227. //-------------------------------------------------------------------------------------//

  228. void rd_max30100_one_data(int address,int saddress)

  229. {

  230. iic_start();

  231. _nop_();

  232. iic_sendbyte(address);

  233. _nop_();

  234. iic_sendbyte(saddress);

  235. _nop_();

  236. address=address+1;

  237. _nop_();

  238. iic_start();

  239. _nop_();

  240. iic_sendbyte(address);

  241. _nop_();

  242. rda=iic_rcvbyte_nack();

  243. _nop_();

  244. iic_stop();

  245. }

  246. //-------------------------------------------------------------------------------------//

  247. //函数: 主程序

  248. //功能: 读max30100内部温度

  249. //--------------------------------------------------------

  250. -----------------------------//

  251. main()

  252. {

  253. double temp,temp1,temp2;

  254. //temp 测量温度

  255. //temp1 30100整数部分温度

  256. //temp2 30100小数部分温度

  257. TMOD=0x21;

  258. SCON=0x50;

  259. TH1=0xFD;

  260. TL1=0xFD;

  261. TR1=1;

  262. TI=1;

  263. //设置51的波特率为 9600 N 8 1

  264. //51主频为11.0592MHz

  265. while(1)

  266. {

  267. wr_max30100_one_data(0xae,0x06,0x0a); // 0X06地址B3位TEMP_EN置1

  268. delayms(20); // 等待温度转换完成,不等待,读出数据有误

  269. rd_max30100_one_data(0xae,0x16); // 读出温度信号

  270. printf("temp1=%d\n",rda); // 串口显示

  271. temp1=rda;

  272. rd_max30100_one_data(0xae,0x17); // 读出温度小数部分数据

  273. printf("temp2=%d\n",rda); // 串口显示

  274. temp2=rda;

  275. temp=temp1+(temp2/100);

  276. printf("temp=%.2f\n",temp); // 串口显示

  277. rd_max30100_one_data(0xae,0xff); // 读出芯片ID

  278. printf("MAX30100 ID =%d\n",rda); // 串口显示

  279. delayms(100);

  280. }

  281. }
复制代码
zhuomuniao110 发表于 2017-2-21 19:39 | 显示全部楼层
楼主试试上面的例程,应该能满足你的需求。
zhuomuniao110 发表于 2017-2-21 19:41 | 显示全部楼层
换代的 发表于 2018-7-2 15:42 | 显示全部楼层
有没有心率的代码
yiyigirl2014 发表于 2018-7-4 15:28 | 显示全部楼层
没用过,测的数据怎么换算?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部