Site Loader

Программатор AVR

Размер основной платы 76×76мм, а платы коммутации 95×80мм. Они изготовлены из одностороннего фольгированного стеклотекстолита и оптимизированы для метода «утюжной» технологии. Все резисторы и неполярные конденсаторы в SMD корпусах, микросхемы – в DIP. В качестве DD3 можно использовать как устаревший AT90S2313, так и новый ATtiny2313. Причем первый даже более предпочтителен по причинам, которые будут рассмотрены ниже. В качестве DD2 очевидно можно использовать не только ATmega8535, но и AT90S8535, правда такой вариант не тестировался.

Программатор выполнен в корпусе, спаяном из фольгированного гетинакса. Плата коммутации является верхней крышкой, в ней сделаны по месту не показанные на чертеже отверстия для SB1 и HL1-HL3. Разъем СШ-7 для внутрисхемного программирования размещается на боковой стенке. Кабель связи с компьютером может иметь длину 1…1,5м. Питание осуществляется от любого сетевого адаптера с напряжением 9…15в и током до 100ма.

После сборки следует внимательно проверить правильность монтажа, отсутствие короткозамкнутых дорожек и непропаяных соединений. После этого нужно проверить наличие напряжения питания 5в на выходе DA1. Если все в порядке, можно приступать к «оживлению» устройства. Это достаточно серьезная процедура и спешить тут не следует.

Контроллер DD3 перед установкой в схему необходимо запрограммировать. Его прошивка разработана на основе Appnote AVR910: In-System Programming [5]. Первая версия этого документа датирована 1997 г. Первоначально использовался контроллер типа AT90S1200, в дальнейшем, не без активного участием радиолюбителей программа была адаптирована для AT90S2313, а ее возможности расширены [6]. В предлагаемом устройстве для записи в контроллер DD3 следует использовать доработанный автором файл прошивки isp_2313.hex из архива isp.zip.. В этом же архиве находится исходный текст этого файла isp_2313.asm и дистрибутивы печатных плат в формате Sprint-Layout 4.0.

Получается, что для того, чтобы сделать этот программатор, необходим другой программатор. Но он нужен только один раз и для этой цели можно воспользоваться упоминавшимся ранее PonyProg или обратиться за помощью к друзьям. Как уже говорилось, с одинаковым успехом можно использовать как AT90S2313, так и ATtiny 2313. Прошивка будет работать с любым из них. Однако, если на Fuse биты первого можно не обращать внимания, используя их значения по умолчанию, то для ATtiny2313 Fuse биты следует установить следующим образом: SPMEN=1, DWEN=1, EESAVE=1, SPIEN=0, WDTON=1, BODLEVEL2…0=111, RSTDISBL=1, CKDIV8=1, CKOUT=1, SUT1…0=11, CKSEL3…0=1101 (0 — запрограммирован, 1 — нет). К сожалению, фирма Atmel не предусмотрела возможность включать состояние этих бит в файл прошивки, а их неправильная установка может привести к полной неработоспособности устройства. Поэтому, в случае возникновения сомнений, следует руководствоваться фирменной документацией на контроллер ATtiny2313, а тем, у кого нет опыта в работе с программаторами предпочтительно поискать старый AT90S2313.

Установка Fuse бит ATmega8535 по умолчанию также не подходит, и, если есть возможность, их желательно предварительно запрограммировать следующим образом: S8515C=1, WDTON=1, SPIEN=0, CKOPT=0, EESAVE=1, BOOTSZ1…0=00, BOOTRST=1, BODLEVEL=1, BODEN=1, SUT1…0=11, CKSEL3…0=1111. Запрограммировать их можно будет и непосредственно в описываемом программаторе, но лучше использовать контроллер с предварительно установленными Fuse битами. Дело в том, что по умолчанию в качестве тактового установлен внутренний RC генератор на 1 мгц. Соответственно на выводе XTAL2 никакого сигнала не будет, значит и на DD3 тактовая частота подаваться не будет. А это приведет к полной неработоспособности устройства.

Выходов из этой ситуации может быть несколько. Первый, как уже указывалось, использовать контроллер с предварительно запрограммированными Fuse битами. Если это невозможно, придется запаять временную перемычку между выводом XTAL1(13) DD2 и XTAL2(4) DD3. Теперь кварц окажется подключенным и к DD3. Все будет работать, но… только до того момента, пока Fuse биты не переконфигурируют тактовый генератор DD2 на работу с кварцем. После этого временную перемычку нужно удалить, разумеется предварительно отключив питание. Если при установке бит была допущена ошибка, повторно этот способ может и не сработать. Но не стоит отчаиваться. В качестве крайней меры можно порекомендовать временно разорвать соединение между выводами XTAL2(12) DD2 и XTAL1(5) DD3 и подключить к DD3 второй кварц и 2 конденсатора аналогично ZQ1 и C1, C2. Или подать на вывод XTAL1 DD3 сигнал от внешнего источника необходимой частоты и амплитуды.

