Программатор USB ISP для AVR: Ещё один шаг в сторону от ардуинонизации. USBasp программатор AVR микроконтроллеров делаем сами Самодельный программатор для atmega8 с windows 7

Недавно решил сделать себе программатор STK500v2. Пользую в основном CodevisionAVR. Старый не совсем подходил, да и нужен был внутрисхемный программатор. Долгие поиски в сети и чтение форумов привели меня к “AvrUsb500 by Petka”. Программатор был собран и я получил массу положительных эмоций - эффект примерно такой, как будто пересел с советского автопрома на иномарку! Конечно AVR910 надежен как танк - программная реализация USB в нем таких глюков не имеет. Но на тот момент это все были мелочи, по сравнению с преимуществами работы прямо из CodeVision и высокой скорости. Довольно долгое время эти два программатора служили мне верой и правдой, пока с AVR910 не пришлось расстаться. Вот и решил собирать очередной программатор.

К этому времени убедился, что столь любимая нашими радиолюбителями FT232 не так безгрешна как о ней думают. Было собрано несколько разношерстных устройств на этой микросхеме, все пожелания производителя в даташите были учтены, тонна драйверов перепробована на разном железе. Скажу больше - мой промышленный Chipstar XL имеет в качестве USB конвертера тоже FT232, и хоть и не использует VCP-драйвер но глючит тоже не слабо.

Эти все “выбрыки” за пару лет эксплуатации порядком надоели, потому решил модифицировать оригинальную схему. На глаза попалась CP2102 - USB-UART преобразователь. Простая схема, хорошие отзывы о самом производителе (SiLabs) и главное - доступная цена.

Схема программатора

Обвязка CP2102 выполнена исключительно по даташиту без каких-либо своевольных “художеств”, от себя добавлен лишь второй светодиод, индицирующий наличие питания.

Программирование контроллера производится внутрисхемно. Пятачки предусмотрены на плате. Установка фузов ATMega8:

  1. Субъективно все стало работать на 20-25% быстрее.
  2. Полностью пропали глюки присущие FT232. Определяется без проблем каждый раз, даже после быстрого “перетыкивания” USB, без проблем заработала со всеми моими шнурками.
  3. Драйвера моя Windows 7 вытянула с сервера обновления и поставила сама.

В дальнейшем коснусь лишь узла CP2102, так как работа самого программатора в сети расписана подробно.

Сразу хочу оговориться - проблемой “курицы и яйца” особо не заморачивался, все цепи самопрограммирования через USB вырезаны в угоду размеру. Эта компиляция программатора рассчитана больше на людей с более-менее приличной подготовкой. Причин тому несколько - корпус CP2102 MLP28 (5×5 мм) с контактными площадками на “пузе” вместо ножек - без определенных навыков не поставить, дорожки 0.25 мм - делал обычным утюгом.

Декабрь 2015 г.

1. Преимущества предлагаемого способа

Схемы устройств на микроконтроллерах (МК) обычно отличаются сочетанием двух трудносовместимых качеств: максимальной простотой и высокой функциональностью. К тому же функциональность может в дальнейшем меняться и расширяться без внесения каких-либо изменений в схему - путём лишь замены программы (перепрошивкой). Эти особенности объясняются тем, что создатели современных МК постарались разместить на одном кристалле всё, что только может потребоваться разработчику электронного устройства - по крайней мере настолько, насколько это возможно. В результате произошло смещение акцента со схемотехнического и монтажного на программный. С использованием МК теперь меньше приходится "нагружать" схему деталями, между компонентами становится меньше соединений. Это, конечно, делает схему более привлекательной для её повторения как опытными, так и начинающими электронщиками. Но, как обычно, за всё приходится платить. Здесь тоже не обошлось без своих сложностей. Если купить новый МК, установить его в правильно собранную из исправных деталей схему и подать питание, то ничего не получится - устройство не будет работать. Микроконтроллеру нужна программа.

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

Проанализировав публикации в интернете, можно заметить, что данная проблема решается чаще всего одним из двух путей: покупкой готового программатора или изготовлением самодельного. При этом публикуемые схемы самодельных программаторов очень часто неоправданно сложны - гораздо сложнее, чем это действительно необходимо. Конечно, если предполагается каждый день прошивать МК, лучше иметь "крутой" программатор. Но если надобность в такой процедуре возникает нечасто, от случая к случаю, то можно вообще обойтись без программатора. Нет, конечно, речь идет не о том, чтобы научиться делать это силой мысли. Имеется в виду, что понимая, как происходит взаимодействие программатора с микроконтроллером при записи и считывании информации в режиме его программирования, мы можем обойтись подручными средствами более широкого назначения. Эти средства должны будут заменить как программную, так и аппаратную части программатора. Аппаратная часть должна обеспечить физическое соединение с микросхемой МК, возможность подавать логические уровни на его входы и считывать данные с его выходов. Программная часть должна обеспечить работу алгоритма, управляющего всеми необходимыми процессами. Отметим также, что качество записи информации в МК не зависит от того, насколько "крутой" у вас программатор. Такого понятия, как "лучше записалось" или "хуже" не существует. Есть только два варианта: "записалось" и "не записалось". Это объясняется тем, что непосредственно процессом записи внутри кристалла руководит сам МК. Нужно лишь обеспечить ему качественное питание (отсутствие помех и пульсаций) и правильно организовать интерфейс. Если по результатам контрольного считывания ошибок не выявлено, то все в порядке - можно использовать контроллер по назначению.

