Microchip
直播中

何珊

7年用户 183经验值
私信 关注
[问答]

PIC18F26K22定时器ISR端口切换周期不正确且不一致怎么办

我在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)

杨玲

2020-5-13 06:35:39
你没有向我们展示任何与你所遇到的问题相关的代码。
举报

陈鲜孰

2020-5-13 06:53:16
右边的45.98U低,比平均44.48秒半周期长6个指令,所以让我们看看你的ISR代码,如果有什么东西可以中断主程序中的中断。
举报

杨剑东

2020-5-13 07:12:26
所有代码都是由MCC代码配置器创建的,而我所添加的唯一代码是ISR中的端口切换。
举报

丁亚念

2020-5-13 07:22:26
你提到了“其他中断”。如果你的定时器翻转时正在处理另一个中断,这将直接影响所有的定时。如何计算“timer0ReloadVal16bit”的重载值?它是否允许C上下文保存代码生成的指令?向TMR0值添加偏移量通常比直接重写要好,这自动允许上下文保存代码和维护中断的任何延迟。甚至更好,使用TMR2/4/或6中的一个,它具有内置的重载寄存器,这将产生完美的定时。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分