Теперь наступило время подключить программатор к COM порту и подать на него питание при НАЖАТОЙ кнопке SB1. Ни один из светодиодов не должен светиться. После этого нужно запустить AVR Studio. Желательно использовать версию не ниже 4.09. Все дальнейшие пояснения будут относиться к версии 4.12. После запуска в меню Tools надо выбрать AVR Prog.

Если все сделано правильно, через несколько секунд на экране появится окно, показанное ниже на рисунке слева. Нажатие на кнопку «Advanced» (в правом нижнем углу) приведет к переходу на следующее окно. Если Fuse биты были заранее запрограммированы, то выглядеть оно будет так, как показано на рисунке справа.

AVR USB программатор USBasp — chipenable.ru

В интернете много схем USB программаторов для микроконтроллеров AVR. Все их можно разделить на три группы: программаторы на основе микроконтроллеров AVR, в которых USB интерфейс реализован программно, программаторы на основе микроконтроллеров AVR с аппаратной поддержкой USB, и программаторы на основе микросхем FT232, которые работают в режиме BitBang.

Один из наиболее простых для повторения AVR USB программаторов – это USBasp. Он собран на микроконтроллере Atmega8 (или Atmega48), требует минимум внешних компонентов, имеет несколько готовых вариантов разводки печатной платы и оболочек для программирования, а также может работать под Linux и MacOS.

Правда есть одно НО! Для оживления этого программатора в микроконтроллер нужно записать прошивку, а значит, у вас уже должен быть какой-то работающий AVR программатор или хотя бы возможность его где-то взять.

Схема программатора USBasp представлена на рисунке ниже. Я взял за основу схему с сайта автора http://www.fischl.de/usbasp и немного изменил ee. Были добавлены диоды VD1 — VD3, чтобы уменьшить напряжение питания и согласовать логические уровни микроконтроллера и USB порта без стабилитронов. Были выкинуты цепи подключенные к UART`у, так как они не использовались, и добавлен джампер JP1.

Схема USBASP


Расскажу о назначении светодиодов и джамперов. 


— HL1 сигнализирует о том, что идет процесс программирования. Он зажигается на время записи прошивки.

— HL2 показывает, что программатор находится в рабочем состоянии. Он зажигается при подаче питания.

— JP1 закорачивает цепочку из диодов, что позволяет изменять напряжение на разъеме программирования с 3 на 5 В. Однако без стабилитронов это прокатит не со всеми компьютерами. Многие компы не опознают USBASP, если у него 5-и вольтовые логические уровни.

— JP2 изменяет частоту SCK сигнала. При разомкнутом джампере частота SCK будет 375 кГц, при замкнутом — 8 кГц. Это требуется для программирования микроконтроллеров с низкой тактовой частотой (меньше 1.5 МГц).

— JP3 подключает вывод RESET к разъему программирования. Это нужно для того, чтобы запрограммировать сам микроконтроллер программатора.

— JP4 подключает к разъему программирования +5В от USB порта. Эта функция может понадобиться, чтобы запитать программируемую плату от программатора.

Для сборки программатора USBASP понадобятся следующие компоненты:

Список деталей для USBASP


Изготовление платы методом ЛУТа не представляет особых сложностей — плата односторонняя, дорожки широкие. При печати не надо зеркалить рисунок платы. 

Печатная плата


После сборки платы ее нужно тщательно проверить на предмет замыканий. Особенно по цепям питания. Если все в порядке, то можно записать в микроконтроллер прошивку. Ее можно в конце статьи. На сегодняшний день это самая последняя версия, но на всякий случай загляните на сайт автора. 


Запрограммировать микроконтроллер можно прямо в составе платы. Для этого нужно замкнуть джампер JP3 и JP4, подключить USBasp к компьютеру для подачи питания и подключить программатор к разъему BH-10. Остальные действия зависят от того, какой программатор вы используете.

После того как микроконтроллер запрограммирован, нужно настроить Fuse биты, чтобы он тактировался от внешнего кварцевого резонатора. Значения Fuse битов такие:

atmega8 HFUSE=0xc9 LFUSE=0xef
atmega88 HFUSE=0xdd LFUSE=0xff

Я прошивал USBASP родным атмеловским программатором. У меня в Atmel Studio окно с Fuse битами выглядело так. 

Печатная плата


Если прошивать USBasp программатором на FT232, то в SinaProg изображение Fuse битов будет таким. 

Печатная плата

Разницы никакой, так что не задавайте вопросы какие Fuse биты установить.