Для того, чтобы, не имея программатора, записать в МК программу, нам потребуется преобразователь порта USB-RS232TTL и , а также . Конвертер USB-RS232TTL позволяет при помощи порта USB создать COM-порт, отличающийся от "настоящего" лишь тем, что на его входах и выходах используются логические уровни TTL, то есть напряжение в интервале от 0 до 5 вольт (подробнее можно почитать в статье " "). Такой конвертер в любом случае полезно иметь в "хозяйстве", так что если у вас его еще нет, непременно стоит приобрести. Что касается логических уровней, то в нашем случае TTL - это даже преимущество перед обычным COM-портом, потому что входы и выходы такого порта можно напрямую подключать к любому микроконтроллеру, питающемуся от напряжения 5 В, в том числе ATtiny и ATmega. Но не пытайтесь использовать обычный COM-порт - там используются напряжения в интервале от -12 до +12 В (либо -15...+15В). Непосредственное соединение с микроконтроллером в этом случае недопустимо!!!

Идея создания скрипта для программы "Перпетуум М", реализующего функции программатора, возникла после ознакомления с рядом публикаций в интернете, предлагающих те или иные решения по прошивке МК. В каждом случае обнаруживались серьезные недостатки или чрезмерные сложности. Часто попадались схемы программаторов, содержащие в себе микроконтроллер и при этом вполне серьезно давались советы типа: "... а чтобы запрограммировать микроконтроллер для этого программатора нам потребуется... правильно - другой программатор!". Далее предлагалось сходить к другу, поискать платную услугу и т.п. Качество программного обеспечения, распространяемого в сети для этих целей, также не впечатлило - замечено множество проблем как с функциональностью, так и с "мутностью" пользовательского интерфейса. Зачастую много времени нужно потратить, чтобы понять, как использовать программу - ее необходимо изучать даже ради осуществления простейших действий. Иная программа может долго и усердно что-то делать, но о том, что ничего в МК не записывается, пользователь узнает только после полного завершения всей прошивки и последующего контрольного считывания. Встречается и такая проблема: пользователь пытается выбрать из списка поддерживаемых кристаллов свой МК, а его в списке нет. В этом случае воспользоваться программой не удастся - внесение в список недостающих МК, как правило, не предусмотрено. Кроме того ручной выбор контроллера из списка выглядит странно, если учесть, что программатор во многих случаях может сам определить тип МК. Все это сказано не для того, чтобы облить грязью существующие продукты, а для того, чтобы объяснить причину появления скрипта к программе "Перпетуум М", описываемого в данной статье. Проблема действительно существует, и она касается в первую очередь новичков, которым не всегда удается преодолеть данную "стену", чтобы сделать свой первый шаг в мир микроконтроллеров. В предлагаемом скрипте учтены недостатки, обнаруженные в других программах. Реализована максимальная "прозрачность" работы алгоритма, предельно простой интерфейс пользователя, не требующий изучения и не оставляющий шанса запутаться и "не туда нажать". При отсутствии нужного МК среди поддерживаемых есть возможность самостоятельно добавить его описание, взяв нужные данные из документации, скачанной с сайта разработчика МК. И, самое главное - скрипт открыт для изучения и модификации. Каждый желающий может, открыв в текстовом редакторе, изучать и править его на свое усмотрение, изменяя на свой вкус существующие функции и добавляя недостающие.

Первая версия скрипта была создана в июне 2015 года. В этой версии реализована только поддержка Atmel"овских МК серий ATtiny и ATmega с функциями записи/чтения флэш-памяти, с настройкой конфигурационных бит, с автоматическим определением типа контроллера. Запись и чтение EEPROM не реализованы. Были планы дополнить функциональность скрипта: добавить запись и чтение EEPROM, реализовать поддержку PIC-контроллеров и т.д. По этой причине скрипт до сих пор не был опубликован. Но из-за нехватки времени осуществление задуманного затянулось, и, чтобы лучшее не становилось врагом хорошего, решено опубликовать имеющуюся версию. Если уже реализованных функций окажется недостаточно, прошу не огорчаться. В этом случае вы можете попробовать самостоятельно добавить нужную функцию. Не стану скрывать: идея создания данного скрипта изначально несет в себе еще и образовательный смысл. Разобравшись в алгоритме и добавив к нему что-то свое, вы сможете глубже понять работу МК в режиме программирования, чтобы в будущем не оказаться в положении девушки перед сломавшимся автомоблем, задумчиво разглядывающей его внутренности и не понимающей, почему "не едет".

2. Интерфейс МК в режиме программирования

Существует несколько различных способов перевести контроллер в режим программирования и работать с ним в этом режиме. Самым простым в реализации для контроллеров серий ATtiny и ATmega является, пожалуй, SPI. Им и воспользуемся.

