Arduino 12MHz晶体速度

Arduino 12MHz晶体速度,arduino,clock,arduino-uno,Arduino,Clock,Arduino Uno,所以我刚刚注意到我的中国Arduino Uno有一个12MHz的晶体,而不是原来的16Mhz 我做了计算,结果是四分之一毫秒的差 我的问题是: 这是否会影响servos或tone(),或任何其他对时间敏感的硬件/库 我可以用代码通知“时钟速度为12000”吗 时钟速度的降低将影响任何使用计时器的东西,除非该代码可以改变以适应较慢的时钟。延迟、毫秒()、显式编码的计时器中断等。必须记住,每秒的总指令数会更少,因此在16MHz下勉强“适合”的快速中断可能根本不适合12MHz下可用的时钟周期 嗜好级伺

所以我刚刚注意到我的中国Arduino Uno有一个12MHz的晶体,而不是原来的16Mhz

我做了计算,结果是四分之一毫秒的差

我的问题是:

  • 这是否会影响servos或tone(),或任何其他对时间敏感的硬件/库
  • 我可以用代码通知“时钟速度为12000”吗

  • 时钟速度的降低将影响任何使用计时器的东西,除非该代码可以改变以适应较慢的时钟。延迟、毫秒()、显式编码的计时器中断等。必须记住,每秒的总指令数会更少,因此在16MHz下勉强“适合”的快速中断可能根本不适合12MHz下可用的时钟周期

    嗜好级伺服尤其对定时敏感……它们依赖于每20毫秒左右0.5-2.0毫秒范围内的脉冲。因此,如果你的项目像许多爱好项目那样包含伺服,你就需要特别注意时间安排


    在gcc-c编程中,
    #define F_CPU=12000000
    指令将提醒编译器/预处理器在考虑12 MHz时钟的情况下计算延迟。您的工具集可能会有所不同

    12mhz晶体不是Arduino时钟源,它用于这些克隆板上的USB芯片(CH340)。Arduino像往常一样通过一个微型谐振器(可能在C5和C6之间)以16mhz的频率计时。你不需要做任何调整。

    Thanx为了澄清,还有一件事:如果我设置#define F#u CPU=12000000,这不会解决伺服的延迟问题吗?!由于pwm将是准确的,我相信它很可能会。但如果可能的话,在连接伺服和测试正确的范围和行程时会小心。我已经这样做了,而且我的解决方案是不使用servo.write(),而是使用servo.writeMicroseconds(),我现在从aliexpress测试arduino mega,它有12MHz的时钟。例如闪烁,延迟10秒,正好延迟10秒。通过delay()和delayMicroseconds()这是正确的答案!我使用的大多是中国的Arduino克隆电路板,我所看到的许多制造商的电路板在328p的引脚9和引脚10上都有一个16MHz的晶体,但通常CH340G的晶体为12000MHz,而普通的16000MHz晶体则是12000MHz。