Для работы с программатором под Windows требуется установить драйвера. Их можно скачать с сайта автора. Для операционных систем Linux и MacOS X USBasp`у драйвера не требуется.

Подключаем собранный и запрограммированный USBasp к компьютеру. Операционная система оповестит нас о нахождении нового оборудовании и предложит установить драйвера.

Печатная плата
Выбираем опцию —  установить из указанного местаПечатная плата
Указываем папку в которой лежат драйвера для программатора.установка драйверов для USBasp
Система немного потупит, а затем начнется процесс установки.установка драйверов USBasp
Если все прошло удачно, мастер оборудования завершит работу. установка драйверов для USBasp
А Windows оповестит нас об установке нового оборудованияустановка драйверов для USBasp
Теперь программатором можно пользоваться.

Описанная процедура может немного отличаться в зависимости от версии операционной системы, но суть одна — подсунуть драйвера из папки.

Для работы с USBasp`ом есть несколько программ — avrdude, eXtremeBurner, Khazama и.. какие то еще.

На мой взгляд наиболее удобная в использование программа для USBaspa — это Khazama. Она имеет простой и интуитивно понятный оконный интерфейс. Процесс программирования микроконтроллера выполняется в три шага.

 

Khazama AVR Programmer
Программирование EEPROM (память предварительно должна быть стерта) выполняется аналогичным образом.Khazama AVR Programmer
В меню Command  > Program Options можно задать настройки программы. В частности, набор операций, которые будут выполняться при нажатии на кнопку Auto Program. По умолчанию там задано стирание чипа и запись во флэш память. Можно также выбрать запись в EEPROM и верификацию (проверку данных после записи).

С помощью Khazama также можно  устанавливать FUSE биты


окно установки FUSE и LOCK битов
Все операции можно выполнять как с помощью меню, так и с помощью меню бара. Также есть удобная опция AutoProgram. окно установки FUSE и LOCK битов
1 — загрузить в буфер прошивку для Flash памяти
2 —  загрузить в буфер прошивку для EPROM памяти
3 — записать прошивку во Flash память
4 — записать прошивку в EPROM память
5 — прочитать Flash память
6 — прочитать EPROM память
7 — стереть кристал
8 — установка FUSE и LOCK биты
9 — установить Khazama поверх всех окон

 

Схема и печатная плата USBasp в формате Eagle
Win драйвер и прошивка USBasp
KhazamaAVRProgrammer

Программатор USBASP — Инструменты — AVR project.ru

  Решил заменить свою рабочую лошадку STK200+PonyProg, на нечто более современное, легко собираемое и обязательно поддерживающее подключение по USB. Выбор пал на хорошо зарекомендовавший себя программатор USBASP, мозгом которого служит микроконтроллер Atmega8 (так же есть варианты прошивки под atmega88 и atmega48) . Минимальная обвязка микроконтроллера позволяет собрать достаточно миниатюрный программатор, который всегда можно взять с собой, как флэшку. Еще одним плюсом программатора является то, что благодаря большой популярности он приобрел поддержку во многих средствах разработки, в том числе и в Bascom-AVR начиная с версии 1.11.9.6. И поэтому консольность программы, с которой он работал первоначально, перестала быть отпугивающим моментом для начинающих.
 

  Схема программатора USBASP под микроконтроллер Atmega8 в корпусе TQFP32 приведена ниже (обратите внимание, что распиновка микроконтроллера отличается от распиновки в корпусе DIP):

  Перемычка J1 применяется, в случае если необходимо прошить микроконтроллер с тактовой частотой ниже 1,5МГц. Кстати, эту перемычку вообще можно исключить, посадив 25 ногу МК на землю. Тогда программатор будет всегда работать на пониженной частоте. Лично для себя отметил, что программирование на пониженной скорости на доли секунды дольше, и поэтому теперь перемычку не дергую а постоянно шью с ней.

  Светодиод blue показывает наличие готовности к программированию схемы, red загорается во время программирования.
Контакты для программирования выведены на разъем IDC-06, распиновка соответствует стандарту ATMEL для 6-и пинового ISP разъема:

 

  На этот разъем выведены контакты для питания программируемых устройств, здесь оно берется напрямую с USB порта компьютера, поэтому нужно быть внимательным и не допускать кз.
Этот же разъем применяется и для программирования управляющего микроконтроллера, для этого достаточно соединить выводы Reset на разъеме и на мк (см. красный пунктир на схеме). В авторской схеме это делается джампером, но я не стал загромождать плату и убрал его. Для единичной прошивки хватит и простой проволочной перемычки.
Плата получилась двухсторонняя, размерами 45х18 мм.
 


  Разъем для программирования и перемычка для снижения скорости работы программатора вынесены на торец устройства, это учень удобно


Прошивка управляющего микроконтроллера
 

Прошивать, как я писал выше, можно с разъема программирования, соединив выводы Reset микроконтроллера (29 нога) и разъема. Прошивка существует для моделей Atmega48, Atmega8 и Atmega88. Желательно использовать один из двух последних камней, так как поддержка версии под Atmega48 прекращена и последняя версия прошивки датируется 2009 годом. А версии под 8-й и 88-й камни постоянно обновляются, и автор вроде как планирует добавить в функционал внутрисхемный отладчик. Прошивку под свой тип контроллера можно скачать ниже:

Для работы устройства необходимо настроить фьюзы на внешний кварц 12МГц. В PonyProg настройка фьюзов будет выглядеть следующим образом:

  

После прошивки должен загореться светодиод подключенный к 23 ноге микроконтроллера. В случае если программа в память микроконтроллера зашита, а фьюзы не выставлены светодиод также загориться, поэтому 
незабываем
 прошивать фуз-биты.

Установка драйвера

Установка велась на машину с системой Windows 7 и никаких проблем не возникло.
При первом подключении к компьютеру выйдет сообщение об обнаружении нового устройства, с предложением установки драйвера. Выбираем установку из указанного места:
 

  Выбираем папку где лежат дрова и жмем Далее


  Мигом появится окно с предупреждением о том, что устанавливаемый драйвер не имеет цифровой подписи у мелкомягких:


  Забиваем на предупреждение и продолжаем установку, после небольшой паузы появится окно, сообщающее об успешном окончании операции установки драйвера


 

  Все, теперь программатор готов к работе. Осталось выбрать программу, посредством которой будем работать с программатором.

USBASP и Bascom

  Как писал ранее, полную поддержку USBASP в Bascom-AVR сделали начиная с версии 1.11.9.6. Попалась тут мне страничка, иллюстрирующая, как можно подружить USBASP с более ранней версией компилятора, но тогда придется ставить avrdude.

  Настройка программатора для совместной работы с Bascom-AVR происходит в пункте меню Options-Programmer, в списке программаторов выбираем USBASP


Строка конфигурации Clock Frequency служит для выбора частоты работы программатора. Помнишь про джампер который необходимо замыкать когда нужно прошить микроконтроллер с частотой тактирования меньше 1,5 МГц? Так вот, в новой версии прошивки программатора реализавана возможность программно изменять частоту работы, эту фишку и использует Bascom. Можно выбрать частоту работы в диапазоне от 500Гц до 1,5МГц, по рекомендациям частота должна быть вчетверо меньше частоты работы прошиваемого микроконтроллера. Например, если требуется прошить контроллер с тактовой частотой 1МГц, нужно ставить частоту работы не более 250кГц или, для надежной работы, еще меньше. Я оставил в этом пункте автоопределение частоты.

Khazama AVR Programmer

Еще одна небольшая программа для работы с программатором USBASP. Мне она понравилась минимальным интерфейсом и кнопочками, срисованными с PonyProg =)
 

  Она работает со всеми ходовыми микроконтроллерами AVR, позволяет прошивать flash и eeprom, смотреть содержимое памяти, стирать чип, а также менять конфигурацию фьюз-битов. В общем, вполне стандартный набор.
Настройка фьюзов осуществляется выбором источника тактирования из выпадающего списка, таким образом, вероятность залочить кристалл по ошибке резко снижается. Фьюзы можно менять и расстановкой галок в нижнем поле, при этом нельзя расставить галки на несуществующую конфигурацию, и это тоже большой плюс в плане безопасности.


 Запись фьюзов в память мк, как можно догадаться, осуществляется при нажатии кнопки Write All.
Кнопка Save сохраняет текущую конфигурацию, а Load возвращает сохраненную.

 Эта фича помогает в случаях когда нужно прошить большое количество микроконтроллеров, не нужно будет каждый раз вручную выставлять галки при каждой прошивке МК.
 Кнопка Default предназначена для записи стандартной конфигурации фьюзов, такой, с какой микроконтроллеры идут с завода (обычно это 1МГц от внутреннего RC).
 !!!! Важно !!!! Как выяснилось, если использовать эту функцию биты Lock Bits необходимо выставлять вручную.

 

 В общем, за все время пользования этим программатором, он показал себя с наилучшей стороны в плане стабильности и скорости работы. Он без проблем заработал как на древнем стационарном пк так и на новом ноутбуке.

  Ниже можно скачать архив с прошивками и печатной платой, а так же программу Khazama:

 Раз народ активно интересуется данным программатором и спрашивает меня о возможности изготовления, решил изготовить печатные платы на производстве и сделать инструмент, которым приятно пользоваться. Пока в наличии имеются готовые печатные платы для этого программатора или можете приобрести уже готовый к работе программатор. 
Предложение ограничено, спешите 😉
 Все программаторы успешно обрели своих владельцев, а тем временем обдумываю о необходимость заново сделать заказ на производство печатных плат. Надо ли?

UPD 26.01.13

Если появятся желающие приобрести программатор USBASP на заводской плате, записывайтесь в очередь;) и делайте предзаказ! Условия на форуме http://avrproject.ru/forum/11-69-1#1307


 

UPD 5.03.13

Программатор снова стал доступен для покупки! Условия и цена приобретения выложены здесь http://avrproject.ru/index/usbasp/0-41 

Простые устройства — Простой программатор для программирования микроконтроллеров AVR через COM порт