Но, прежде чем приступить к рассмотрению сигналов, необходимых для формирования SPI, сделаем ряд оговорок. Микроконтроллер имеет конфигурационные биты. Это что-то вроде тумблеров, переключение которых позволяет менять некоторые свойства микросхемы в соответствии с нуждами проекта. Физически это ячейки энергонезависимой памяти, вроде тех, в которые записывается программа. Разница в том, что их очень мало (до трех байт для ATmega), и они не входят в адресное пространство какой-либо памяти. Запись и чтение конфигурационных данных выполняется отдельными командами режима программирования МК. Сейчас важно отметить, что некоторые конфигурационные биты влияют на саму возможность использования SPI. При некоторых их значениях может оказаться, что SPI нельзя будет использовать. Если вам попадется такой микроконтроллер, то метод, предлагаемый в данной статье, не поможет. В этом случае придется либо изменить настройки конфигурационных бит в программаторе, который поддерживает иной режим программирования, либо использовать другой микроконтроллер. Но данная проблема касается только бывших в употреблении МК, либо тех, с которыми уже кто-то неудачно "поигрался". Дело в том, что новые МК поставляются с настройками конфигурационных бит, не препятствующими использованию SPI. Это подтверждается и результатами испытаний скрипта-программатора для программы "Перпетуум М", во время которых были успешно прошиты четыре разных МК (ATmega8, ATmega128, ATtiny13, ATtiny44). Все они были новые. Начальная настройка конфигурационных бит соответствовала документации и не мешала использованию SPI.

Учитывая сказанное выше, следует обращать внимание на следующие биты. Бит SPIEN в явном виде разрешает или запрещает использование SPI, следовательно в нашем случае его значение должно быть разрешающим. Бит RSTDISBL способен превратить один из выводов микросхемы (заранее предопределенный) во вход сигнала "сброс", либо не превратить (в зависимости от записанного в этот бит значения). В нашем случае вход "сброс" необходим (при его отсутствии не получится перевести МК в режим программирования через SPI). Есть еще биты группы CKSEL, задающие источник тактового сигнала. Они не препятствуют использованию SPI, но их тоже необходимо иметь в виду, потому что при полном отсутствии тактовых импульсов, либо при их частоте ниже допустимой для заданной скорости SPI, также ничего хорошего не получится. Обычно у новых МК, имеющих внутренний RC-генератор, биты группы CKSEL настроены на его использование. Нас это вполне устраивает - тактирование обеспечено без каких-либо дополнительных усилий с нашей стороны. Ни кварцевый резонатор припаивать, ни внешний генератор подключать не нужно. Если же указанные биты содержат иную настройку, придется позаботится о тактировании в соответствии с настройкой. В этом случае может потребоваться подключение к МК кварцевого резонатора или внешнего тактового генератора. Но в рамках данной статьи мы не будем рассматривать, как это делается. Примеры подключения МК для программирования, содержащиеся в данной статье, рассчитаны на самый простой случай.

Рис. 1. Обмен данными по SPI в режиме программирования

Теперь обратимся к рисунку 1, взятому из документации на МК ATmega128A. На нем показан процесс передачи одного байта в МК и одновременного приема одного байта из МК. Оба эти процесса, как видим, используют одни и те же тактовые импульсы, поступающие от программатора в микроконтроллер на его вход SCK - один из выводов микросхемы, для которого в режиме программирования по SPI отведена такая роль. Еще две сигнальные линии обеспечивают прием и передачу данных по одному биту за такт. Через вход MOSI данные поступают в микроконтроллер, а с выхода MISO снимаются считываемые данные. Обратите внимание на две пунктирные линии, проведенные от SCK к MISO и MOSI. Они показывают, в какой момент микроконтроллер "проглатывает" выставленный на входе MOSI бит данных, и в какой момент сам выставляет на выход MISO свой бит данных. Все достаточно просто. Но чтобы ввести МК в режим программирования нам еще потребуется сигнал RESET. Не забудем также про общий провод GND и питание VCC. В общей сложности выходит, что к микроконтроллеру для его прошивки по SPI нужно подключить всего 6 проводков. Ниже разберем это подробнее, а пока добавим, что обмен данными с МК в режиме программирования по SPI выполняется пакетами по 4 байта. Первый байт каждого пакета в основном полностью отводится под кодирование команды. Второй байт в зависимости от первого может быть продолжением кода команды, либо частью адреса, а может иметь произвольное значение. Третий байт используется в основном для передачи адресов, но во многих командах может иметь произвольное значение. Четвертый байт обычно передает данные, либо имеет произвольное значение. Одновременно с передачей четвертого байта в некоторых командах принимаются данные, поступающие из МК. Подробности по каждой команде можно найти в документации на контроллер в таблице под названием "SPI Serial Programming Instruction Set". Пока отметим лишь, что весь обмен с контроллером построен из последовательности 32-битных пакетов, в каждом из которых передается не более одного байта полезной информации. Это не очень оптимально, но в целом работает неплохо.

3. Подключение МК для программирования

Чтобы обеспечить подачу на входы микроконтроллера всех необходимых сигналов для организации интерфейса SPI и чтение данных с его выхода MISO, не обязательно создавать программатор. Это легко осуществить при помощи самого обыкновенного конвертера USB-RS232TTL.

