发新帖我要提问
12
返回列表
打印
[技术问答]

有没有用新唐的i2c驱动max30100的啊

[复制链接]
楼主: 仙女山
手机看帖
扫描二维码
随时随地手机跟帖
21
lulugl| | 2016-7-21 22:20 | 只看该作者 回帖奖励 |倒序浏览
我用arduino写出来了,STM8L的没有写好,楼上能不能共享一下,我这里arduino的驱动也可以分享

使用特权

评论回复
22
nature7| | 2016-8-10 15:59 | 只看该作者
huangcunxiake 发表于 2016-2-20 09:31
这个文档里有说明和伪代码的程序

我也买了这个max30100模块,可是现在也不会用,我是打算用STM32驱动的,请问前辈可以给我一点建议吗?

使用特权

评论回复
23
nature7| | 2016-8-10 16:00 | 只看该作者
gejigeji521 发表于 2016-2-20 15:08
看懂了手册直接写就可以了,我看了楼上的资料,没啥难的啊,楼主如果不会,给我一千块我帮你写出来。 ...

我手册看不懂,英文不好,自己想搞来玩的,结果搞不出来,很郁闷。

使用特权

评论回复
24
neeringstu| | 2016-8-11 17:29 | 只看该作者
nature7 发表于 2016-8-10 16:00
我手册看不懂,英文不好,自己想搞来玩的,结果搞不出来,很郁闷。

这个max30100芯片是不是还在测试阶段呢?

使用特权

评论回复
25
nature7| | 2016-8-12 09:42 | 只看该作者
neeringstu 发表于 2016-8-11 17:29
这个max30100芯片是不是还在测试阶段呢?

我现在是还在测试。总是没有进展,心急。第一次自己做一个产品,怕做不出来会很受打击。

使用特权

评论回复
26
598330983| | 2016-8-12 11:10 | 只看该作者
直接用IIC接口对接就行了。

使用特权

评论回复
27
huangcunxiake| | 2016-8-13 21:56 | 只看该作者
网上找的,那个百度盘里面有相关资料。//-------------------------------------------------------------------------------------//
//程序名:          MAX30100测试程序                  
//版本:            V1.0                        
//日期:            2016/07/08                       

//资料下载:       http://pan.baidu.com/s/1miNGWha
//功能:            测试MAX30100的ID及温度部分功能。
//-------------------------------------------------------------------------------------//
//RCWL-0530模块与51接口连接:
// 1:VCC   --〉   1.8V-5.5V电源
// 2:SCL   --〉   P3.5
// 3:SDA   --〉   P3.7
// 4:INT   --〉   NC
// 5:IRD   --〉   NC
// 6:RD    --〉   NC
// 7:GND   --〉   地
//-------------------------------------------------------------------------------------//
# include <reg52.h>
# include <stdio.h>
# include <intrins.h>
//定义IIC接口
sbit IIC_SCL    =P3^5;     //IIC的SCL
sbit IIC_SDA    =P3^7;     //IIC的SDA
bit  IIC_ACK;              //IIC的ACK
int  rda;                  //IIC读出
//-------------------------------------------------------------------------------------//
//函数:    delayms()
//功能:    延时程序
//-------------------------------------------------------------------------------------//
void delayms(unsigned int ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}
//-------------------------------------------------------------------------------------//
//函数:    void iic_start();
//功能:    I2C总线开始
//-------------------------------------------------------------------------------------//
//   SCL   --- --- ___
//   SDA   --- ___ ___
void iic_start()
{  
IIC_SDA=1;
_nop_();
_nop_();
IIC_SCL=1;         
_nop_();
_nop_();
IIC_SDA=0;
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
}
//-------------------------------------------------------------------------------------//
//函数:    void iic_stop();
//功能:    I2C总线结束
//需定义:
//-------------------------------------------------------------------------------------//
//   SCL   ___ --- ---
//   SDA   ___ ___ ---
void iic_stop()
{  
IIC_SCL=0;
_nop_();
_nop_();
IIC_SDA=0;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
IIC_SDA=1;
_nop_();
_nop_();
}
//-------------------------------------------------------------------------------------//
//函数:    void iic_sendbyte(unsigned char c);
//功能:    发送 8_BIT 数据
//-------------------------------------------------------------------------------------//
void iic_sendbyte(unsigned char c)
{
unsigned char bitcnt;
for(bitcnt=0;bitcnt<8;bitcnt++)
{
if((c<<bitcnt)&0x80)
IIC_SDA=1;
else
IIC_SDA=0;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
IIC_SCL=0;
}
_nop_();
_nop_();
IIC_SDA=1;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
if(IIC_SDA==0)
IIC_ACK=0;
else
IIC_ACK=1;
IIC_SCL=0;
_nop_();
_nop_();
}
//-------------------------------------------------------------------------------------//
//函数:    int iic_rcvbyte_nack();
//功能:    接收 8_BIT 数据  最后ack信号
//-------------------------------------------------------------------------------------//
int iic_rcvbyte_nack()
{
unsigned char retc;
unsigned char bitcnt;
retc=0;
IIC_SDA=1;
for(bitcnt=0;bitcnt<8;bitcnt++)
{
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
retc=retc<<1;
if(IIC_SDA==1)
retc=retc+1;
_nop_();
_nop_();
}
//给出NACK信号
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
IIC_SDA=1;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
return(retc);
}
//-------------------------------------------------------------------------------------//
//函数:    int iic_rcvbyte_ack();
//功能:    接收 8_BIT 数据 最后ack信号
//-------------------------------------------------------------------------------------//
int iic_rcvbyte_ack()
{
unsigned char retc;
unsigned char bitcnt;
retc=0;
IIC_SDA=1;
for(bitcnt=0;bitcnt<8;bitcnt++)
{
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
retc=retc<<1;
if(IIC_SDA==1)
retc=retc+1;
_nop_();
_nop_();
}
//给出ACK信号
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
IIC_SDA=0;
_nop_();
_nop_();
IIC_SCL=1;
_nop_();
_nop_();
IIC_SCL=0;
_nop_();
_nop_();
return(retc);
}
//-------------------------------------------------------------------------------------//
//函数:      wr_max30100_one_data()
//功能:      写一位max30100数据
//address:   芯片从地址
//saddress:  写寄存器地址
//w_data:    待写数据
//-------------------------------------------------------------------------------------//
void wr_max30100_one_data(int address,int saddress,int w_data )
{
_nop_();
iic_start();
_nop_();
iic_sendbyte(address);
_nop_();
iic_sendbyte(saddress);
_nop_();
iic_sendbyte(w_data);
_nop_();
iic_stop();
_nop_();
}
//-------------------------------------------------------------------------------------//
//函数:      rd_max30100_one_data()
//功能:      读一位max30100数据
//address:   芯片从地址
//saddress:  读寄存器地址
//rda:       读出的数据
//-------------------------------------------------------------------------------------//
void rd_max30100_one_data(int address,int saddress)
{
iic_start();
_nop_();
iic_sendbyte(address);
_nop_();
iic_sendbyte(saddress);
_nop_();
address=address+1;
_nop_();
iic_start();
_nop_();
iic_sendbyte(address);
_nop_();
rda=iic_rcvbyte_nack();
_nop_();
iic_stop();
}
//-------------------------------------------------------------------------------------//
//函数:      主程序
//功能:      读max30100内部温度
//-------------------------------------------------------------------------------------//
main()
{
double temp,temp1,temp2;
//temp       测量温度
//temp1      30100整数部分温度
//temp2      30100小数部分温度
TMOD=0x21;                  
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TR1=1;                          
TI=1;   
//设置51的波特率为 9600 N 8 1
//51主频为11.0592MHz
while(1)
{
wr_max30100_one_data(0xae,0x06,0x0a);       // 0X06地址B3位TEMP_EN置1
delayms(20);                                // 等待温度转换完成,不等待,读出数据有误
rd_max30100_one_data(0xae,0x16);            // 读出温度信号
printf("temp1=%d\n",rda);                   // 串口显示
temp1=rda;
rd_max30100_one_data(0xae,0x17);            // 读出温度小数部分数据
printf("temp2=%d\n",rda);                   // 串口显示
temp2=rda;
temp=temp1+(temp2/100);
printf("temp=%.2f\n",temp);                 // 串口显示
rd_max30100_one_data(0xae,0xff);            // 读出芯片ID
printf("MAX30100 ID =%d\n",rda);            // 串口显示
delayms(100);   
}
}