ПрограмматорНа сегодня существует множество программаторов AVR микроконтроллеров подобного типа, но что мне не нравится, слишком много «рассыпухи» (дискретных элементов ), в то время, когда существуют специализированные микросхемы у которых всё уже есть внутри.

Выбор мой пал на микросхему GD75232, часть элементов которой, при соответствующем включении я задействовал для данного программатора.Обязательно 10-я и 11 ножки микросхемы должны соединяться с землёй.(общим проводом)

{ads1}

Микросхема gd75232Эта микросхема стоит на материнских платах, её роль — как раз согласование сигналов внешних устройств с COM портом. На иллюстрации из даташита видно, какие элементы как подсоединены, (не стану расписывать, что как и зачем, об этом можно прочитать в описании микросхемы). Я её специально не покупал, а снял с «убитой» материнки.

Печатную плату не привожу, так как отрезал ножницами по металлу кусок платы вместе с микросхемой, в итоге размеры платы получились 20х30 мм, проводники припаял к 3-м разъёмам

1- питание +5в

2- разъём com порта

3- разъём ISP для программирования

Использовать программатор можно с известной программой Pony Prog, в установках выбрать интерфейс (Serial, COM1) для COM-порта и любой из 3-х видов интерфейсов , которые там перечисляются, без разницы, работает со всеми (JDM API, SI Prog I/0, Si Prog API), картинки это поясняют. Остальные установки в настройке порта остаются в программе по умолчанию.

Настройки PonyProgНастройки PonyProgНастройки PonyProgПрограмматор на столько прост, что не содержит ни резисторов ни конденсаторов, только одна единственная микросхема. Цепляете питание +5в, подключаете к панельке, в которую вставлен микроконтроллер AVR, приготовленный для программирования и программируете, как обычно в ISP режиме.

{ads1}

Схема проверена и испытана.

Буфферизация

Простые программаторы эффективны пока речь идёт о программировании микроконтроллеров либо в DIP корпусе (удобно, когда можно микросхему вынуть из панельки на рабочей плате и воткнуть в панельку на программаторе, а потом, запрограммировав, поставить на место), либо когда на рабочей плате выводы микроконтроллеров не сильно нагружены внешними элементами схемы.

Есть отработанные хорошие схемы простых программаторов с буфферизированными шинами типа STK200 / 300, собраные на микросхемах серии 244, 245, но они предназначены для подключения к LPT порту, который в последнее время уже редкость на современных материнских платах. Теперь чаще встречаются лишь USB и COM порты, а программаторы USB более сложны для начинающих радиолюбителей в повторении.

У большинства известных простых программаторов, работающих с COM портом, имеется общий недостаток: не у всех достаточная нагрузочная способность.

В последнее время всё чаще применяются SMD компоненты, и микроконтроллеры применяют уже в корпусах типа SOIC и впаивает непосредственно в плату, без панелек. В этом случае для повторного перепрограммирования надо уже либо программировать его прямо на плате, либо выпаивать чип, а в некоторых случаях приходится предварительно отключать нагрузку на его выводах в схеме, если получается, что внешние элементы «сажают» импульсы программатора, если только его шины не были буфферизированы (умощнены по току для работы с повышенной нагрузкой).

Из личного опыта скажу, что этими недостатками страдают многие широко известные простые программаторы, например на 5-ти резисторах, или известная схема на транзисторе, резисторах и стабилитронах: при повышенной нагрузке на шинах программатора начинаются проблемы. Для того, чтобы не делать новый программатор, есть простой путь улучшить нагрузочные характеристики программатора — это буфферизировать уже имеющиеся шины для сигналов, всего лишь добавив ещё одну микросхему.

В данном случае я взял, что у меня было под руками — микросхему 561ПУ4 (или можно её западный аналог CD4050). В составе этой микросхемы содержится шесть буфферных неинвертирующих элемента, которые повторяют входной сигнал на выходе, не внося в него изменений. Каждый такой элемент обладает определённой нагрузочной способностью, из иллюстрации, взятой в даташите, видно структуру тех дискретных элементов, содержащихся внутри буффера.

Подсоединив к нашему программатору такое дополнение между выводами программатора и разъёмом для программирования, мы получим устройство с повышенной нагрузочной способностью. У нас три сигнала с СОМ порта работают на приём, и один сигнал (MISO) работает на передачу. Припаяв к уже имеющейся схеме посредством коротких проводков ещё одну микросхему буффера, я протестировал работу новой схемы и, сравнив с тем, что было прежде, убедился, что эффект есть. На тех платах, где я прежде сталкивался с подобной проблемой при программировании, мне приходилось отсоединять нагрузку на время программирования, а теперь с новой схемой этого делать уже не потребовалось.

Программатор с буфферизацией