В интернете часто можно встретить информацию о том, что такие конвертеры неполноценны, что с ними ничего серьезного сделать нельзя. Но в отношении большинства моделей конвертеров такое мнение ошибочно. Да, существуют в продаже конвертеры, у которых доступны не все входы и выходы по сравнению со стандартным COM-портом (например, только TXD и RXD), имеющие при этом неразборную конструкцию (микросхема залита пластмассой - невозможно добраться до ее выводов). Но такие и покупать не стоит. В некоторых случаях получить недостающие входы и выходы порта можно, подпаяв проводки непосредственно к микросхеме. Пример такого "усовершенствованного" конвертера показан на рисунке 2 (микросхема PL-2303 - подробнее о назначении ее выводов в статье " "). Это одна из самых дешевых моделей, но обладающая своими преимуществами при использовании в самодельных конструкциях. Широко распространены и полнофункциональные шнуры-переходники со стандартным девятиконтактным разъемом на конце, как у COM-порта. От обычного COM-порта они отличаются только уровнями TTL и несовместимостью с устаревшим программным обеспечением и некоторым старым оборудованием. Можно еще отметить, что шнуры на микросхеме CH34x на различных экстремальных тестах показывают себя гораздо более надежными и стабильными по сравнению с преобразователями на PL-2303. Впрочем, при обычном использовании разница не заметна.

При выборе конвертера USB-RS232TTL следует также обращать внимание на совместимость его драйвера с версией используемой операционной системы.

Рассмотрим подробнее принцип соединения микроконтроллера и конвертера USB-RS232TTL на примере четырех разных моделей МК: ATtiny13, ATtiny44, ATmega8 и ATmega128. На рисунке 3 показана общая схема такого соединения. Вас может удивить, что сигналы RS232 (RTS, TXD, DTR и CTS) используются не по назначению. Но не стоит об этом беспокоиться: программа "Перпетуум М" способна работать с ними напрямую - устанавливать значения на выходах и читать состояния входа. Во всяком случае широко распространенные конвертеры USB-RS232TTL на микросхемах CH34x и PL-2303 такую возможность обеспечивают - это проверено. С другими популярными конвертерами также проблем быть не должно, так как для доступа к порту используются стандартные функции Windows.

Резисторы, показанные на общей схеме, в принципе можно не устанавливать, но все-таки лучше установить. Каково их назначение? Используя ТТЛ"овские входы и выходы конвертера и пятивольтное питание микроконтроллера, мы тем самым избавляемся от необходимости согласования логических уровней - все и так вполне корректно. Значит, соединения могут быть непосредственными. Но во время экспериментов бывает всякое. Например по закону подлости отвертка может упасть как раз в то место, куда она никак не могла бы упасть, и замкнуть то, что ни в коем случае нельзя замыкать. В роли "отвертки", конечно, может оказаться все, что угодно. Резисторы в этом случае иногда уменьшают последствия. Еще одно их назначение состоит в устранении возможного конфликта выходов. Дело в том, что по окончании программирования микроконтроллер переходит в обычный режим работы, и может так получиться, что его вывод, соединенный с выходом конвертера (RTS, TXD или DTR) тоже становится выходом, согласно только что записанной в МК программе. В этом случае будет очень нехорошо, если два напрямую соединенных выхода будут "бороться" - пытаться установить разные логические уровни. В такой "борьбе" кто-то может и "проиграть", а нам этого не надо.

Номиналы трех резисторов выбраны на уровне 4,3 КОм. Это касается соединений выход конвертера - вход микроконтроллера. Точность резисторов роли не играет: можно уменьшить их сопротивление до 1 КОм или увеличить до 10 КОм (но во втором случае увеличивается риск помех при использовании длинных проводов на пути к МК). Что же касается соединения вход конвертера (CTS) - выход микроконтроллера (MISO), то здесь применен резистор сопротивлением 100 Ом. Это объясняется особенностями входа использованного конвертера. Во время испытаний был использован конвертер на микросхеме PL-2303, входы которой, судя по всему, подтянуты к плюсу питания относительно низким сопротивлением (порядка нескольких сот Ом). Чтобы "перебить подтяжку" пришлось поставить резистор со столь маленьким сопротивлением. Впрочем, можно его вообще не ставить. На конвертере это всегда вход. Выходом он стать не может, а значит, конфликта выходов не будет при любом развитии событий.

Если микросхема имеет отдельный вывод AVCC для питания аналогово-цифрового преобразователя (например, ATmega8 или ATmega128), его следует соединить с выводом общего питания VCC. Некоторые микросхемы имеют более одного вывода питания VCC или более одного GND. Например, ATmega128 имеет 3 вывода GND и 2 вывода VCC. В постоянной конструкции одноименные выводы лучше соединить между собой. В нашем же случае на время программирования можно задействовать по одному выводу VCC и GND.

А вот как выглядит подключение ATtiny13. На рисунке показано назначение выводов, используемых при программировании через SPI. Рядом на фото - как временное подключение выглядит в реальности.


Кто-то может сказать, что это несерьезно - соединения на проводках. Но мы же с вами люди здравомыслящие. Наша цель состоит в том, чтобы запрограммировать микроконтроллер, затратив на это минимум времени и прочих ресурсов, а не в том, чтобы перед кем-то покрасоваться. Качество при этом не страдает. Метод "на проводках" в данном случае вполне эффективен и оправдан. Прошивка контроллера - процедура разовая, поэтому нет смысла обвешивать ее "стразиками". Если же предполагается менять прошивку в дальнейшем, не извлекая контроллер из схемы (в готовом изделии), то это учитывается в монтаже при изготовлении устройства. Обычно для этой цели устанавливается разъем (RESET, SCK, MOSI, MISO, GND), а МК может быть прошит даже после установки на плату. Но это уже творческие изыски. Мы же рассматриваем самый простой случай.

