pic - PIC18 信号测量定时器 SMT1(计数器模式)不递增
问题描述
我正在尝试在 PIC18F45K42 上使用 SMT1 来计算引脚 RB0 上的方波周期。我无法让计数器增加,不确定我做错了什么。如果我理解正确,SMT1TMR 应该增加,但事实并非如此。(我还直接检查了 SMT1TMRL 等,它没有改变)。
1)我正在尝试做一个普通的计数器,而不是门控,所以我根本没有使用 Window 信号(我不想使用它,我只想不时将计数器归零然后检查看看有多少平方周期已经到达)。
2)根据 MPLAB X 中暂停的调试器,我将寄存器设置如下(下图)。我将示波器探头直接放在引脚上,我可以看到方波正在到达。我也可以偶尔暂停调试器来读取 PORTB 并看到 PORTB.0 在高低之间变化,所以我相信它正在被接收。
3)我正在使用函数发生器产生的 20 Hz 到 400 Hz 左右的方波。
我附上了寄存器的图像。以下是参考值:
SMT1SIGPPS 0x08 (should be RB0)
SMT1CON0 0x80
SMT1CON1 0xC8
SMT1STAT 0x05
SMT1SIG 0x00
TRISB 0xE3
PMD6 0x17 (SMT1MD is 0, which should be "not disabled")
任何建议都非常感谢。这似乎应该如此简单明了。
谢谢你。
解决方案
我想到了。关键在数据手册 25.1.2 周期匹配中断。周期寄存器必须设置为比计数器运行时间长。它默认为 0,因此计数器无法递增。通过手动加载具有最大值的 3 个周期寄存器来修复它......将以下内容添加到我的 ini 代码中,现在似乎按预期工作。
SMT1PRU = 0xFF; //set max period for SMT1 so counter doesn't roll over
SMT1PRH = 0xFF;
SMT1PRL = 0xFF;
推荐阅读
- ios - SwiftUI:如何使用 swift 在 apollo graphQl(iOS) 中添加身份验证标头?
- c# - 选择大于 0 的 JSON 元素到列表中
- android - 如何解决:应用程序不断停止 android studio
- python - 不能在 PyQt5 场景中使用拖放技术
- powershell - 当抛出预期错误时,Pester 测试失败
- testing - 邮递员 - 聚合或包含测试
- jwt - jwt中是否需要公钥和私钥?
- c# - c# Generic Service Casting & Implementation 问题
- macos - 如何在 Mac OS 上安装 R-devel?
- java - 如何解析字符串并将其转换为日期并最终转换为纪元时间?