Рекомендую всем обладателям простых программаторов доработать имеющуюся у вас схему таким же образом, если при программировании вы сталкивались с подобными проблемами, добавив микросхему буффера ,не обязательно эту, можно использовать и другие подобные по функциональным свойствам микросхемы типа 74HC125, 74HC126 на базе этих микросхем,можно переводить выходы программатора вообще в высокоимпедансное состояние,что позволит не отключать разъём ICSP от платы ,особенно это удобно при работе с макетной платой, вариаций применения моего программатора в качестве базового модуля очень много,это и программирование микросхем типа 24Схх 93Схх а так же для программирования PIC контроллеров, но эту тему я возможно разовью чуть позже в данной статье.

Z — состояние шин на выходе

Лучшее- враг хорошему (с).

Всё вроде работает,но стоит добавить в схему ,что либо ещё,как она из маленькой превращается в «монстра», а что делать? Иногда в процессе отладки приходится идти на это ради комфорта в работе , ведь порой по нескольку десятков раз надо втыкать разъём ICSP повторно перепрограммируя микроконтроллер, так это занятие надоедает порой, а если оставить программатор постоянно подключенным,к схеме ,то схема программатора будет влиять на работу устройства , но есть решение о котором я упоминал выше, это перевести состояние шин в высокоимпедансное — Z состояние , тогда схема программатора может быть подключена сколь угодно долго и не будет теперь шунтировать шины микроконтроллера ,ради такого случая нашёл эту микросхему и использовал её в качестве буффера .Осуществлять эту процедуру мы будем посредством кнопки S1 которая при замыкании будет переводить выходы программатора в рабочий режим, программирования подсоединяя его сигналы к схеме. На момент программирования, надо кнопку удерживать в нажатом состоянии,а после того, как процедура программирования пройдёт успешно ,отпустить.При разомкнутом состоянии кнопки выходы программатора переводятся в состояние Z

Из даташита 74HC125 ,по схеме и таблице истинности видно ,что если подать на выводы А «единицу» схема переводит выходы в высокоимпедансное состояние ( фактически вообще отключается от нагрузки) и вдобавок у этой микросхемы ещё большая нагрузочная способность ,чем у микросхемы,которую я выбрал в качестве буффера в предыдущей схеме..

в общем на ваш суд выкладываю очередную схему,и сопровождающие картинки к ней.

Владимир Науменко

г. Калининград.

Скоростной AVR USB программатор на FT232RL без вспомогательного контроллера

При работе с микроконтроллерами важнейшим девайсом являетя программатор, именно он может залить в МК нашу программу. Он же часто становится камнем преткновения на пути освоения AVR.
 

Дело в том, что для работы простейшего программатора, не требующего в своем составе микроконтроллера, нужен компьютер с COM или LPT портом, причем желательно с частотой процессора не выше гигагерца-двух. Да операционную систему подревней — WinXP или Win2K. А это ныне редкость.
 

С другой стороны, для USB программаторов нужно предварительно прошить контроллер. А чем его прошить? Вот тут и возникает проблема курицы и яйца — как прошить контроллер программатора не имея программатора.
 

Не так давно появилось решение позволяющее сделать надежный и быстрый USB программатор AVR на базе тупой, непрограммируемой, логики.
 

Bitbang, что это такое и с чем его едят
Это не что иное как прямое управление выводами какого либо порта. В COM порт можно отправить байт через какой либо высокоупровневый API и он просто выйдет через линию TX потоком стандартого RS232 сигнала.
А можно достучаться напрямую до регистров отвечающих за состоянием каждого пина порта и дрыгая их как нам угодно сэмулировать через тот же COM порт не только RS232, но и SPI, I2C или Dallas 1-wire, HD44780 протокол, применив простейший тупой обвяз. Это и будет битбанг.
 

В старых программаторах вроде SiProg (PonyProg) или в схеме Громова так и было сделано с COM портом. И работало надежно и стабильно. Но, увы, СОМ порт ушел в небытье, а при попытке сделать то же самое с виртуальным COM портом на конвертере USB-RS232 ничего не получалось. Т.к. заточен он был все же на работу нормального COM порта, а для битбанга приходилось извращаться. В результате такие схемы либо не работали вовсе, либо работали ОЧЕНЬ медленно, прошивая контроллер за час-полтора, что ни в какие ворота не лезет.
 

Все изменилось с появлением микросхемы конвертера USB-UART FT232R у которой стал доступен битбанг режим не через виртуальный COM порт, а напрямую через драйвер FTDI. И вот тут наступила нирвана.
 

За битбанг там отвечает 8 выводов. Вот их раскладка.

 
В даташите ее нет, но она есть в аппликухе Application Note AN_232R-01 for the FT232R and FT245R Bit Bang Modes
 

В результате, из одной только FTDI получается первоклассный скоростной программатор, прошивающий 16кб прошивки за 10-12 секунд и это вместе с верификацией!!!
 

А из деталей надо ТОЛЬКО микросхему FT232RL, два конденсатора на 0.1uF и гнездо USB. ВСЕ! Ну и проводочки естественно.
 

Схема включения получается следующей:


