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


17

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

我认为问题可能归结于Arduino和ATtiny上不同的时钟速度。我知道可以在ATtiny上更改时钟速度,如何在arduino环境下完成此操作?


顺便说一下,这真的很酷,谢谢分享!
vicatcu,2010年

脱下帽子!我从未尝试过以此方式对attiny85进行编程。.当avrdude尝试编写闪存时,我始终会出现“编程器不同步”错误。交换arduino与巴士海盗的工作虽然...
JonathanD

@Jon:我不确定“程序员不同步”的根本原因,但是使用AVR Studio,您可以调整编程频率。avrdude中可能有一个类似的选择,如果您再次尝试一下,可能值得一看
Nick T

Answers:


2

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

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

我对ArduinoISP的草图了解不多,但是对我来说,它看起来有点像ISP协议那样将程序上传到目标芯片(不是板上的Mega328),不确定它是否具备操纵保险丝的能力。有关ArduinoISP的信息,请参见http://arduino.cc/en/Tutorial/ArduinoISP。请注意,您当前不能使用UNO来运行ArduinoISP草图。在我看来,您不可以使用草图使Arduino成为使用AVR Studio GUI工具的可行界面。

编辑:看起来事情已经赶上了,UNO现在可用于ArduinoISP-感谢所有评论


感谢您对UNO的注意,实际上我正在使用Duemilanove,将168芯片交换为328,并且可以获取正常的ATtiny草图以通过ArduinoISP正确上传。我将尝试您的/ 16小费!
fearoffours 2010年

@fearoffours您知道您可以尝试做的另一件事是基于ArduinoISP编写草图,将保险丝设置为特定值。如果ArduinoISP可以编写Flash,那么我没有理由认为您无法对AVR数据手册中所述的ISP协议进行设置。
vicatcu 2010年

1
@fearoffours,我也刚刚意识到(并更新帖子)说乘以16而不是除以16(您运行的时钟较慢,将需要更多的滴答声才能获得相同的持续时间)
vicatcu 2010年

我知道已经过了一年,但是我成功地使用UNO作为AVR程序员。(不过,我确实改变了ArduinoISP草图delay(20)insted的的delay(40)它的定义void heartbeat()。)
JellicleCat

我知道甚至更晚,但我成功使用了Uno作为AVR程序员,而无需更改草图中的任何内容。
ingh.am 2014年

4

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

-Uavrdude命令中添加标志,以设置三个或任意三个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

其定义(我推断)必须类似于:[Fuse Low Byte]:[write]:[hex value]:[手动设置]

该字节的四个高比特的默认值0110,因此,保持60x6f原样,且仅改变第二数字,f(它的默认值是2)。

注意:如果您的进程花费的时间比预期长或短,请检查时钟预分频器和F _ CPU的定义


我想提醒一下,我只是使用上面的avrdude -U lfuse:w:0x6f:m选项对AtTiny85进行了修改。我需要使用高压设置将其重置。因此,对于尝试重置保险丝而又不知道自己在做什么的人们(如我自己)要当心。
MV

@MV您真的是在砌砖吗?还是在尝试重置保险丝时根本没有使用外部XO?
damd 2014年

没有外部时钟可以使用。从更严格的意义上讲,砌砖是什么意思?
JellicleCat 2014年

@JellicleCat,如果您将保险丝设置为使用外部XO,则需要使用连接到MCU的外部XO进行编程/设置/重置保险丝。不这样做,会给您留下深刻印象,因为单片机需要分机,所以它是砖砌的(〜不再工作了)。XO可以运行,甚至可以通过ISP对其进行编程。
DAMD

好的。如果我理解这件事,我将保险丝设置为XO,然后恢复芯片,我使用Arduino提供了一个驻波,用于XO。
JellicleCat 2014年

3

尝试使用同一小组(麻省理工学院的高科技)的相关教程,名为“ 使用Arduino 1.0编程ATtiny”

快速摘要:从Arduino IDE的“工具”->“板”菜单中,选择ATtiny85和您希望运行的频率(1或8 Mhz内部时钟,或20Mhz外部晶体),然后使用“工具”->“烧录引导程序”我相信选择所需的速度板会修改delay()和其他与时间相关的Arduino函数的工作方式,以便与时钟速度同步。

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


1

看来您使用的是ArduinoISP,请尝试使用AVR Studio或的命令行选项avrdude。根据ArduinoISP的编写方式,其功能可能类似于Atmel AVRISP mkII或类似的东西。


我不认为Arduino本身就是ISP程序员-我认为它上面带有ISP标头,这样您就可以在电路
中将

仔细阅读该文章,似乎您可以使用ArduinoISP草图来做这件事-您每天都在学习新知识!:)
vicatcu 2010年

如果您使用的是Windows,则AVR Studio可以。知道有一个用于Eclipse的AVR插件(这与称为Sloeber的Arduino插件不同)。在属性-> AVR下有一个漂亮的保险丝对话框。但是,是的,OP仅希望使用“核心”频率和“ Burn Bootloader”。
mckenzm

1

ATtiny85的默认熔丝设置为:熔丝0x62,熔丝0xdf,熔丝0xff。它使用内部RC(8 MHz)振荡器“除以8”,因此时钟为1 MHz。

请参阅http://www.engbedded.com/fusecalc更多保险丝设置,。

即使使用ArduinoISP作为编程器,您仍然可以直接使用avrdude来更改ATtiny85的保险丝设置。

如果最终确实要手动更改保险丝以更改时钟,请确保编辑attiny85.build.f_cpu[arduino_folder] \ hardware \ attiny45_85 \ boards.txt文件的行。


+1这真的很有用,尤其是时钟速度为1MHz,谢谢
fearoffours 2011年

0

我认为您可以使用ArduinoISP设置保险丝,但不能使用Arduino IDE而是使用avrdude来设置保险丝,请检查此链接。从来没有自己测试过。

本教程明确指出您可以使用Arduino UNO,并且我已经对其进行了测试和工作,因此我可以确认这一点,因此ArduinoISP页面已过时,应忽略UNO警告。如果您的UNO是第一批中的一个,则您的引导加载程序可能有问题,您将需要重新刷新引导加载程序。检查此页面以获取更多信息(忽略序列号,我所有的UNO都不来自该系列,并且有问题)。

您从本教程下载的移植核心库被编写为使用1MHz内部振荡器(已通过boards.txt文件确认),因此,定时问题可能出在移植核心库或您的代码中。

亲切的问候


0
  1. 从“板管理器”中选择一个包含ATTiny85的ATTiny板。在“工具”菜单中。我认为现在它包括“ 16MHz内部PLL”。(您可以从http://drazzy.com/package_drazzy.com_index.json安装一个)

  2. 如果需要,请明确选择ATTiny85。

  3. 选择一个时钟。在不知不觉中,选择一个内部时钟。

  4. 单击“刻录引导程序”作为菜单项。

注意,如果选择非常低的值,则可能无法再对MCU进行编程。如果这是您的意图,请最后执行此操作,除非您有备用零件或高压编程器来复位保险丝。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.