完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在PIC18F26K22上为重复32us定时器获得正确和一致的周期时遇到困难。我有一个空的主回路,并且我已经初始化了以下内容:我在输出端口上切换一个LED,然后用100mhz逻辑分析仪读出波形。超过32个周期,从44.46到45.98不等。超过3.4%的峰间变化,与32us的最大差异是44%。这是波形,与PIC12相比我做了同样的事情,结果更好,更一致(31.83us到32.1us或0.08%峰间变化,与32us的最大差异是0.38%):PIC12:我知道可能有更好的方法来产生一个32us的半周期波形,但我仍然可以做到这一点,并检查每个状态变化的其他端口,就像我能用定时器ISR做的那样?如果是,那么请给我一张通往成功的路线图:)不管那个答案,为什么这个Pic18比我的PIC12那么差,它只是其他中断和i2c初始化的PIC18吗?谢谢,Dale
|
|
相关推荐
6个回答
|
|
你没有向我们展示任何与你所遇到的问题相关的代码。
|
|
|
|
右边的45.98U低,比平均44.48秒半周期长6个指令,所以让我们看看你的ISR代码,如果有什么东西可以中断主程序中的中断。
|
|
|
|
所有代码都是由MCC代码配置器创建的,而我所添加的唯一代码是ISR中的端口切换。
|
|
|
|
你提到了“其他中断”。如果你的定时器翻转时正在处理另一个中断,这将直接影响所有的定时。如何计算“timer0ReloadVal16bit”的重载值?它是否允许C上下文保存代码生成的指令?向TMR0值添加偏移量通常比直接重写要好,这自动允许上下文保存代码和维护中断的任何延迟。甚至更好,使用TMR2/4/或6中的一个,它具有内置的重载寄存器,这将产生完美的定时。
|
|
|
|
如果您真的觉得必须像这样切换I/O,而不是让PIC替您使用外围设备,那么启用中断优先级,并将I/O切换(其他什么都没有)放到高优先级处理程序中是有意义的。当然,使用一个偶数计时器作为RIC建议。
|
|
|
|
从TMR0到TMR4的切换消除了大约45秒的错误周期下降到32秒。可能没有重新加载寄存器减慢TMR0,谢谢,这是我最大的担心!我还看到不一致是由其他活动中断(即I2C和TMR2(每隔1ms周期更新一个计数器变量))引起的。因此,对于每秒需要超精确32us中断的12ms,我可以关闭那些其他中断。我可以“篡改”TMR2计数器变量ab。通过在每次关掉TMR2 12ms时向其末尾添加12,以获得关断周期的le值。1ms定时器变量的平均“fudge”误差对于每个12ms关断周期约为0.5ms,我可以接受它。在12ms期间不使用I2C,但I2C在i上时很有趣t将稳定的32+/-.02us降到稳定的31.85+/-.02us。我甚至可以按照建议使用中断优先级来处理不一致性。无论如何,我想我现在对如何处理有了想法,非常感谢您为我指明了正确的方向!Deleand看来,PIC12上的TMR2具有重新加载寄存器,这将解释大的差异:
|
|
|
|
只有小组成员才能发言,加入小组>>
5125 浏览 9 评论
1984 浏览 8 评论
1914 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3148 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2212 浏览 5 评论
696浏览 1评论
583浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
465浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
602浏览 0评论
494浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-1 18:50 , Processed in 1.380008 second(s), Total 89, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号