完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

|
本帖最后由 3htech 于 2013-7-11 11:39 编辑
博采众长,取其精华、去其糟粕~ 写写自己这几年的想法。有技术上的,也有其他方面的杂谈。 如果您是高手,请跳过,如果您自认为是高手,也请跳过。 愤青们请跳过。 ========================================================================= 【一】定时器重装引起的误差 【2013-06-28】 【二】模拟IIC总线驱动编写 EEPROM全系列驱动编写 一种基于定时器的按键检测程序 【三】一点小感想——现成未必成熟 【2013-07-01】 【四】菜单,你了解几何? 更新时间:不晚于2013年9月30日 ========================================================================= 评分 |
|
|
相关推荐
|
|
|
本帖最后由 3htech 于 2013-7-1 17:17 编辑
【一】 定时器初值重装引起的误差 背景: 小白菜在做一个测速项目时,使用单位时间内进行计数的方法来测速。单位时间的产生是用定时器来实现的,初值手动装填。 使用信号发生器进测试时发现,实际测得的信号总是有0.15%的误差,无论如何也无法消除。 查找原因: 硬件上,查找信号进入单片机前的频率和波形,经过示波器对比,没有问题。说明问题出在单片机上。 问题要么是在计数器上,要么是在定时器上。我想了一下,计数器的可能性不大,因为信号频率不算太高,计数器完全没有问题。 可能的原因就是定时器上。 于是我查看了程序,在定时中断ISR中,有一条引起了我的注意, THn = xxxx; TLn = xxxx; 我想了想, 由于定时中断程序中,没有关定时器中断,定时器一直在运行,也就是说,CPU在跳转到定时中断程序执行时,定时已经跑了几个数了,而我在赋定时器初值的时候,没有考虑到这几个数。 我想,我找到了解决这个问题的原因。 解决之道 由于我的系统里面,定时中断优先级最高,且没有同级中断,并且TLn的初值很小,这允许我使用下面这条语句,而不至于让TLn溢出。 TLn += xxxx; 再次测试,频率终于一致了。当定时器不停,TLn += xxxx; 可以保证在执行本条语句之前,定时器跑的计数值不会被忽略。 后记 关于定时器中断,《删繁就简-单片机入门到精通》做了很详细的说明。大家可以看看~ |
|
|
|
|
|
|
|
|
本帖最后由 3htech 于 2013-7-1 17:17 编辑
【三】 一点小感想——现成未必成熟 当做一个项目的时候,我的前辈们和老板们最常说的一句话是,有现成的东西。不需要自己发挥。 试想一下,现成的东西就一定成熟吗? 所谓的现成,也许是前辈们的创新,也许是经典的东西。对于经典的东西,我们需要了解,否则也不一定能用好。 对于前辈们的创新,我们可以去检验一下,尽量做到自己心里有数,知道我们的电路和软件是什么,怎么运行的。 也许,只有在吃过亏的时候才懂得去思考。 |
|
|
|
|
|
{:8:} 小白菜给力啊!这个问题我也碰到到 当初就是用一个算法算数的时候过长,可能是数据类型的问题,当测速的时候,速度过快,计数器计数时间很短,两个沿的脉冲时间间隔也很短的时候,就会出现误差,后来经过休整算法才解决的!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
265 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
789 浏览 0 评论
1306 浏览 2 评论
787 浏览 0 评论
【RA4M2-SENSOR开发板评测】Analogue+Timers综合测试
1587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16901 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 05:17 , Processed in 1.089975 second(s), Total 104, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