【问题标题】:Generate/ output clock pulse ( C code )产生/输出时钟脉冲(C代码)
【发布时间】:2013-03-27 20:23:29
【问题描述】:

我使用的是 Ethernut 2.1 B,我需要一个 C 程序,它在定时器 1 输出 B 上输出时钟信号,换句话说,在输出 OCIB 上。时钟信号的频率应为 1.0 kHz。

有人知道这是怎么做到的吗?

【问题讨论】:

  • 你试过什么??????

标签: c clock avr winavr


【解决方案1】:

您需要查看COM 位中的计时器。例如,对于 Timer0(8 位),COM 位在TCCR0 寄存器中设置。您可能感兴趣的设置是

TCCR0 |= (0<<COM1)|1<<COM0); // Toggle OC0 on compare match

这将在定时器达到指定值时切换 OC0 (p​​in14) 线。

您使用哪个计时器取决于您需要的精度:显然 16 位计时器可以为您提供比 8 位计时器更精确的时间分辨率。

针对您的特定频率 (1Khz) 的寄存器设置取决于您芯片的时钟速度,以及您使用的定时器:定时器使用预先调整的通用时钟信号(请参阅数据表的表 56 了解可能值)。这意味着预分频器设置将取决于您的时钟速度以及您想要计数的高度。对于大多数精度,您将希望计数尽可能高,这意味着与您的定时器的最大值兼容的最低预分频器设置。

至于从哪里开始,一般来说,阅读数据表是一个好地方,但谷歌搜索“AVR 计时器”也很有帮助。

【讨论】:

    【解决方案2】:

    它似乎基于Atmel ATmega 128,因此请阅读该 CPU 的数据表以了解如何对定时器硬件进行编程。

    不确定该微控制器是否支持直接驱动定时器的输出,如果不支持,您将不得不通过中断服务例程在软件中进行。

    【讨论】:

    • 是的,它确实是我正在使用的 Atmel ATmega 128。是的,我相信我需要使用中断服务程序来做到这一点。唯一的问题是,我不知道实际的代码/语法会是什么样子。它是学校项目的一部分,我不知道从哪里开始!
    • 你不需要 ISR,只需要设置你的定时器来切换输出线。
    猜你喜欢
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多