打印

MLX90614红外测温问题

[复制链接]
9496|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lgq1542380129|  楼主 | 2015-8-12 15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在调试MLX90614红外模块,写了一个测试程序,发现应答不成功(SDA一直为高),看了下时序没有看出啥问题(能力有限)。移植了官方程序,也是应答不成功。具体代码如下。没来得及注释。希望各路大神看看。

static void rx_mlx90614_start(void)
{
    MLX90614_SCKOUT_0;
    delay_ms(10);
    MLX90614_SCKOUT_1;


    MLX90614_SDA_OUT;   

    MLX90614_SDA_OUT_1;
//   delay_ms(1);
    MLX90614_SCKOUT_1;
    delay_us(46);
    MLX90614_SDA_OUT_0;
    delay_ms(29);

}

static void rx_mlx90614_write_onebyte(uchar com)
{
    uchar i = 0;

    MLX90614_SDA_OUT;
    MLX90614_SCKOUT_0;
    delay_ms(29);

    for (i=0; i<8; i++)
    {
        if ((com & 0x80) == 0x80)
          MLX90614_SDA_OUT_1;
        else
          MLX90614_SDA_OUT_0;

        MLX90614_SCKOUT_1;
        delay_us(46);
        MLX90614_SCKOUT_0;
        delay_ms(29);

        com <<= 1;
    }

}

static void rx_mlx90614_write_ack(uchar ack_noack)
{
     MLX90614_SDA_OUT;

     MLX90614_SCKOUT_0;
  //   delay_ms(29);

     if (ack_noack == 0)
         MLX90614_SDA_OUT_0;
     else
         MLX90614_SDA_OUT_1;
   //  delay_ms(1);

     MLX90614_SCKOUT_1;
  //   delay_us(46);

     MLX90614_SCKOUT_0;
  //   delay_ms(29);

   //  MLX90614_SDA_OUT_1;
}

static ack_result rx_mlx90614_read_ack(void)
{
     uint i = 0;
     ack_result ack_temp = ACK_OK;

     MLX90614_SDA_IN;

     MLX90614_SCKOUT_1;
   //  delay_us(1);

     while ((MLX90614_SDA_READ == BIT1))
     {  
        i++;

        if (i == 100)
          break;

        printf("\r\n NO ACK !");
     }

     MLX90614_SCKOUT_0;
  //   delay_ms(3);

     if (i == 100)
       return  ACK_FAILURE;

     return ack_temp;

}


static uchar rx_mlx90614_read_onebyte(void)
{
    uchar i = 0, data = 0;

    MLX90614_SDA_IN;

    MLX90614_SCKOUT_1;
    delay_us(46);

    for (i=0; i<8; i++)
    {
        data <<= 1;
        data += (uchar)((MLX90614_SDA_READ == BIT1) ?  1 : 0);

        MLX90614_SCKOUT_0;
        delay_ms(29);

        MLX90614_SCKOUT_1;
        delay_us(46);
    }

    return data;

}

static void rx_mlx90614_stop(void)
{
     MLX90614_SDA_OUT;

     MLX90614_SCKOUT_1;
    // delay_ms(30);
     MLX90614_SDA_OUT_0;
     delay_us(46);
     MLX90614_SDA_OUT_1;
     MLX90614_SCKOUT_0;
     delay_ms(29);

}

uint rx_mlx90614_eeprom_or_ram_read(uchar adr, uchar com)
{
     uchar data_high8_bit = 0, data_low8_bit = 0, data_pec = 0;

     rx_mlx90614_rst:
                     rx_mlx90614_start();
                     rx_mlx90614_write_onebyte((adr << 1) | MLX90614_W_BIT);

                     if (rx_mlx90614_read_ack() == ACK_FAILURE)
                       goto rx_mlx90614_rst;

                     rx_mlx90614_write_onebyte(MLX90614_RAM_COM(com));
                     if (rx_mlx90614_read_ack() == ACK_FAILURE)
                       goto rx_mlx90614_rst;

                     rx_mlx90614_start();
                     rx_mlx90614_write_onebyte((adr << 1) | MLX90614_R_BIT);
                     if (rx_mlx90614_read_ack() == ACK_FAILURE)
                       goto rx_mlx90614_rst;

     data_low8_bit = rx_mlx90614_read_onebyte();
     rx_mlx90614_write_ack(ACK);
     data_high8_bit = rx_mlx90614_read_onebyte();
     rx_mlx90614_write_ack(ACK);

     data_pec = rx_mlx90614_read_onebyte();
     rx_mlx90614_write_ack(NACK);
     rx_mlx90614_stop();

     return (uint)((data_high8_bit << 8) | data_low8_bit);

}

相关帖子

沙发
dirtwillfly| | 2015-8-12 21:10 | 只看该作者
时序问题建议用逻辑分析仪或者示波器来观察一下,然后和手册里的对比,才有可能找出问题

使用特权

评论回复
板凳
lgq1542380129|  楼主 | 2015-8-12 21:30 | 只看该作者
dirtwillfly 发表于 2015-8-12 21:10
时序问题建议用逻辑分析仪或者示波器来观察一下,然后和手册里的对比,才有可能找出问题 ...

手头没有逻辑分析仪。按照数据手册的时序写的,是SMBUS总线,原理跟IIC一样的

使用特权

评论回复
地板
yuluabc| | 2015-8-20 10:00 | 只看该作者
调试成功了吗,用的单片机吗

使用特权

评论回复
5
lgq1542380129|  楼主 | 2015-8-20 15:01 | 只看该作者
yuluabc 发表于 2015-8-20 10:00
调试成功了吗,用的单片机吗

成功了。用的430

使用特权

评论回复
6
yuluabc| | 2015-8-20 17:03 | 只看该作者

我在用430F5系列调试,还没有成功,能发我你的成果吗,我参考一下,万分感谢。

使用特权

评论回复
7
lgq1542380129|  楼主 | 2015-8-20 19:18 | 只看该作者
yuluabc 发表于 2015-8-20 17:03
我在用430F5系列调试,还没有成功,能发我你的成果吗,我参考一下,万分感谢。 ...

您的邮箱是多少?

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
yuluabc + 2 很给力!
8
yuluabc| | 2015-8-20 19:45 | 只看该作者

1152637976@qq.com,最好带个电路图哈,谢谢!

使用特权

评论回复
9
lgq1542380129|  楼主 | 2015-8-20 20:49 | 只看该作者
yuluabc 发表于 2015-8-20 19:45
,最好带个电路图哈,谢谢!

已发。

使用特权

评论回复
10
chen665666| | 2015-9-8 13:51 | 只看该作者
您好,,你现在还在计量读研究生吗?我看到您对;硬件非常熟悉,想有些问题请教下您。

使用特权

评论回复
11
lgq1542380129|  楼主 | 2015-9-8 14:36 | 只看该作者
chen665666 发表于 2015-9-8 13:51
您好,,你现在还在计量读研究生吗?我看到您对;硬件非常熟悉,想有些问题请教下您。 ...

我也是小菜鸟的。你可以发帖的。论坛里大牛很多的。

使用特权

评论回复
12
chen665666| | 2015-9-10 08:48 | 只看该作者
lgq1542380129 发表于 2015-9-8 14:36
我也是小菜鸟的。你可以发帖的。论坛里大牛很多的。

呵呵,太谦虚了哈,你做过那种红外寻迹的送餐机器人吗?用stm32控制,我对stm32太不熟悉了,,,

使用特权

评论回复
13
lgq1542380129|  楼主 | 2015-9-10 13:19 | 只看该作者
chen665666 发表于 2015-9-10 08:48
呵呵,太谦虚了哈,你做过那种红外寻迹的送餐机器人吗?用stm32控制,我对stm32太不熟悉了,,, ...

没有做过的,你参考下其他厂家同类的机器人看看。

使用特权

评论回复
14
chen665666| | 2015-9-11 08:53 | 只看该作者
lgq1542380129 发表于 2015-9-10 13:19
没有做过的,你参考下其他厂家同类的机器人看看。

一般都找不到其他厂家的资料,,你知道在哪里可以找到详细点的吗

使用特权

评论回复
15
复仇之矛| | 2016-1-15 09:45 | 只看该作者
您好,我现在也在做MLX90614的试验,总是没有数值显示,这个是我的QQ1138016726,能加一下么?咨询一下问题,谢谢

使用特权

评论回复
16
lgq1542380129|  楼主 | 2016-1-15 20:14 | 只看该作者
复仇之矛 发表于 2016-1-15 09:45
您好,我现在也在做MLX90614的试验,总是没有数值显示,这个是我的QQ1138016726,能加一下么?咨询一下问题 ...

你发我下邮箱,我把.c和.h文件发你吧。

使用特权

评论回复
17
复仇之矛| | 2016-1-19 11:02 | 只看该作者
lgq1542380129 发表于 2016-1-15 20:14
你发我下邮箱,我把.c和.h文件发你吧。

QQ邮箱1138016726@qq.com

使用特权

评论回复
18
mdc9| | 2016-1-19 14:58 | 只看该作者
你好! 我现在正在做这个,总是不应答,地址都找不到,没反应。大神这是用什么做的呢?51么,能不能把电路图和程序发给我,425254810@qq.com,谢谢!!

使用特权

评论回复
19
lgq1542380129|  楼主 | 2016-1-19 17:15 | 只看该作者
mdc9 发表于 2016-1-19 14:58
你好! 我现在正在做这个,总是不应答,地址都找不到,没反应。大神这是用什么做的呢?51么,能不能把电路 ...

用的430,我当时主要是时间延时的问题,我发你下.c和.h吧,我没有注释,望见谅啊。

使用特权

评论回复
20
mdc9| | 2016-1-20 08:53 | 只看该作者
lgq1542380129 发表于 2016-1-19 17:15
用的430,我当时主要是时间延时的问题,我发你下.c和.h吧,我没有注释,望见谅啊。 ...

非常感谢谢!:handshake

使用特权

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

本版积分规则

22

主题

401

帖子

6

粉丝