Но у этого программатора есть один минус — он не отдает линию RESET по завершении программирования. Поэтому чтобы схема стартанула надо выдрать из платы разьем ISP, что очень неудобно. Я взял и добавил к этой схеме буфферную микросхему. 74HC244, ту самую которая использовалась в программаторе STK200.
 

Эта микросхема является буффером и по сигналу ОЕ переводить выходные линии в Z состояние. Подал на ОЕ высоки уровень — считай что отрезал программатор от программируемой схемы. Осталось только тумблерок RUN/PROG поставить и одним движением осуществлять запуск.
 

Но тумблер мне было ставить вломы, поэтому я решил сделать кнопочный переключатель на RS- триггере. Сам триггер собрал на двух 2И-НЕ элементах микросхемы стандартной логики 74HC00 (вроде нашей К155ЛА3 только жрет намного меньше). На это ушло два вентиля. Кнопочки перекидывают его из режима RUN в режим PROG, кондер на одной из кнопок задает начальное положение при включении.
 

Ну а из оставшихся двух вентилей я скреативил генератор прямоугольного сигнала, на случай если по ошибке залочу фузами МК на внешний тактовый сигнал. Резистор и конденсатор для генератора взял первые попавшиеся на столе. Оказался на 22pF и 10кОм. Что дало в результате частоту около 2 с копейками МГЦ. Их также завел через буффер и вывел на штырьки.
 

Развел платку:

Вытравил и спаял:


 
Управляющий софт:
Теперь о софте. Шьется все посредством программы avrdude, причем, как я понял, это не простая дудка, а немного переделанная и с дополнительной библиотечкой именно для битбанга. Потому как со старой, то что под USBASP ничего не заработало. А также немного подправленный avrdude.conf, где определен новый программатор.
 

Добавлена секция:

1
2
3
4
5
6
7
8
9
10
#FTDI_Bitbang
programmer
  id    = "ftbb";
  desc  = "FT232R Synchronous BitBang";
  type  = ft245r;
  miso  = 3;  # CTS(11 PIN FT232R) 
  sck   = 5;  # DSR(9 PIN FT232R)
  mosi  = 6;  # DCD(10 PIN FT232R)
  reset = 7;  # RI (6 PIN FT232R)
;

#FTDI_Bitbang programmer id = «ftbb»; desc = «FT232R Synchronous BitBang»; type = ft245r; miso = 3; # CTS(11 PIN FT232R) sck = 5; # DSR(9 PIN FT232R) mosi = 6; # DCD(10 PIN FT232R) reset = 7; # RI (6 PIN FT232R) ;

 

Где:

  • id — это как мы будем звать наш программатор в командной строке avrdude.
  • desc — описание что за программатор
  • type — дает понять, что мы используем либу для FT245R (впервые было сделано на этой микрухе)
  • miso, sck, mosi, reset — какой ноге какая битбанг Dn линия соответствует. См. таблицу что была выше

Работает в винде (в ХП точно, в остальных не проверял, нету у меня их), в линухе и говорят даже на маке.
 

Линухом я не пользуюсь, мак для меня бесполезен (а с шалфея еще и прет круче! =) ), поэтому показывать буду в винде:
 

Итак, первым делом дергай у меня архив с похаченной дудкой и конфигом. Также надо тебе поставить драйвера FTDI и воткнуть железку в USB, чтобы в системе появился виртуальный COM порт. Это будет означать что все встало и работает.
 

Дальше распакуй архив с avrdude где нибудь поближе, C:\FTBB\ например. Консольные утилиты, особенно забугорные, очень не любят русские названия, а также длинные имена с пробелами.
 

Теперь разберемся с дудкой. Вообще это очень могучая программа, она поддерживает по моему вообще все возможные программаторы. Но консольная, так что потребуется некоторая сноровка. Для примера накачу бутлоадер на ATmega16
 

Итак, для прошивки нам потребуется командная строка такого вида:
 
avrdude.exe -p m16 -c ftbb -P ft0 -U flash:w:m16boot.hex:a
 

  • -p тип контроллера. m16 означает что у нас мега16, остальные ключи надо смотреть в хелпе к дудке.
  • -с тип программатора. В avrdude.conf он у нас описан как ftbb вот его и указываем.
  • -P порт на котором сидит программатор. В данном случае в комп воткнута только одна микросхема FT232RL так что ft0 если воткнуто несколько таких конвертеров то этот параметр может быть ft1, ft2 и так далее. Как определить сразу под каким номером у нас сейчас программатор я так и не дотумкал. Впрочем не особо и пытался да и нужды такой не было — определяю перебором, не первый так второй.
  • -U говорим что что то заливаем. Формат такой memtype:r|w|v:filename[:format] вначале указвыаем куда (flash, eeprom или fuse), потом что делаем читаем, пишем, проверяем, затем путь к прошивке. Прошивка у меня валяется в том же каталоге что и avrdude.exe поэтому и путь только лишь имя файла. Если же прошивка лежит где то далеко, то полный путь можно указать в кавычках, например, так: «c:\FTBB\m16boot.hex». А последняя «а» означает, что тип файла с прошивкой определить автоматом.

 

