使用Arduino uno编程独立的ATmega2560

时间:2015-03-13 19:42:28

标签: arduino arduino-uno bootloader atmega

通过在boards.txt文件中添加以下行,我使用Arduino uno成功编程了独立的ATmega328p:

atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)
atmega328bb.upload.protocol=stk500
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600
atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.path=arduino:atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
####atmega328bb.bootloader.file=ATmegaBOOT_168_atmega328.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F
atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=standard
atmega328bb.bootloader.tool=arduino:avrdude

bootloader工作,我能够在独立的ATmega328p上成功运行bl​​ink示例。

现在,我正在尝试将一个闪烁示例上传到独立的ATmega2560。我从工具菜单(内置板ATmega2560)中选择了板作为ATmega2560并运行了引导加载程序。我没有对boards.txt文件中的ATmega2560进行任何更改。引导程序工作正常,代码已成功上传到ATmega2560。

然而,问题是眨眼示例不起作用。独立电路板上引脚26上的LED指示灯开启的时间非常短,然后在很短的时间内关闭,然后再次打开一小段时间,最后关闭1秒钟。重复该循环。但是,闪烁代码应该打开LED然后提供1秒的延迟然后关闭1秒钟,并重复此循环。眨眼代码不起作用,因为它应该在我的独立ATmega2560

上工作

我使用TIMER1测试了同样的事情。我写了代码,每隔0.03秒闪烁一次LED。这在独立的ATmega328p中运行良好,但它不适用于独立的ATmega2560。

会出现什么问题?我是否需要在boards.txt文件中为独立的ATmega2560添加一些行?

我连接所有VCC引脚,GND引脚和晶体,包括滤波电容和电阻,如图2所示。

之后,我通过10k电阻将复位引脚连接到5v。

之后,我做了以下事情:

  • Arduino Uno引脚10用于复位独立ATmega2560的引脚
  • Arduino Uno将MISO固定为独立ATmega2560的MISO
  • Arduino Uno引脚MOSI引脚独立ATmega2560的MOSI
  • Arduino Uno将SCK引脚连接到独立ATmega2560的SCK

请帮忙!

1 个答案:

答案 0 :(得分:0)

在Board.txt文件的ATMEGA2560部分中,您必须替换" 0xD8"的值。使用" 0xD9"。就是这样,因为在独立的ATMEGA2560芯片中,如果没有设置BOOTRST保险丝,芯片将被正确编程,但程序永远不会运行。因此该行可能看起来像这样(我们可以保持原始行注释):

#mega.menu.cpu.atmega2560.bootloader.high_fuses = 0xD8

mega.menu.cpu.atmega2560.bootloader.high_fuses = 0xD9

这里的教程: https://soc.ninja/documentation/programming-atmega2560-with-arduino-uno-or-mega/