Теперь перейдем к МК ATtiny44. Здесь все примерно так же. По рисунку и фото даже новичку не составит труда разобраться с подключением. Подобно ATtiny44 можно подключать МК ATtiny24 и ATtiny84 - назначение выводов у этой троицы совпадает.


Еще один пример временного подключения контроллера для его программирования - ATmega8. Здесь выводов побольше, но принцип тот же - несколько проводков, и вот уже контроллер готов к "заливке" в него информации. Лишний черный провод на фото, идущий от вывода 13, в программировании участия не принимает. Он предназначен для снятия с него звукового сигнала после выхода МК из режима программирования. Это связано с тем, что во время отладки скрипта для "Перпетуум М" в МК закачивалась программа музыкальной шкатулки.


Часто один контроллер выпускается в разных корпусах. При этом назначение выводов для каждого корпуса распределено по-своему. Если корпус вашего контроллера не похож на тот, что изображен на рисунке, уточните назначение выводов по технической документации, скачать которую можно с сайта разработчика МК.

Для полноты картины посмотрим подключение микросхемы МК с большим числом "ножек". Назначение лишнего черного провода на фото, идущего от вывода 15, точно такое же, как в случае с ATmega8.


Вероятно, вы уже убедились, что все достаточно просто. Кто умеет считать выводы у микросхем (от метки по кругу против часовой стрелки), тот разберется. И не забывайте про аккуратность. Микросхемы любят аккуратных и не прощают небрежного к себе отношения.

Прежде чем переходить к программной части, убедитесь, что драйвер конвертера USB-RS232TTL корректно установлен (проверьте диспетчер устройств Windows). Запомните или запишите номер виртуального COM-порта, появляющегося при подключении конвертера. Этот номер нужно будет вписать в текст скрипта, о котором читайте ниже.

4. Скрипт - программатор для "Перпетуум М"

С аппаратной частью "программатора" разобрались. Это уже полдела. Теперь осталось разобраться с программной частью. Ее роль будет выполнять программа "Перпетуум М" под управлением скрипта, в котором и реализованы все необходимые функции по взаимодействию с микроконтроллером.

Архив со скриптом следует распаковать в ту же папку, где находится программа perpetuum.exe. В этом случае при запуске файла perpetuum.exe на экран будет выводиться меню со списком установленных скриптов, среди которых будет строка "Программатор МК AVR" (она может быть единственной). Именно эта строка нам и потребуется.

Скрипт находится в папке PMS в файле "Программатор МК AVR.pms". Этот файл можно просматривать, изучать и править при необходимости в обычном текстовом редакторе вроде "Блокнота" Windows. Перед использованием скрипта скорее всего потребуется внести изменения в текст, связанные с настройкой порта. Для этого уточните в диспетчере устройств Windows имя используемого порта и, при необходимости, внесите соответствующую поправку в строку "ИмяПорта="COM4";" - вместо цифры 4 может стоять другая цифра. Также при использовании другой модели конвертера USB-RS232TTL может потребоваться изменение настроек инвертирования сигналов (строки скрипта, начинающиеся со слова "Высокий"). Проверить инвертирование сигналов конвертером USB-RS232TTL можно с помощью одного из примеров, содержащегося в инструкции к программе "Перпетуум М" (раздел функций для работы с портом).

Во вложенной папке MK_AVR находятся файлы с описаниями поддерживаемых контроллеров. Если нужного контроллера среди них не окажется, вы можете добавить нужный самостоятельно, действуя по аналогии. Возьмите за образец один из файлов, и при помощи текстового редактора введите необходимые данные, взяв их из документации на свой микроконтроллер. Главное - будьте внимательны, вводите данные без ошибок, иначе МК не запрограммируется, или запрограммируется неправильно. В исходной версии поддерживаются 6 микроконтроллеров: ATtiny13, ATtiny24, ATtiny44, ATtiny84, ATmega8 и ATmega128. В скрипте реализовано автоматическое распознавание подключенного контроллера - вручную указывать не нужно. При отсутствии считанного из МК идентификатора среди имеющихся описаний, выдается сообщение, что распознать контроллер не удалось.

В архиве со скриптом содержится также дополнительная информация. В папке "inc-файлы контроллеров AVR" находится очень полезная и обширная коллекция файлов описаний контроллеров. Эти файлы используются при написании собственных программ для МК. Еще четыре папки "MusicBox_..." содержат файлы с программой на Ассемблере и готовой к закачке в МК прошивкой отдельно для ATtiny13, ATtiny44, ATmega8 и ATmega128. Если вы уже подключили один из этих МК для программирования, как это предложено в данной статье, то можете прямо сейчас его прошить - получится музыкальная шкатулка. Об этом ниже.

