Для чтения текущих фьюзов был составлен простенький скетч ReadFuseBits Скетч читает значение фьюзов и выдает его в ком-порт. После заливки его в мониторе com-порта я увидел вот что:
Code: Select all
Low: 0xFF
High: 0xDA
Ext: 0xFF
Code: Select all
Low: 0xFF
High: 0xDA
Ext: 0xF5
Code: Select all
Небольшая ремарка по поводу значения фьюза Ext. Это байт в котором реально используются только младшие 3 бита. Значения остальных битов могут варьироваться. Например 0xFD это тоже валидное значение для ардуины. Поэтому надо смотреть на младшие три бита - там должна быть установлены 0й и 2й биты.
Подключаем его к Arduino соединяя одноименные выводы программатора с выводами платы Arduino (/RES -> Reset/RST). Устанавливаем в системе драйвер для USBASP (google).
Для прошивки фьюзов удобно использовать GUI консоль для AVRDude. В моем случае дело осложнилось тем, что на платах были установлены более новые контроллеры ATMega328PB, которые имеют другую сигнатуру, из-за чего софт скачанный в сети работать не захотел. Пришлось немного подшаманить и подправить конфиги. Заодно добавил режим пониженной тактовой частоты при прошивке, т.к. дефолтное значение не соответствует factory settings, что приводит к отказы/нестабильности при прошивке.
Итак подключаем контроллер к USBASP, запускаем AVRDUDEPROG. Выбираем правильный тип контроллера и программатор USBAspSlow. Фьюзы выбираем "прямые"
Переходим на страницу Fuses и нажимаем кнопку "Чтение"
Если все ок то появится надпись
И отобразаятся текущие прошитые значения фьюзов
Выставляем extended fuse в значение 0x05
И нажимаем кнопку "Программирование"
Отключаем контроллер от программатора. Все - мы изменили фьюзы отвечающие за контроль питания. Для проверки результата можно еще раз запустить скетч отображающий фьюзы и убедиться что все в порядке.
В атаче версия AVRDUDEPROG с модифицированными конфигами (пониженная частота и поддержка ATMega328PB)
Полезные ссылки
1. Arduino / ATmega 328P fuse settings
2. Upgrade to ATMega328pb