论坛风格切换切换到宽版
  • 3269阅读
  • 8回复

请教一个做计程装置时遇到的问题 [复制链接]

上一主题 下一主题
离线BG4ABM
 
发帖
1139
只看楼主 倒序阅读 0楼 发表于: 2006-09-12
  用旋转编码器、单片机和数码管做了一个计程装置,计数程序在t0中断里实现,编码器每 产生10个脉冲,就发生一次中断,表示前进了1厘米。数码管显示采用动态扫描,不断地扫描t0中存储距离的寄存器,并显示出来。
  板子做完后发现,旋转编码器转得慢时,数码管上可以看到1厘米1厘米的变化过程,转得快时,数值变化的中间过程看不到,但停下后,可以看到最终的数值,这个数值是正确的。数值变化的中间过程看不到,是因为数码管动态扫描的时间比较长,当t0连续地产生中断时,扫描速度跟不上所致。
  后来想实现每前进1厘米,蜂鸣器就响一下的功能,就在t0中断中加了几行setb+延时+clr的指令,然后控制一个三极管驱动蜂鸣器报警。结果发现有这样的问题:如果
延时时间很短(蜂鸣器声音会比较低),快转和慢转时数码管都能正确显示;如果延时时间比较长(蜂鸣器声音会比较响),慢转时数码管还能正确显示,但快转时显示的数值要比实际距离小很多。
  我猜测产生这种现象的原因可能是:因为长延时的中断执行过程比较长,快转时一个中断还未执行完,下一个中断又产生了,结果可能漏掉了这次中断的计数,所以显示出来的数值比实际距离要小,不知道我的猜想是否正确,还望高手能解释一下这个现象,有无解决的办法?
离线BG4XCR
发帖
33381
只看该作者 1楼 发表于: 2006-09-12
我不是高手,你比谁都明白阿。。。。
离线BG4XCR
发帖
33381
只看该作者 2楼 发表于: 2006-09-12
用中断t1去发声。
离线代洪波
发帖
4809
只看该作者 3楼 发表于: 2006-09-12
我觉得关键问题是你得先确定你这个系统可以接受的最高输入脉冲频率,然后再倒过来设计你的程序!因为频率很高的情况下,cpu可以做的事情就相对少了很多!意思就是你自己说的:响应不过来!让人耳朵分辨出来笛笛的声音需要一定时间,不能低于你的脉冲最短时间???
离线BG7IGJ
发帖
1998
只看该作者 4楼 发表于: 2006-09-12
因为快速旋转时,进中断的速度也快了,在程序还没执行到 扫描程序时,可能已经产生了很多中断,所以不能实时显示。
在中断里加了延时,延时短时声音小,这个很正常,因为延时短,电压未达到锋值
延时长了,会漏数,因为在进入计数器之后,还未退出时,下次脉冲到来会被弗略
离线BG4UVR
发帖
11288
只看该作者 5楼 发表于: 2006-09-13
要想提高检测的速度,中断里的程序要尽量的少。这种应用,我一般在检测中断里只有1、2句。
离线BG4XDO
发帖
1124
只看该作者 6楼 发表于: 2006-09-13
用高速CPU,提高时钟频率
离线loverslcn
发帖
621
只看该作者 7楼 发表于: 2006-09-14
计数器初值必须自动调整,当监测到脉冲变快时就需要减少计数器初值,以获得较慢的中断产生速度;当然每终端表示的前进距离也会自动变化。
离线bg4kc
发帖
2638
只看该作者 8楼 发表于: 2006-09-14
要是显示出来那么快,人眼就看不清了。 好像没什么意义,除非用来高速摄影。