При выборе в меню скриптов строчки "Программатор МК AVR", скрипт начинает исполняться. При этом он открывает порт, посылает в МК команду перехода в режим программирования, принимает подтверждение от МК об успешном переходе, запрашивает идентификатор МК и отыскивает описание данного МК по его идентификатору среди имеющихся файлов с описаниями. Если не находит нужного описания, выдает соответствеющее сообщение. Если же описание найдено, далее открывается главное меню программатора. Его скриншот вы можете видеть на рисунке 8. Далее разобраться не сложно - меню очень простое.

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

Некоторые ограничения функциональности описаны непосредственно в тексте скрипта:
//реализована запись только с нулевого адреса (Extended Segment Address Record игнорируется, LOAD OFFSET - тоже)
//порядок и непрерывность следования записей в HEX-файле не проверяется
//контрольная сумма не проверяется
Это касается работы с HEX-файлом, из которого берется код прошивки для МК. Если этот файл не искажен, проверка контрольной суммы ни на что не повлияет. Если искажен - средствами скрипта это выявить не удастся. Остальные ограничения в большинстве случаев не помешают, но иметь в виду их все-таки нужно.

5. Музыкальная шкатулка - простая поделка для начинающих

Если у вас есть один из этих микроконтроллеров: ATtiny13, ATtiny44, ATmega8 или ATmega128, вы можете легко превратить его в музыкальную шкатулку или музыкальную открытку. Для этого достаточно записать в МК соответствующую прошивку - одну из тех четырех, которые размещены в папках "MusicBox_..." в одном архиве со скриптом. Коды прошивок хранятся в файлах с расширением ".hex". Использовать ATmega128 для такой поделки, конечно, "жирновато", как и ATmega8. Но это может быть полезно для тестирования или экспериментов, иначе говоря - в учебных целях. Тексты программ на Ассемблере также прилагаются. Программы создавались не с нуля - за основу была взята программа музыкальной шкатулки из книги А.В.Белова "Микроконтроллеры AVR в радиолюбительской практике". Исходная программа претерпела ряд существенных изменений:
1. адаптирована для каждого из четырех МК: ATtiny13, ATtiny44, ATmega8 и ATmega128
2. ликвидированы кнопки - к контроллеру вообще ничего не нужно подключать, кроме питания и звукоизлучателя (мелодии воспроизводятся одна за другой в бесконечном цикле)
3. длительность каждой ноты уменьшена на длительность паузы между нотами для устранения нарушения музыкального ритма
4. подключена восьмая мелодия, незадействованная в книжной версии
5. из субъективного: некоторые "улучшайзинги" для оптимизации и более легкого восприятия алгоритма

В некоторых мелодиях слышится фальшь и даже грубые ошибки, особенно в "Улыбке" - в середине. Коды мелодий взяты из книги (а точнее - скачаны с сайта автора книги вместе с исходным asm-файлом) и не подвергались изменениям. Судя по всему, в кодировке мелодий имеются ошибки. Но это не проблема - кто "дружит" с музыкой, без труда во всем разберется и исправит.

В ATtiny13 из-за отсутствия 16-битного счетчика для воспроизведения нот пришлось использовать 8-битный, что привело к некоторому снижению точности звучания нот. Но на слух это мало заметно.

Насчет конфигурационных бит. Их настройка должна соответствовать состоянию нового микроконтроллера. Если ваш МК ранее где-то использовался, нужно проверить состояние его конфигурационных бит, и, при необходимости, привести их в соответствие настройкам нового микроконтроллера. Узнать состояние конфигурационных бит нового микроконтроллера можно из документации на этот МК (раздел "Fuse Bits"). Исключение составляет ATmega128. У этого МК имеется бит M103C, который включает режим совместимости с более старым ATmega103. Активизация бита M103C сильно урезает возможности ATmega128, причем у нового МК этот бит активен. Нужно сбросить M103C в неактивное состояние. Для манипуляций с конфигурационными битами используйте соответствующий раздел меню скрипта-программатора.

Схему музыкальной шкатулки приводить нет смысла: в ней только микроконтроллер, питание и пьезозвукоизлучатель. Питание подается точно так же, как мы это проделали при программировании МК. Звукоизлучатель подключается между общим проводом (вывод GND контроллера) и одним из выводов МК, номер которого можно посмотреть в файле с ассемблерным кодом программы (*.asm). В начале текста программы для каждого МК в комментариях имеется строчка: "звуковой сигнал формируется на выводе ХХ". При завершении работы скрипта - программатора микроконтроллер выходит из режима программирования и переходит в обычный режим работы. Сразу же начинается воспроизведение мелодий. Подключив звукоизлучатель, можно это проверить. Оставлять звукоизлучатель подключенным во время программирования кристалла можно только в том случае, если звук снимается с вывода, не задействованного в SPI, иначе дополнительная емкость на выводе может помешать программированию.