Включаем на программаторе режим программирования. Запускаем эту бодягу и… получаем облом. А почему? А потому, что изначально мега16 настроена на частоту в 1Мгц, а мы ей битбангом пытаемся загнать данные на максимальной скорости. Для обхода этой проблемы есть ключ снижения скорости
 

avrdude.exe -p m16 -c ftbb -P ft0 -U flash:w:m16boot.hex:a -В 4800
 

Шить, конечно, будет медленно, раз так в 10 медленней. Но ведь никто не запрещает вначале переткнуть fuse биты на более скоростную частоту, а потом вернуть обратно? 😉
 
Запустив это, ты должен увидеть на экране разные прогрессбары, вроде таких:


c:\FTBB>avrdude.exe -p m16 -c ftbb -P ft0 -U flash:w:m16boot.hex:a -B 4800
avrdude.exe: BitBang OK
avrdude.exe: pin assign miso 3 sck 5 mosi 6 reset 7
avrdude.exe: drain OK

ft245r: bitclk 4800 -> ft baud 2400
avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude.exe: Device signature = 0x1e9403
avrdude.exe: NOTE: FLASH memory has been specified, an erase cycle will be perfo
rmed
To disable this feature, specify the -D option.
avrdude.exe: erasing chip
ft245r: bitclk 4800 -> ft baud 2400
avrdude.exe: reading input file «m16boot.hex»
avrdude.exe: input file m16boot.hex auto detected as Intel Hex
avrdude.exe: writing flash (16310 bytes):

Writing | ################################################## | 100% 115.44s

avrdude.exe: 16310 bytes of flash written
avrdude.exe: verifying flash memory against m16boot.hex:
avrdude.exe: load data flash data from input file m16boot.hex:
avrdude.exe: input file m16boot.hex auto detected as Intel Hex
avrdude.exe: input file m16boot.hex contains 16310 bytes
avrdude.exe: reading on-chip flash data:

Reading | ################################################## | 100% 109.06s

avrdude.exe: verifying …
avrdude.exe: 16310 bytes of flash verified
avrdude.exe: safemode: Fuses OK
avrdude.exe done. Thank you.

О fuse битах
Я их шью вот такой строкой (Warning!!! Справедливо ТОЛЬКО ДЛЯ ATmega16, для других AVR значение FUSE байтов другие — надо уточнять по даташиту иначе можно заблокировать кристалл!!!):
 

avrdude.exe -p m16 -c ftbb -P ft0 -B 4800 -U hfuse:w:154:m -U lfuse:w:228:m -U lock:w:63:m
 

Тут старший, младший и биты защиты задаются просто числом. Если перевести его в двоичное, то получим конкретные биты. Не очень удобный способ, зато ошибиться с нотацией сложней. Скорость сразу же делаю маленькой, т.к. они все равно прошиваются мгновенно на любой скорости.
 

А вообще, чтобы не заморачиваться со всемии этими строками и ключами создал себе командный файл burnboot.cmd в который вписал две строчки:
 

avrdude.exe -p m16 -c ftbb -P ft0 -B 4800 -U hfuse:w:154:m -U lfuse:w:228:m -U lock:w:63:m
avrdude.exe -p m16 -c ftbb -P ft0 -U flash:w:m16boot.hex:a

 

И теперь шью в один тычок. Вначале накатываются фузы, чтобы скорость тактовую поднять и шить на предельной скорости, потом вкатываю прошивку.
 

Также есть GUI оболочка на avrdude, правда у ней fuse биты тоже выставляются числом. Но зато можно пути выбирать через стандартные диалоги. Также, надеюсь YOURDEVICE допилит свою оболочку под USBASP до работы с этим программатором. Процесс уже пошел, но пока там сыровато и многие моменты не пашут.
 

Как юзать
1. Воткнуть ISP кабель в прошиваемую плату.
2. Нажать кнопку PROG — должна загореться зеленая лампочка. Программатор готов к работе.
3. Прошить прошивку, фузы, биты защиты.
4. Нажать кнопку RUN — программатор отпустит линию RESET и контроллер начнет выполнять программу.
 

Файлы и ссылки к статье
Модифицированный avrdude + все либы и конфиги для него. Там же GUI и мой батник
Схема программатора в формате Spring Layout
Страница автора bitbang метода для FTDI

В общем, программатор получился рулезный. Быстрый и удобный. На аппартном USB конвертере, не требует прошивки собственного контроллера как в USBASP и крайне прост, а в качестве бонуса дает еще и USB-UART интерфейс для отладки.

Остается лишь небольшая такая проблема, вытравить плату и припаять вот это:

Но я уверен, у тебя все получится, может не с первого, так с n-ного раза, но наверняка! =)

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *