Параллельный программатор для AVR — аналог STK500
Версия 2, исправленная и доработанная
Практически все AVR контроллеры можно запрограммировать в двух режимах – высоковольтном (параллельном) и низковольтном (ISP). Наиболее часто используется низковольтное программирование. В большинстве случаев для зашивки кодов программы не требуется даже извлекать контроллер из платы и устанавливать его в панель программатора. Аппаратная реализация ISP программаторов очень простая, с описанием одного из вариантов такого программатора – аналога фирменного AVRISP – можно ознакомиться на страничке Программатор для AVR — аналог AVRISP моего сайта.
К сожалению, изначально фирма Atmel основным режимом считала режим параллельного высоковольтного программирования. Поэтому в режиме ISP некоторые функции, в частности отдельные FUSE биты, недоступны для программирования. Если быть точным, то запрограммировать их можно, но только один раз. После этого контроллер перестанет определяться программатором и перепрограммировать его в режиме ISP будет невозможно.
Наиболее актуальна эта проблема для микроконтроллеров в восьмивыводном корпусе, в которых вывод сброса RESET можно запрограммировать на использование в качестве дополнительного порта ввода-вывода. Это делается установкой FUSE бита RSTDISBL. Но после этого контроллер невозможно будет перепрограммировать в режиме ISP. Возможны и другие ситуации, когда не обойтись без высоковольтного параллельного программатора.
Предлагаемый программатор – это упрощенный и модернизированный аналог выпускаемого и поддерживаемого компанией Atmel стартового набора разработчика STK500. Он позволяет программировать микроконтроллеры как в режиме ISP, так и в параллельном режиме. Поддерживаются все, без исключения, микроконтроллеры 8 бит AVR. Управление осуществляется через COM порт персонального компьютера. Возможно подключение и к USB через конвертер, например на FT232BM, описание которого можно найти страничке Переходник USB COM моего сайта. Управляющая программа является составной частью фирменной интегрированной отладочной среды разработки AVR Studio от Atmel. Ее последняя версия всегда свободно доступна на сайте Atmel по адресу http://www.atmel.com.
Принципиальная схема основной платы программатора показана на рис. 1. Слишком сложно? Но ведь любой инструмент может быть любительским или профессиональным. Если нужно раз в жизни запрограммировать один единственный контроллер, конечно, собирать такую относительно сложную схему нецелесообразно. А вот для программиста – разработчика устройств на основе AVR, такой программатор может сберечь массу сил, многократно окупив потраченные на его изготовление средства и время. Если вам нужен профессиональный параллельный высоковольтный программатор AVR, который можно собрать своими руками, то эта конструкция именно то, что вам нужно.
Собственно программатор выполнен на DD3 типа ATmega8535. Светодиоды HL1 зеленого цвета и HL2 красного индицируют режим готовности и программирования соответственно. DD4 предназначен для записи новых версий прошивок в основной контроллер, а также для управления напряжением питания программируемого контроллера. Для повышения нагрузочной способности выводы PD3…PD5 соединены параллельно.
В схеме программатора предусмотрены два переключателя с фиксацией – SA1 и SA2. SA1 в левом по схеме положении включает в цепь питания диоды VD4 и VD5. При этом напряжение питания программатора и, соответственно, программируемого контроллера снижается примерно до 3,6 В. Как показала практика, иногда это бывает необходимо, т.к. некоторые контроллеры при напряжении 5 В в параллельном режиме программируются некорректно.
Если переключатель SA2 установить в левое по схеме положение, после программирования на выводе сброса будет установлен единичный уровень, т.е. сразу начинается работа запрограммированной в контроллер программы. Это хорошо при отладке и внутрисхемном программировании, но нежелательно при программировании в панельке программатора. Ведь неконтролируемая работа программы может привести к непредсказуемым последствиям, например, испортить содержимое EEPROM только что корректно запрограммированного контроллера. Для исключения этого SA2 следует установить в правое по схеме положение. В этом случае на выводе RESET после программирования будет нулевой уровень, а питание контроллера отключится.
Элементы микросхемы DD6 блокируют подачу на программируемый контроллер тактовой частоты при выключении его питания. На транзисторах VT1…VT3 собран коммутатор напряжения сброса 0 – 5 – 12 В. Включение напряжения 12 В при программировании индицирует свечение светодиода HL4 красного цвета. VT4 — это ключ, коммутирующий питание программируемого контроллера. Как показала практика, при программировании потребляемый ток может достигать 100 мА, поэтому в качестве VT4 нужно использовать транзистор с допустимым током 0,5…1 А. DD5 – это преобразователь напряжения 5 –>12 В.
Контроллеры в DIP корпусах можно программировать в параллельном режиме непосредственно в программаторе на плате коммутации, которая подключается к основной плате параллельно разъему X3. В режиме ISP возможно только внутрисхемное программирование, хотя, при необходимости, можно и для этого режима изготовить плату коммутации и подключить ее к разъему X3. Ее схема аналогична схеме платы коммутации упоминавшегося выше программатора AVRISP.
Параллельное программирование новой серии AVR ATtiny26/261/461/861 производится с помощью дополнительного переходника — модуля расширения.
Схема платы коммутации, чертежи печатных плат, а также особенности наладки и работы с программатором рассмотрены в подробном описании.
Источник
Делаем дешевый аналог STK500 из китайского USB ISP программатора
На aliexpress был куплен USB ISP программатор коих там — пруд-пруди.
Будем переделывать его в аналог атмеловского STK500, известный как AVRDOPER.
Стоит он в где-то 3-4$ (около 200 рублей на момент покупки), ищется на aliexpress / ebay по фразе USB ISP programmer . Если в хозяйстве нет программаторов для ATMEL — рекомендую брать там же USBASP программатор (только платка) по цене 2-3$ — она позволит не только программировать микропроцессоры ATMEGA, но и вот такие программаторы. Правда не из среды разработки, а только из AVRDUDE и подобных спец. программ.
Открываете у программатора колпачок, затем стягиваете алюминиевый корпус в сторону USB-разъема и все — получаете плату программатора. Смотрите внимательно — нам нужно, чтобы программатор был собран на ATMEGA88 (предположительно, версия платы > 3.0).
Если Вы там увидели простую ATMEGA8 — не страшно, люди ставили AVRDOPER и туда:
здесь, здесь и здесь. Ну либо сделать аналогично тому, что написано ниже, только для ATMEGA8.
Ну а если у Вас там — ATMEGA88 — продолжаем — переворачиваем плату, видим там два контакта для перемычки (с надписью UP). Закорачиваем их проводком:
После этого программатор перейдет в режим самопрограммирования. Программировать его можно любым другим программатором с аналогичным разъемом — например USBASP-ом.
Т.е. берем второй программатор, его втыкаем в компьютер, а хвостик с разъемом — в нашего подопытного.
Я программировал с помощью AVRDUDE + AVRDUDEPROG и китайского USBASP программатора. Выбираем в AVRDUDE USBASP и ATMEGA88. Считываем сигнатуру — если считалась — значит все сделали правильно и можно шить.
Если хотите сохранить текущую прошивку программатора, что я рекомендую (чтобы была возможность откатиться), то:
- считать текущие FUSE — биты и записать их значение
- считать прошивку в отдельный файл
- считать EEPROM в отдельный файл
Далее:
- полностью стереть микроконтроллер
- записать новые FUSE биты
для ATMEGA88 FUSE LOW BYTE = 0xDF и FUSE HIGH BYTE = 0xDD, если FUSE не инвертированные — это означает включеные SUT1, SPIEN и BODLEVEL1 - скачать и прошить прошивку AVRDOPER
- EEPROM не трогать
Ну вот и все, теперь надо отпаять нашу перемычку, чтобы программатор вошел в штатный режим работы и установить драйверы AVRDOPER.
Теперь, когда Вы подключите новый программатор в USB, он найдет два устройства. Одно из которых будет виртуальный COM-порт. Находите его в диспетчере устройств, смотрите какой у него номер. Если номер > 4, то советую принудительно переопределить там же на какой-либо от 1 до 4 (т.к. в средах разработки COM-порты с бОльшими номерами не показываются).
Все — теперь что из CodeVision , что из AtmelStudio можно настроить, что программатор у Вас — STK500 на соответствующем COM-порту — и все — можно шить прямо из среды разработки.
По скорости мне показалось, что AVRDOPER медленнее прямого USBASP, зато удобней из-за работы непосредственно из среды, где код пишешь.
Что касается FUSE битов и других контроллеров ATMEL
В принципе, FUSE биты можно посмотреть в makefile от AVRDOPER (в том числе и для ATMEGA8). По-умолчанию AVRDOPER собран для ATMEGA8 и кварцев от 12 MHz с соотвествующим makefile-ом, однако в моем архиве он изменен под ATMEGA88 (однако hex для ATMEGA8 там присутствует, да и makefile можно всегда исправить).
Для нашего случая я перекомпилил AVRDOPER для ATMEGA88.
Перекомпилить просто в любом линуксе (я использовал Ubuntu server):
- ставим компиллер GCC с поддержкой ATMEL
sudo apt-get install gcc-avr binutils-avr avr-libc - ставим утилиту make sudo apt-get install make
- копируем в некую директорию разархивированный AVRDOPER
- изменяем там makefile, выставляя там DEVICE, F_CPU и FUSE_L и FUSE_H
- make usbasp
- получаем в той же директории нужный нам hex-файл прошивки
Этот же программатор можно переделать в нормальный USB ASP
Вот переделанные исходники, их можно скомпилить хоть под ATMEGA8 хоть под ATMEGA88 и авторская статья.
Для ATMEGA88 FUSE LOW BYTE = 0xFF и FUSE HIGH BYTE = 0xDF и прошивка.
Источник
Stk500 программатор своими руками
|