【问题标题】:AVR/Arduino: reading timer toggled port pinAVR/Arduino:读取定时器切换端口引脚
【发布时间】:2011-06-16 19:29:58
【问题描述】:

我已将定时器 2 配置为 CTC 模式并在比较匹配时切换端口引脚 (TCCR2A=0x42, TCCR2B=0x02, OCR2A=0x20) 并将 DDR3 设置为输出。因此,根据 ATmega328P 文档(第 158-163 页)。 OC2A(又名 PB3)应在每次比较匹配时切换。不幸的是,我无法读取 PORTB 的引脚状态。这是预期的吗?我假设,即使将端口配置为输出,我也可以读取设置值。

【问题讨论】:

    标签: timer arduino avr


    【解决方案1】:

    有两个问题:

    1. 在 AVR Studio 4.18 中,我不能使用模拟器 1,因为它有一个定时器 2 的错误,因此无法正确切换端口引脚。我需要使用 Simulator 2 或 AVR Studio 5。

    2. 我需要读取 PINB 而不是 PORTB(尽管切换是一种输出操作)。

    【讨论】:

      【解决方案2】:

      我不知道具体的微控制器,但在某些架构中,在更改端口引脚和更新锁存器之间至少需要一个NOP(以便您可以读取更改)。

      还有一个引脚可以切换的最大频率(比微控制器 CPU 时钟慢很多倍)。确保不要超过这个频率。

      【讨论】:

      • ATmega 处理器可以通过定时器直接切换端口引脚。不必手动执行此操作,也无需等待 nops。
      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      相关资源
      最近更新 更多