Заменить предохранители Arduino Uno (может ли Arduino Uno заменить свои собственные предохранители?)

На данный момент я использую только Arduino Uno, включая его 328p (нет другого внешнего чипа для программирования).

Я хотел бы заменить его предохранители на внутренние часы с частотой 8 МГц (потому что тогда я перенесу 328p из Arduino Uno), и для простоты я хотел бы сделать это из Arduino IDE.

Вот что я пробовал:

  • Я создал новую запись в файле boards.txt, скопированную из Uno, изменил предохранители, например:

    atmega328p.name=Atmega328p
    atmega328p.upload.tool=avrdude
    atmega328p.upload.protocol=arduino
    atmega328p.upload.maximum_size=32256
    atmega328p.upload.maximum_data_size=2048
    atmega328p.upload.speed=115200
    
    atmega328p.bootloader.tool=avrdude
    atmega328p.bootloader.low_fuses=0x62
    atmega328p.bootloader.high_fuses=0xD9
    atmega328p.bootloader.extended_fuses=0xFF
    atmega328p.bootloader.unlock_bits=0x3F
    atmega328p.bootloader.lock_bits=0x0F
    atmega328p.bootloader.file=optiboot/optiboot_atmega328.hex
    
    atmega328p.build.mcu=atmega328p
    atmega328p.build.f_cpu=8000000L
    atmega328p.build.board=AVR_UNO
    atmega328p.build.core=arduino
    atmega328p.build.variant=standard
    
  • Я выбрал эту плату в разделе Инструменты > Плата: Atmega328p

  • Я попытался загрузить любой скетч (а не загрузить с помощью программатора, поскольку у меня нет другого чипа, подключенного к Arduino Uno), надеясь, что он изменит фьюзы во время (успешного) процесса Загрузки.

Я думаю, что это не сработало (когда я перемещаю 328p за пределы Uno, оно не работает).

Как я могу изменить предохранители для Arduino Uno непосредственно из Arduino IDE, чтобы включить внутренние часы с частотой 8 МГц?


PS: "Инструменты > Записать загрузчик" не удается, но я думаю, что это нормально, так как есть только Arduino Uno, и никакой другой микросхемы/нечего использовать в качестве "Программатора":

avrdude: stk500_recv(): программатор не отвечает
avrdude: stk500_getsync() попытка 1 из 10: не синхронизировано: resp=0x03

, 👍2


3 ответа


Лучший ответ:

2

Вам нужен программатор, чтобы прожигать предохранители. Если у вас есть другой Arduino, вы можете использовать Arduino в качестве примера скетча ISP в среде IDE. Вы не можете сжечь предохранители, просто используя USB-кабель, как вы загружаете код. Единственная причина, по которой вообще можно общаться с чипом, заключается в том, что есть еще один чип для преобразования его в последовательный порт и загрузчик на 328P, позволяющий загружать код через последовательный порт.

,

Спасибо за ваш ответ. Просто убедитесь: 1) действительно ли Arduino Uno не может заменить * свои собственные * предохранители?, @Basj

2) если я использую Nano в качестве программатора (Arduino в качестве интернет-провайдера) для программирования Uno, во время какого процесса будут изменены предохранители? Во время "Записать загрузчик" или во время "Загрузить с программатором"?, @Basj


1

Как упоминалось в другом ответе, кажется, что Arduino Uno не может заменить свои собственные предохранители.

Вот как я это сделал:

  • Я использовал Nano (нагруженный «Arduino as ISP») в качестве программатора для Uno с этим классическим подключением (за исключением того, что в моем случае левая плата, программатор, — это Nano):

  • Я добавил это в boards.txt (источник здесь):

    ##############################################################
    atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)
    atmega328bb.upload.protocol=arduino
    atmega328bb.upload.maximum_size=30720
    atmega328bb.upload.maximum_data_size=2048
    atmega328bb.upload.speed=57600
    atmega328bb.upload.tool=avrdude
    atmega328bb.bootloader.tool=arduino:avrdude
    atmega328bb.bootloader.low_fuses=0xE2
    atmega328bb.bootloader.high_fuses=0xDA
    atmega328bb.bootloader.extended_fuses=0x05
    atmega328bb.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
    atmega328bb.bootloader.unlock_bits=0x3F
    atmega328bb.bootloader.lock_bits=0x0F
    atmega328bb.build.mcu=atmega328p
    atmega328bb.build.f_cpu=8000000L
    atmega328bb.build.core=arduino
    atmega328bb.build.variant=standard
    atmega328bb.build.board=AVR_BARE
    
  • Я использовал "Программист: Arduino как ISP", затем "Записать загрузчик", затем "Загрузить с помощью программатора" с любым скетчем.

  • Затем фьюзы программируются на внутреннюю частоту 8 МГц, и мы можем вынуть ATmega328p из Uno и перенести ее на макетную плату! Работаем :)

,

0

Это технически возможно, но сложно.

Сначала вам нужно подключить Arduino с помощью перемычек таким образом, чтобы 328P мог использовать свой разъем ICSP для перепрограммирования 16U2/8U2 через собственный разъем этого чипа. Установив правильную пользовательскую прошивку, вы можете перемонтировать плату, чтобы 16U2 менял предохранители 328P при загрузке и повторно загружал прошивку перед переключением на свою обычную функцию. Тогда нужно просто перепрограммировать 328P на 16U2 с помощью оригинальной прошивки DFU, и вуаля! Arduino, поменявший собственные предохранители!

Если вам просто нужно заменить предохранители без программатора ICSP, это можно сделать с помощью программирование чипа 16U2 непосредственно через его USB-порт (хотя технически это не квалифицируется как Uno "само программирование").

,