Программатор выполнен на основе драйвера от Objective Development и полностью совместим по командам с оригинальным программатором AVR910 от ATMEL. Описание устройства. Предохранитель защищает линий питания порта USB от случайного замыкания по цепям питания программатора. Диоды VD1, VD2 впрямительные кремниевые, они предназначены для понижения питания микроконтроллера до 3,6 В. Согласно документации, контроллер может работать при таком напряжении питания до частоты чуть более 14 МГц. Светодиоды VL1 ("RD ”), VL2 ("WR ”) сигнализируют о текущих действиях программатора и обозначают режимы чтения и записи. Светодиод VL3 ("PWR ”) показывает подачу питания на .

Джампер J1 - (MODify ) служит для начального программирования управляющего МК программатора. При его замыкании, к разъему ISP подключается внешний программатор и производится загрузка в МК управляющей программы. После программирования управляющего МК программатора этот джампер необходимо разомкнуть и замкнуть джампер J2 - NORMal.

Джампер J3 LOW SCK понижает тактовую частоту порта SPI МК программатора до ~20 кГц. При разомкнутом джампере частота SPI нормальная, при замкнутом - пониженная. Переключать джампер можно на ходу, так как управляющая программа МК программатора проверяет состояние линии PB0 при каждом обращении к порту SPI. Не рекомендуется переключать джампер при запущенном процессе записи/чтения программируемого МК, т.к., скорее всего, это приведет к искажению записываемых/читаемых данных. Джампер J3 введен для возможности программирования МК AVR, тактируемых от внутреннего генератора 128 кГц.

Резисторы R10 - R14 предназначены для согласования уровней сигналов микроконтроллера программатора и внешних цепей (программируемый МК или другой программатор). Тактовая частота порта SPI МК программатора при разомкнутом джампере J3 равна 187,5 кГц. Это позволяет программировать контроллеры с тактовой частотой примерно от 570 кГц для ATtiny/ATmega, 750 кГц для 90S и 7,5 МГц для 89S. Контроллеры программируются от 10 до 30 секунд (при использовании утилиты AVRProg v.1.4 из пакета AVR Studio) вместе с верификацией в зависимости от объема FLASH памяти и тактовой частоты.

На вывод LED разъема ISP выведен меандр с частотой 1 МГц для "оживления" МК, у которых были ошибочно запрограммированы фьюз-биты, отвечающие за тактирование. Сигнал генерируется постоянно и не зависит от режима работы программатора. Программатор тестировался с программами AVRProg v.1.4 (входит в пакет AVRStudio), ChipBlasterAVR v.1.07 Evaluation, CodeVisionAVR, AVROSP (ATMEL AVR Open Source Programmer). Для нормального функционирования контроллера в схеме необходимо, чтобы были запрограммированы (установлены в "0") биты SPIEN , CKOPT , SUT0 и BODEN . Обычно микроконтроллеры, идущие с завода, т.е. новые, имеют уже запрограммированный бит SPIEN . Остальные биты должны быть незапрограммированные (установлены в "1").

Инструкция по установке и работе. Прошить контроллер. Подключить свежеиспеченный программатор к компьютеру через USB. Операционная система найдет новое устройство - AVR910 USB Programmer, при предложении автоматически найти драйвер, отказаться, и указать путь к inf-файлу, в зависимости от установленной на вашем компьютере операционной системы.

На форуме находятся все файлы, а также печатная плата для нашего программатора avr. Здесь покажу технологию сборки USB программатора AVR и упаковки в корпус. Для начала скачиваем архив и делаем печатную плату.

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

Подгоняем плату под корпус, делаем все замеры, сверлим отверстия и вот вам готовый прибор, с универсальной платой.

Если нет специальной измерительной аппаратуры, можно произвести проверку при помощи светодиода. Светодиод подключается анодом к контакту LED, катодом к любому контакту GND ISP-разъема. При подаче питания светодиод должен светится в «полнакала». При замыкании пинцетом ножек кварцевого генератора светодиод должен либо засветится в «полный накал», либо свечение должно отсутствовать.

Без ощибок собранный программатор с правильно запрограммированным микроконтроллером в настройке не нуждается. Но если у программируемого МК вход RESET подтянут к напряжению питания резистором, то номинал резистора не должен быть ниже 10 кОм - это связанно с пониженным напряжением питания управляющего контроллера в схеме программатора и введением ограничительных резисторов на шине ISP-разъема.

Обсудить статью ПРОГРАММАТОР AVR USB

Предлагаем Вам схему USB программатора на микроконтроллере ATmega8. Этот USB программатор Вы можете собрать своими руками за несколько минут на макетной плате Breadboard Half (BREADBOARD - 456 HOLES) размером 82х59 мм. На этой плате хватит места и для программируемых микроконтроллеров в корпусах до DIP-28.

Этим USB программатором можно программировать микроконтроллеры AVR ATmega и ATtiny (другие программировать не пробовал). Этот программатор заметит Вам плату Arduino, он более удобен для экспериментов с различными микроконтроллерами и микропрограммами для них (скетчами). USB программатор работает под управлением микропрограммы ArduinoISP.

Минимальный набор деталей для программатора

  1. Микроконтроллер ATmega8 (ATmega8A-PU, ATmega8L-PU) 1шт
  2. Макетая плата Breadboard Half (BREADBOARD - 456 HOLES) размером 82х59 мм 1шт
  3. Интерфейс USB-UART (подойдет USB-DATA кабель от старого сотового телефона) 1шт

Остальные детали, которые вы увидите на схеме для работы универсального, самодельного, простого программатора не существенны.

О подключении пробников, бузер можно подключить на линию MISO и слушать как общаются между собой микроконтроллеры. Светодиод можно подключить к 15 ножке микроконтроллера ATmega8, если схема собрана правильно и в Atmega8 залит скетч ArduinoISP, светодиод будет плавно менять яркость свечения.

Прежде чем воспользоваться самодельным программатором, необходимо загрузить в микроконтроллер программатора микропрограмму ArduinoISP из примеров к программе Arduino IDE. А еще раньше, необходимо настроить микроконтроллер ATmega8 на работу на частоте 8 МГц без внешнего кварцевого резонатора.

Мы здесь, приведем последовательность действий по прошивке микроконтроллера ATmega8 с помощью платы Arduino UNO и программы Arduino IDE. Возможно, так же, воспользоваться каким нибудь другим методом.

1. Добавьте в программе Arduino в список поддерживаемых устройств микроконтроллер ATmega8 без bootloader с тактовой частотой 8МГц. Внесите изменения в файл sketchbook/hardware/boards.txt, добавив в него следующую секцию:

############################################################## a8noboot_8MHz.name=ATmega8 (no boot 8 MHz int) a8noboot_8MHz.upload.maximum_size=8192 a8noboot_8MHz.bootloader.low_fuses=0xa4 a8noboot_8MHz.bootloader.high_fuses=0xdc a8noboot_8MHz.build.mcu=atmega8 a8noboot_8MHz.build.f_cpu=8000000L a8noboot_8MHz.build.core=arduino a8noboot_8MHz.build.variant=standard ##############################################################

Уточнить размещение папки sketchbook можно в программе Arduino в меню Файл / Настройки . Если в папке sketchbook нет папки hardware, создайте ее и создайте файл boards.txt

2. Подключите микроконтроллер ATmega8 к плате Arduino UNO как описано в Программатор для ATmega8A на Arduino с ArduinoISP .

3. В программе Arduino выберите Сервис / Плата / ATmega8 (no boot 8 MHz int) и Сервис / Записать загрузчик . Далее загрузите в микроконтроллер ATmega8 программу ArduinoISP Файл / Примеры / ArduinoISP и Загрузить .

4. Соберите программатор.

Для программатора Вам понадобится интерфейс USB-UART. Вы можете воспользоваться кабелем от старого сотового телефона, как описано в этой статье Подбор USB-DATA кабеля вместо USB-UART модуля для самодельного Arduino. Что на мой взгляд, очень удобно. Но вместо этого кабеля Ваш программатор можно подключить к компьютеру с помощью платы преобразователя USB-UART.

На фотографии программируется микроконтроллер ATtiny84.

Как театр начинается с вешалки, так программирование микроконтроллеров начинается с выбора хорошего программатора. Так как начинаю осваивать микроконтроллеры фирмы ATMEL, то досконально пришлось ознакомится с тем что предлагают производители. Предлагают они много всего интересного и вкусного, только совсем по заоблачным ценам. К примеру, платка с одним двадцатиногим микроконтроллером с парой резисторов и диодов в качестве обвязки, стоит как «самолет». Поэтому остро встал вопрос о самостоятельной сборке программатора. После долгого изучения наработок радиолюбителей со стажем, было решено собрать хорошо зарекомендовавший себя программатор USBASP, мозгом которого служит микроконтроллер Atmega8 (так же есть варианты прошивки под atmega88 и atmega48). Минимальная обвязка микроконтроллера позволяет собрать достаточно миниатюрный программатор, который всегда можно взять с собой, как флэшку.

Автором данного программатора является немец Thomas Fichl, страничка его разработки со схемами, файлами печатных плат и драйверами.
Раз решено было собрать миниатюрный программатор, то перерисовал схему под микроконтроллер Atmega8 в корпусе TQFP32 (распиновка микроконтроллера отличается от распиновки в корпусе DIP):

Перемычка J1 применяется, в случае если необходимо прошить микроконтроллер с тактовой частотой ниже 1,5МГц. Кстати, эту перемычку вообще можно исключить, посадив 25 ногу МК на землю. Тогда программатор будет всегда работать на пониженной частоте. Лично для себя отметил, что программирование на пониженной скорости на доли секунды дольше, и поэтому теперь перемычку не дёргаю, а постоянно шью с ней.
Стабилитроны D1 и D2 служат для согласования уровней между программатором и USB шиной, без них работать будет, но далеко не на всех компьютерах.
Светодиод blue показывает наличие готовности к программированию схемы, red загорается во время программирования. Контакты для программирования выведены на разъем IDC-06, распиновка соответствует стандарту ATMEL для 6-ти пинового ISP разъема:

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

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

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

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

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

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

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

Все, теперь программатор готов к работе.

Khazama AVR Programmer
Для работы c программатором я выбрал прошивальщик Khazama AVR Programmer . Замечательная программка, с минималистичным интерфейсом.

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

Запись фьюзов в память мк, как можно догадаться, осуществляется при нажатии кнопки Write All. Кнопка Save сохраняет текущую конфигурацию, а Load возвращает сохраненную. Правда я так и не смог придумать практического применения этих кнопок. Кнопка Default предназначена для записи стандартной конфигурации фьюзов, такой, с какой микроконтроллеры идут с завода (обычно это 1МГц от внутреннего RC).
В общем, за все время пользования этим программатором, он показал себя с наилучшей стороны в плане стабильности и скорости работы. Он без проблем заработал как на древнем стационарном пк так и на новом ноутбуке.

Скачать файл печатной платы в SprintLayout можно по



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: