你好朋友我是微控制器领域的新手想知道这是不可能在不使用计数器的情况下计算事件我的意思是通过监视连接到事件发生器的引脚。我问这个问题是因为目前我想计算频率传感器的我已经使用 DSO(数字存储示波器)检查了它的频率,它(DSO)说它的频率是 98khz,但是我们现在都知道 8 位计数器的最大值是 255,那么它怎么可能...... ...传感器连接到 PB0(Atmega16 的 TCNT0/Counter 0)......请帮助
问问题
222 次
2 回答
1
你可以用两种不同的方式来做。第一个是使用预分频器。例如,您可以将其设置为 1024,因此每触发 PB0 的第 1024 次(或者正确的术语是什么,自从我处理 MCU 以来已经有一段时间了)计数器增加 1。所以基本上计数器会在每个千赫兹(大约)。
第二种方法是不使用预分频器,而是设置 MCU,以便每次计数器溢出时,您将某个其他寄存器加 1,并且每次该寄存器溢出时,您将另一个寄存器加 1。使用 8 位定时器和另外 2 个 8位寄存器最多可以数到 16,777,215。我实际上更喜欢第二种方法,但我可能独自一人:)
Greybeard 和 Andy Brown 对 stm32 和微处理器标签也是正确的,你应该删除它们。
于 2015-08-01T19:41:15.363 回答
0
您可以将传感器引脚分配给外部中断引脚 ( INT0\INT1
),然后创建一个全局变量,该变量在ISR
来自传感器的每个外部信号中递增,并每隔固定时间获取样本。
该时间由定时器中断配置,但与计数数无关(定时器仅作为时钟工作),因此在ISR
定时器内部,您应该将计数数除以这个固定的时间量(counter/Ts
)。
然后你应该将代表计数器的变量设置为零,这里的计数器变量可以是一个unsigned long
,以确保它在高频下工作。
于 2016-01-13T18:42:51.677 回答