使用 Arduino 作为程序员时,如何在 ATtiny85 上设置时钟速度保险丝?

电器工程 Arduino 服装 保险丝位 时钟速度
2022-01-12 19:03:46

我正在关注本教程,使用 Arduino 对 ATtiny85 进行编程,使用它来播放一些音调(通过压电扬声器)。我正在努力获得正确音高的音调(我正在手动创建波形,因为 ATtiny85 不支持tone() 函数)。

我相信问题可能在于 Arduino 和 ATtiny 的时钟速度不同。我知道可以在 ATtiny 上更改时钟速度,我如何使用 arduino 环境来实现这一点?

4个回答

我正在成功使用 Arduino UNO + ArduinoISP。

在您的命令中添加-U标志以avrdude设置三个 ATtiny 保险丝中的任何一个或全部。

avrdude -p attiny85 -P com8 -c stk500v1 -b 19200 -U lfuse:w:0x6f:m -U flash:w:main.hex

时钟选择在第三个熔丝(“熔丝低字节”)上的位 [3:0] 中完成。如下设置它们以使用外部晶振(8MHz 或更快):

-U lfuse:w:0x6f:m

它的定义(我推断)必须是这样的:[保险丝低字节]:[写入]:[十六进制值]:[手动设置]

该字节高四位的默认值为0110,因此保留6in0x6f原样,仅更改第二位数字,f(其默认值为2)。

注意:如果您的进程比您预期的要长或短,请检查您的时钟预分频器和您对 F_CPU 的定义

尝试使用同一组(麻省理工学院的 High-Low Tech)题为Programming an ATtiny w/ Arduino 1.0的相关教程。

快速总结:从 Arduino IDE 的 Tools-> Board 菜单中,选择 ATtiny85 和您希望运行的频率(1 或 8 Mhz 内部时钟,或 20Mhz 外部晶振),然后使用工具 -> Burn Bootloader” . 我相信选择所需的速度板会修改 delay() 和其他与时间相关的 Arduino 函数的工作方式,以便与时钟速度同步。

我自己使用一些 ATtiny84 芯片在这种方法上取得了成功。简单的闪烁程序是固定的,以及使用 delayMicroseconds() 手动控制发送到伺服的脉冲所需的更灵敏的时序。

我相信 Arduino 软件(库和所有)假设您在 16MHz 下运行。如果您将该假设应用于您实际运行的时钟......事情应该会解决。假设您在 Tiny85 的内部振荡器上运行,我认为它以 1MHz 运行,所以只需将所有延迟语句(和其他时间概念)乘以 16。

如果您需要比内部振荡器提供的精度更高的精度,您应该考虑使用外部晶体或谐振器,但您需要更改 AVR 的保险丝设置才能使其工作,我认为您需要像 AVRISP 这样的程序员mkII 使用 AVR Studio 来做到这一点(我的建议)。

我对 ArduinoISP 草图知之甚少,但对我来说,它看起来有点破坏 ISP 协议以将程序上传到目标芯片(而不是板载 Mega328),不确定它是否具备操纵保险丝的能力。ArduinoISP 记录在这里http://arduino.cc/en/Tutorial/ArduinoISP,fwiw。请注意,您目前不能使用 UNO 来运行 ArduinoISP 草图。在我看来,您不能使用草图使 Arduino 成为使用 AVR Studio GUI 工具的可行界面。

编辑:看起来东西已经赶上了,现在 UNO 对 ArduinoISP 来说是可行的 - 感谢大家的评论

看来您正在使用 ArduinoISP,请尝试使用AVR Studioavrdude. 根据 ArduinoISP 的编写方式,它的功能可能与 Atmel AVRISP mkII 或类似设备类似。