Фьюзы микроконтроллера отвечают за его предварительную настройку. Они позволяют указать источник тактирования, разрешить либо запретить работу сторожевого таймера, схемы контроля питания и т.д. Одни из них не столь принципиальны для работы микроконтроллера, другие, напротив, весьма критичны и их неосторожное изменение может привести к неприятным результатам. К примеру, фьюз RSTDISBL (External reset disable) позволяет запретить внешний сброс, при этом освободившийся от данной функции вывод микроконтроллера можно использовать как дополнительный цифровой пин. Однако вместе с входом внешнего сброса вы потеряете и возможность что-либо сделать с микроконтроллером, используя ISP программатор. Помочь в этой ситуации может высоковольтный программатор: он не использует сигнал сброса и запрограммированный RSTDISBL для него не помеха (к слову он и стоит значительно дороже внутрисхемного). Но есть и другой способ восстановления фьюзов ATtiny85, более доступный, о нем я и хочу рассказать.
Начнем с того, что AVR микроконтроллеры поддерживают до трех режимов программирования:
- режим последовательного программирования (по интерфейсу SPI) - именно его используют внутрисхемные программаторы;
- режим последовательного программирования при высоком напряжении;
- режим параллельного программирования при высоком напряжении.
Под "высоким" здесь понимается напряжение 12В, подаваемое на вывод Reset для перевода микроконтроллера в режим программирования. Мы для восстановления фьюзов воспользуемся режимом последовательного программирования при высоком напряжении. Для обмена данными в этом режиме используются 4 линии: SCI (тактовый сигнал), SDI (вход данных), SII (вход команд) и SDO (вывод данных). Применительно к ATtiny85 указанным линиям соответствуют выводы PB3, PB0, PB1 и PB2:
Назначение выводов ATtiny85 при высоковольтном программировании |
Роль высоковольтного программатора у нас будет выполнять Ардуино. Для этого скачаем и зальем в нее следующий скетч: http://clc.to/hv_serial_prog
Этот скетч подходит также для разблокировки ATtiny25 и ATtiny45. Первоисточник данного способа вы можете найти по ссылке: https://www.rickety.us/2010/03/arduino-avr-high-voltage-serial-programmer/
После заливки скетча подключаем микроконтроллер к Ардуино по схеме:
Схема для сброса фьюзов ATtiny85/45/25 |
Вариант соединения для поклонников схем в fritzing |
Источник 12В оставьте пока не подключенным. Подключаем Ардуино к компьютеру, запускаем IDE Arduino и открываем монитор порта на скорости 9600. Нам будет предложено ввести любой символ для продолжения. Вот теперь подключаем источник напряжения 12В. Такой порядок включения обусловлен алгоритмом высоковольтного программирования, который приведен в даташите (раздел 20.7). Вводим произвольный символ в мониторе порта и нажимаем ENTER. При этом в мониторе появится лог работы скетча:
- фьюзы ATtiny85 успешно сброшены. Отключаем микроконтроллер от источника 12В, после этого отключаем Ардуино от компьютера. Теперь нам снова доступен вход внешнего сброса ATiny85 и мы можем использовать ISP программатор.
Для меня установка фьюза RSTDISBL на ATiny85 уже привычное дело: это позволяет получить дополнительную линию ввода-вывода, а для заливки скетчей (в процессе отладки) можно использовать загрузчик Micronucleus. Надеюсь, данная статья поможет и вам и случайно установленный RSTDISBL уже не будет казаться проблемой.
Владимир, здравствуйте! Делаете ли прототипы под заказ? Как с вами можно связаться?
ОтветитьУдалитьДобрый день!
УдалитьНет, я не беру заказы. Можете попробовать на форуме ардуино в разделе ищу исполнителя: arduino.ru/forumy/ishchu-ispolnitelya
Со мной можно связаться по почте VladimirTsibrov@yandex.ru
Подскажите Atmega 168 / 328 оживет если в скече просто адреса фюзов поменять на low_fuses=0xFF high_fuses=0xDE ?
ОтветитьУдалитьДумаю, да. Попробовать стоит.
УдалитьДля программирования ATtiny85 и др мк с использованием ноги RST в качестве входа, а так же для восстановления фьюзов удобно использовать простейший программатор на Ардуино: http://arduino.ru/forum/apparatnye-voprosy/universalnyi-avr-programmator-na-arduino
ОтветитьУдалить