注册 登录
查看: 1886|回复: 23

[其他] PIT计时的超声波例程

[复制链接]
发表于 2014-5-30 17:55:59 | 显示全部楼层 |阅读模式
话不多说,自己研究。这个是一个客户做的超声波测距,经过客户允许,发上来,供大家参考吧


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2016-1-29 14:11:03 | 显示全部楼层
while(gpio_get(ECHG) == 0);             //等待电平变高,低电平一直等待
为什么卡在这里??
回复 支持 1 反对 0

使用道具 举报

发表于 2014-5-30 18:04:26 | 显示全部楼层
山外哥威武,跪谢!
回复 支持 反对

使用道具 举报

发表于 2014-6-5 21:54:25 | 显示全部楼层
山外哥,为什么把13年的库里面的PIT.C加到11年的库里面没报错但是不能定时?
回复 支持 反对

使用道具 举报

发表于 2014-7-16 13:56:33 | 显示全部楼层
强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-8-5 19:21:04 | 显示全部楼层
K60已测不得行
回复 支持 反对

使用道具 举报

发表于 2015-6-15 16:36:56 | 显示全部楼层

山外哥牛叉!
回复 支持 反对

使用道具 举报

发表于 2015-10-19 21:14:42 | 显示全部楼层
山外哥,牛
回复 支持 反对

使用道具 举报

发表于 2016-1-27 15:50:35 | 显示全部楼层
虽然有点晚了,但是还是赞一下,山外哥威武,我之前找了各蓝宙的程序,额,我就不吐槽了,还是山外哥编的好!
回复 支持 反对

使用道具 举报

发表于 2016-1-27 20:19:39 | 显示全部楼层
正巧有用,看看别人怎么写的
回复 支持 反对

使用道具 举报

发表于 2016-1-27 20:31:34 | 显示全部楼层
是基于山外库的吧?
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2016-2-25 21:08:48 | 显示全部楼层
看看.................
回复 支持 反对

使用道具 举报

发表于 2016-2-27 20:48:30 | 显示全部楼层
歪歌真棒
回复 支持 反对

使用道具 举报

发表于 2016-3-4 14:49:05 | 显示全部楼层
亲测能用,顶一个,山外哥棒棒哒!
回复 支持 反对

使用道具 举报

发表于 2016-3-10 14:08:29 | 显示全部楼层
亲测好用  牛!
回复 支持 反对

使用道具 举报

发表于 2016-3-13 13:03:57 | 显示全部楼层
用不了啊
回复 支持 反对

使用道具 举报

发表于 2016-3-13 13:04:17 | 显示全部楼层
reasco 发表于 2016-3-10 14:08
亲测好用  牛!

我怎么用不了
回复 支持 反对

使用道具 举报

发表于 2016-5-2 10:59:49 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

发表于 2016-6-6 10:33:56 | 显示全部楼层
想问一下超声波能测的角度,对于不规则的东西,用超声波测距方便吗
回复 支持 反对

使用道具 举报

发表于 2016-6-24 02:32:33 | 显示全部楼层
不知道用超声波测距效果如何
回复 支持 反对

使用道具 举报

发表于 2016-7-10 17:13:09 | 显示全部楼层
我也想请问下,经常卡死在
while(gpio_get(ECHG) == 0);             //等待电平变高,低电平一直等待
这一行中是什么原因呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-10 19:17:36 | 显示全部楼层
gugu 发表于 2016-7-10 17:13
我也想请问下,经常卡死在
while(gpio_get(ECHG) == 0);             //等待电平变高,低电平一直等待
这 ...

改成超时就放弃。超声波模块测不到信号,会一直髙电平
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2016-7-11 16:55:36 | 显示全部楼层
本帖最后由 gugu 于 2016-7-11 17:20 编辑
山外メ雲ジ 发表于 2016-7-10 19:17
改成超时就放弃。超声波模块测不到信号,会一直髙电平

但是例程代码里有这样一段高电平超时溢出中断呀。
卡在while(gpio_get(ECHG) == 0);应该是一直检测不到高电平……吧?
后来也给while低电平加了一段类似的溢出中断能够持续有数据了,但是非常不准,不知道为何。而且无论怎么改距离大部分回复数据都是6mm,猜测可能是执行某段程序的时间。用的超声波模块是sc—hr04【后来单步执行发现这个会卡在“while( !(SYST_CSR & SysTick_CSR_COUNTFLAG_MASK));   //等待时间到”这一行,我们是26芯片,在MKL_systick.c里】
还有请问下这样的溢出循环,while循环一次大概是多少us?多少个机器指令?
非常感谢!

低和高电平溢出处理如下
while(gpio_get(ECHG) == 0)
        {f2++;
        if(f2>FLAGWAIT)
           {
                break;
            }
        };     //等待电平变高,低电平一直等待【GPIOGET获取IO状态【一直在这一步死循环
        pit_time_start  (PIT0);                 //开始计时
        while(gpio_get(ECHG) == 1)              //等待电平变低,高电平一直等待
        {
            flag++;
            if(flag >FLAGWAIT)
            {
                break;
            }
        };            

        timevar = pit_time_get_us    (PIT0);    //停止计时,获取计时时间
        pit_close  (PIT0);                    //关闭PIT(可选择是否关闭)


回复 支持 反对

使用道具 举报

发表于 2016-8-21 16:18:47 | 显示全部楼层
xxfxxffxxxfx
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部