使用特权

评论回复
28
huangcunxiake| | 2016-8-13 22:12 | 只看该作者
方法可以参考,如果你用硬件收发器,那就参考指令,接口对应就行了。

使用特权

评论回复
29
nature7| | 2016-8-14 14:50 | 只看该作者
我下载了这个测试程序,自己大概改了一下,现在已经可以在STM32上读到温度跟ID了。非常感谢!
接下来我要试着去读取其他的数据。

使用特权

评论回复
30
nature7| | 2016-8-18 13:38 | 只看该作者
lulugl 发表于 2016-7-21 22:20
我用arduino写出来了,STM8L的没有写好,楼上能不能共享一下,我这里arduino的驱动也可以分享
...

请问你读出来的FIFO怎么处理?读出来的是AD值,应该怎么转化成我们要的血氧值?

使用特权

评论回复
31
gejigeji521| | 2016-8-18 20:03 | 只看该作者
改变被测信号,最好能连续变化,看测量结果是否变化一致。

使用特权

评论回复
32
kk118a| | 2016-8-19 20:39 | 只看该作者
我用stc15的单片机,驱动还没写好

使用特权

评论回复
33
稳稳の幸福| | 2016-8-20 07:55 | 只看该作者
一般通信接口确定了,直接对接就行了,剩下的就是根据芯片的协议来进行读写数据了

使用特权

评论回复
34
heisexingqisi| | 2016-8-20 21:30 | 只看该作者
有I2C的,但是没有针对你这个芯片的,因为I2C的芯片太多了,其实都一样,就是通信方式是一样的,每个芯片可能使用读写的指令不同而已

使用特权

评论回复
35
空心杯| | 2016-10-30 21:00 | 只看该作者
nature7 发表于 2016-8-14 14:50
我下载了这个测试程序,自己大概改了一下,现在已经可以在STM32上读到温度跟ID了。非常感谢!
接下来我要试 ...

哥们,我也是想用STM32来读写max30100,搞了三周了,能分享下你的读写操作代码吗,我现在都差不多该怀疑人生了。

使用特权

评论回复
36
dongnanxibei| | 2016-10-30 22:22 | 只看该作者
这个鬼,一个系统用一个的东西,怎么想搞两个,好奇葩的想法。

使用特权

评论回复
37
空心杯| | 2016-11-4 09:34 | 只看该作者
楼主你的时序怎么样的啊?我现在的读写还没解决。。。

使用特权

评论回复
38
yuwenbin| | 2016-12-5 15:59 | 只看该作者
楼主能共享下代码不

使用特权

评论回复
39
zhuomuniao110| | 2017-2-21 19:44 | 只看该作者
楼主的项目已经搞定了吧

使用特权

评论回复
40
a429772682| | 2017-8-18 20:44 | 只看该作者
nature7 发表于 2016-8-14 14:50
我下载了这个测试程序,自己大概改了一下,现在已经可以在STM32上读到温度跟ID了。非常感谢!
接下来我要试 ...

能分享一下,参考吗? 有点迷

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则