Опубликовано 09.09.2009.
Идея разработки этого устройства родилась после ошибочной записи значений фьюзов в ATmega8, после которой вывод сброса стал обычным вводом/выводом порта, синхронизация предусматривала внешний источник, да ещё и запрещалось программирование по SPI - короче говоря "полный набор". Поиск схем параллельного программатора по интернету и в печати не дал практически ничего, что удовлетворяло бы заданным условиям простоты и повторяемости. После изучения соответствующих даташитов решено было разработать устройство на одном микроконтроллере, которое восстанавливало бы значения фьюзов, необходимые для работы на обычном последовательном программаторе. Вообще-то, честно говоря, параллельный программатор больше ни для чего и не нужен в любительском конструировании - все функции программирования успешно выполняют широко распространённые последовательные "5 проводков", "STK-200", "AVR910", "usbasp" иже с ними.
Итак, задача поставлена - ищем решение. Начинаем, конечно, с выбора контроллера. Для параллельного программирования необходимо иметь как минимум 19 выводов ( см. таблицу).
Восьмивыводные кристаллы сразу отпадают. Можно, открывая ключи +5В и +12В от одного вывода, использовать 18 линий- в этом случае появляется возможность использовать 20-ти выводные корпуса, ATtiny2313, например. В своей же конструкции я использовал ATmega8515, исходя исключительно из удобства расположения портов (на одной стороне) и линий питания - всё для упрощения разводки печатной платы. Можно применить и 28-ми выводные контроллеры, но я изначально планировал последующее подключение LCD-индикатора и 4-х кнопочной клавиатуры. А, в принципе, собрать устройство можно на любом имеющемся кристалле с необходимым количеством выводов - длина кода - 330 байт.
Кроме того, для коммутирования напряжений питания 5 В и программирования 12 В необходимы соответствующие ключи. Изобретать велосипед я не стал, и использовал широко известное схемное решение в виде транзисторного ключа.
Как и в любой диалоговой системе необходимы устройства ввода и вывода - добавляем, соответственно, кнопку и светодиод.
В результате родилась схема, представленная на рисунке:
Схема, как вы видите, проста до безобразия и особых разъяснений не требует. Единственное, что вызовет определенные конструктивные затруднения - это подключение программируемых контроллеров к программатору. Можно это сделать, например, коммутацией проводниками на макетной плате, а можно (и гораздо удобнее) собрать универсальную плату расширения для основных типов контроллеров (или для тех, с которыми постоянно работаешь), подключаемую к программатору шлейфом.
Питать устройство необходимо от стабилизированного источника 12 В. На микросхеме IC1 собран стабилизатор напряжения питания 5 В. Кнопка SA1 "PROG"- даёт команду на перезапись фьюзов, светодиод зелёного свечения VD1 "DONE" - сигнализирует об успешном перепрограммировании. На транзисторах VT1 - VT4 собраны ключи для коммутации напряжений питания и программирования. Сразу оговорюсь, что схему можно совершенствовать сколько душе угодно. Допустим, установить стабилизатор на 12 В - в этом случае можно питать устройство от нестабилизированного источника 16-22 В. Возможно заменить транзисторные ключи на микросхему коммутатора тока и пр.
Конструкция программатора может быть любой - в зависимости от Ваших возможностей и умения. Я сам программатор сделал на печатной плате, а программируемые микроконтроллеры подключал через макетку. В дальнейшем планирую сделать универсальную плату расширения и подключать к программатору 20-ти жильным шлейфом. Детали любые малогабаритные, номиналы указаны на схеме.
Пару слов о программной части. Программа написана на языке С в оболочке WinAVR. Порядок действий в ней полностью соответствует даташиту ATmega8 (раздел о параллельном программировании).
Работать с программатором очень просто. Контроллер, в котором необходимо переписать фьюзы, вставляется в соответствующую панельку. Включается питание и нажимается кнопка "PROG". Загоревшийся светодиод "DONE" сигнализирует об успешной перезаписи. Питание выключается и, после изъятия из панельки, контроллер используется обычным способом.
В своей конструкции я подключал к программатору, кроме панели для ATmega8 ещё панель для ATmega16, поскольку алгоритм программирования для него почти такой же и прошиваемые значения фьюзов позволяют работать с последовательным программатором. В результате устройство даже в такой представленной "игрушечной" версии успешно "реанимирует" кроме ATmega8 ещё и ATmega8535, ATmega16, ATmega32 - это то, что я лично пробовал перепрограммировать
В дальнейшем я планирую дополнить программатор некоторыми функциями, расширить номенклатуру "реанимируемых" контроллеров. В планах добавить функцию считывания байта сигнатуры и, в зависимости от типа контроллера, прошивать его своими "даташитовскими" значениями. А, вообще, приведённых сведений более чем достаточно, чтобы пользователь мог сам модернизировать программатор - хоть в схемной, хоть в программной части.