Параллельный высоковольтный программатор для avr своими руками
Редко, но иногда бывает очень нужен “параллельный” программатор для контроллеров AVR производства Atmel. Хотя большинство микроконтроллеров AVR программируется через “последовательный” ISP интерфейс, но бывают случаи в необходимости и в “параллельном”, это может быть и отсутствие поддержки ISR, к примеру ATtiny28, или для установки некоторых конфигурационных бит, недоступных ISP, или иногда просто по случаю или принудительно на некоторых контроллерах запрограммируют вывод Reset как вход/выход общего назначения, тогда такой контроллер можно перепрограммировать только с помощью “параллельного” программатора, или придется хороший чип просто выкинуть. Хотя такой программатор позволяет запрограммировать микросхему гораздо быстрее чем “последовательный”, но для домашних и малых партиях программирования это большой роли не играет.
Из поиска нужного программатора большую часть пришлось просто отсеять из-за своей дороговизны, и как следствие неоправданности изготовления, чаще это бывает универсальные программаторы стоящие не одну сотню долларов. Но поиски самого простого увенчались успехом на сайте японской фирмы ELM [1], единственный недостаток этого программатора, так это интерфейс программы, который ведется с командной строки, как в старых программах ДОС-версий. К тому же этот программатор позволяет программировать 8-ми выводные контроллеры в последовательном режиме при высоком напряжении High-Voltage Serial Programming Mode.
Несущественно измененная схема от оригинала представлена на рис.1 , но прежде чем приступать к изготовлению проверьте свой LPT порт, выход в “единичном” состоянии на выводе порта должен быть не менее 3,5 вольта, если на Вашем компьютере оказался уровень ниже то придется поставить преобразователь уровня ТТЛ-КМОП, к примеру 74HCT541, там где в схеме указана его установка. Если в Вашем компьютере уровни в норме то схему можно делать без него как показано на схеме.
К разъему X1 подключается внешний источник постоянного тока 15-18В, 150мА. Для питания самогО программатора и для питания программируемой микросхемы используются два напряжения +12В и +5В собранные на интегральных маломощных стабилизаторах напряжения DA1 и DA2. В оригинале схемы их нет, там программатор питается с компьютера напряжением +5В, а +12В преобразуется импульсным преобразователем NJM2352D, что будет намного дороже, да к тому же схема получается сложнее. HL2 индицирует поступающее напряжение.
С компьютера сигналы программирования поступают на разъем X2 подключенный к LPT (принтерному) порту. Программа управляет программированной микросхемой через два ключа собранных на VT1-VT4 для подачи напряжения и регистром DD1 для записи и чтения на шине данных, остальные сигналы управления поступают на микросхему прямо с LPT порта. Ключ на VT3,4 подает +5В Vcc на вывод питания программируемой микросхемы, а ключ на VT1,2 +12В на вывод RESET, HL1 при этом показывает, что происходит программирование. DD1 это 8-ми битный последовательно-параллельный регистр, который может получать данные в последовательной форме и выводить в параллельной, так и наоборот, вводить в параллельной, а выводить в последовательной. С помощью его формируется байтная пересылка при параллельной шине данных программируемой микросхемы и последовательная передача или прием байта с LPT порта компьютера.
К разъему X3 подключаются переходники для программирования конкретных контроллеров. Схемы переходников показаны на рис.2 а-е .
Переходник соответствует количеству выводов контроллера в DIP корпусе. В таблице указаны контроллеры и соответствующие им схемы переходников [2]. Подключение контроллеров в других корпусах можно посмотреть в описании этих микросхем.
20pin (1200) Рис.2а | 20pin (26) Рис.2б | 28pin Рис.2в | 40pin (8515) Рис.2г | 40pin (8535) Рис.2д | 8pin Рис.2е | 64pin | 100pin |
---|---|---|---|---|---|---|---|
90S1200 90S2313 tiny2313 | tiny26 | 90S2333 90S4433 mega8 mega48 mega88 mega168 tiny28 | 0S4414 90S8515 mega161 mega8515 mega162 | 90S4434 90S8535 mega8535 mega163 mega323 mega16 mega32 | 90S2323 90S2343 tiny10 tiny11 tiny12 tiny13 tiny15 tiny22 tiny25 tiny45 tiny85 | mega603 mega103 mega64 mega128 mega165 mega325 mega645 mega169 mega329 mega649 | mega3250 mega6450 mega3290 mega6490 |
Список поддерживаемых микросхем для данной версии программы в ДОС версии:
AT90S 1200,2313,2323,2333,2343,4414,4433,4434,8515,8535
ATtiny 10,11,12,15,22,26,28
ATmega 8,16,32,48,88,161,162,163,168,169,323,8515,8535
Список поддерживаемых микросхем для данной версии программы в WIN32 версии:
AT90S 1200,2313,2323,2333,2343,4414,4433,4434,8515,8535
ATtiny 10,11,12,13,15,22,24,25,26,28,44,45,84,85,2313
ATmega 8,16,32,48,64,88,103,128,161,162,163,165,168,169,323,325/329,406,603,640,645/649,1280,1281,2560,2561,3250/3290, 6450/6490,8515,8535
90PWM 2,3.
Программатор автоматически определяет подключенный тип контроллера по идентификатору в ячейках самом контроллере.
Настройку программатора нужно начать с правильности монтажа и проверки возможных деталей. Далее подключаем программатор к LPT порту компьютера, который работает в ДОС сессии или загружен с дискеты в чистом ДОС. После этого подать питание на программатор и запустить программу AVRXCHK.COM. Это тестовая программа для проверки работоспособности программатора, с ее помощью можно манипулировать каждым выводом программатора в отдельности, как по выходу, так и по входу. Первоначально проверяются все выходные сигналы. Клавишами на клавиатуре компьютера стрелками вправо и влево перемещаемся по выводам разъема, при этом мигающий курсор устанавливается под соответствующим номером вывода. Клавишей “пробел” можно переключать уровень на выводе, “L”-низкий уровень “0”, “H”-высокий уровень “1”. Только на выводе 1 при включении “H” должно быть 12В, а на выводе 20 – 5В. Таким образом проверяем все выводы на разъеме, если есть какие нибудь “нечистые” выводы, т.е. не чисто “0” или “1” то надо проверить почему, также при замыкании возможны включения двух и более выводов одновременно, этого не должно быть. Если все выхода работают чисто и хорошо можно приступить к проверке входов, для этого все выводы желательно поставить в “L”, а вывод 20 в “H”, он будет использоваться для подачи высокого уровня “1” на входах выводы 12-19 через резисторы на схеме. Теперь можно нажать ВВОД (Enter) и перейдем на тестирование входов. Для этого надо взять любой проводник и укрепить на выводе 10 (GND) разъема X3 и поочередно замыкать на выводы 3, 12-19, при этом на индикации соответствующих выводах должно переключаться с “H” на “L”. Если переключения происходят четко на этом проверка заканчивается. Но иногда могут быть переключения при тесте входа не совсем четкие, особенно если программатор включен через длинный кабель (при включении программатора непосредственно к LPT выходу такое вероятнее не будет наблюдаться), тогда конденсаторы 470пФ — 1нФ между 11 (BUSY) и GND, а также 10 (ASC) и GND разъема X2 могут устранить эту проблему. Настройка программатора на этом заканчивается.
Сейчас можно приступать к программированию микросхем, но при программировании есть одно замечание – никогда не вставляйте микросхему в разъем для программирования если ни разу не запускали программу для программирования, а если это невозможно, то выключите питание на программаторе. Это связано с тем что на LPT выходе могут быть любые уровни не соответствующие программированию, и на микросхему может быть подано питание не только +5В но и +12В. После запуска программы будет выведено сообщение когда можно вставлять микросхему, чаще удобнее сделать по-другому, когда микросхема уже вставлена в разъем, а подавать питание при предупреждении об установке микросхемы. Но если хоть раз было обращение к микросхеме а нужно дальше с ней работать тогда ее вынимать и отключать питание не надо, т.к. программа устанавливает уровни LPT порта в безопасное состояние.
Для программирования в ДОС, Windows 95,98,Me используется программа AVRXP.COM для ДОС, хотя можно использовать и WIN32 версию AVRPP.EXE, это более новая программа и совместима с ДОС. У них есть только разница в командной строке, в AVRXP.COM для разделения используется прямой слеш “/”, как в ДОСе, а в AVRPP.EXE знак минус “-“, как в Windows. В остальном ключи одинаковые. Для использования Windows NT,2k,XP используется только программа AVRPP.EXE, но к ней нужен еще драйвер GIVEIO.SYS для того чтобы программа могла работать непосредственно с LPT портом. Этот драйвер нужно скопировать в папку WINDOWS/SYSTEM32/, затем для регистрации драйвера запустить AVRPP –r, к тому же Вы в системе должны быть как “администратор”. Для работы в Windows 95,98,Me желательно войти в “сеанс MS-DOS” (Пуск->Программы), а для работы в NT,2k,XP в “командная строка” (Пуск->Все программы->Стандартные). Но кто не работал с командной строки это немного трудно, возможен и другой вариант: в Total (Windows) Commander найти нужный файл, поставить на него курсор и, удерживая клавишу Shift нажать Enter, при этом программа запустится в окне и это окно после выполнения не закроется. В окне будут выведены все ключи с которыми работает программа. Для установки этих ключей нужно в Total Commander при выделенной программе удерживая клавишу Ctrl нажать Enter, при этом в нижней командной строке Total Commander появиться имя файла, к нему надо дописать ключи и запустить с удерживанием клавиши Shift.
Для записи во flash память контроллера надо ввести имя программы программатора и имя HEX-файла, обязательно с расширением. Пример: avrxp(avrpp) мойфайл.hex мойфайл.epp, для верификации, т.е. проверки записанного нужно ввести ключ /v, пример: avrxp /v мойфайл.hex мойфайл.epp, или avrpp -v мойфайл.hex мойфайл.epp. Для записи конфигурационных бит и калибровочных байт есть небольшая разница, у AVRXP.COM нужно вводить в шестнадцатеричном виде а в AVRPP.EXE в бинарном, пример: avrxp /fl12 или avrpp –fl10010 (00010010). Для чтения flash и записи в HEX-файл avrxp /rp > мойфайл.hex, тоже для чтения EEPROM: avrxp /re > мойфайл.eep. /e- стирание микросхемы /c- копирование калибровочных байт /l — блокировочные биты /r
— чтение flash|EEPROM|fuse(конфигурационных бит) /f
Это основные ключи для работы с программами. Выбор типа контроллера производится программно, и если что-то не совпадает то об этом выводится сообщение, к примеру, если попытаться в 8-ми Кбайтную flash записать более, программа выдаст предупреждение не производя никаких действий.
В заключении можно добавить что ELM свободно распространяет не только свои программы, но и их исходники, для использования в любых, даже коммерческих целях не претендуя на авторство. Эти документы можно взять с сайта ELM[1].
Источник
Параллельный программатор для 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 производится с помощью дополнительного переходника — модуля расширения.
Схема платы коммутации, чертежи печатных плат, а также особенности наладки и работы с программатором рассмотрены в подробном описании.
Источник