Как научиться программировать программатор коми блок

от admin

Как научиться программировать микроконтроллеры

Я начинал с электроники. Увлекался с детства. Выписывал журналы «Радио», читал их от корки до корки. И из этих журналов узнал о микроконтроллерах (МК). Они меня сильно заинтересовали, поскольку схемы устройств на МК были значительно проще, чем на транзисторах или даже микросхемах. Но научиться использовать микроконтроллеры я тогда не смог. В журналах было недостаточно сведений, а книг тогда по этой теме не было.

Другое дело сейчас — способов научиться программировать МК много. Осталось только выбрать подходящий. А самый подходящий — это

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

Что такое микроконтроллер

Микроконтроллер — это микросхема, которую можно программировать. Это если кратко. Далее будет чуть подробнее, а пока небольшая предыстория появления микроконтроллеров на свет божий.

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

Кроме того, требования к электронному оборудованию всё возрастали, и для их выполнения приходилось создавать всё больше и больше новых микросхем — каждая под свою задачу.

Тогда этот кто-то умный решил — а почему бы не сделать программируемую микросхему, и использовать её для всех устройств. Ведь в большинстве случаев задачи являются типовыми, и отличается лишь логика управления. И почему бы эту логику не прописать в программе, а не использовать для каждой операции отдельную микросхему?

Так появились микропроцессоры. Микропроцессор — это тоже программируемая микросхема. Но в микропроцессоре, как правило, была только управляющая программа. А память, модули ввода-вывода и т.п. реализовывались в других микросхемах.

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

Поэтому создание микроконтроллера было неизбежным этапом эволюции микропроцессорных систем.

Микроконтроллер — это программируемая микросхема, которая объединяет в одном корпусе все (или почти все) части микропроцессорной системы.

То есть сегодня можно создать достаточно сложное устройство, например, новогоднюю гирлянду с разными режимами работы, имея лишь одну микросхему — простенький микроконтроллер, к тому же очень недорогой (стоимость простых микроконтроллеров начинается примерно от 50 рублей).

Так что микроконтроллеры очень быстро завоевали популярность среди электронщиков, причём как любителей, так и профессионалов. И сегодня применяются практически везде.

Применение микроконтроллеров

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

Даже в основе таких приборов для промышленной автоматизации, как ПЛК, используются микроконтроллеры.

Микроконтроллеры используются в оборонной промышленности. К таким микроконтроллерам очень высокие требования. И цена их соответствующая. МК для оборонки, которые производятся в России, стоят от 15000 рублей за штуку и выше. Сравните с простейшими МК для гражданки — от 50 рублей.

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

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

Язык программирования микроконтроллеров

Я уже говорил, что микроконтроллер — это программируемая микросхема. Из этого следует, что для создания устройств на микроконтроллерах необходимо научиться их программировать.

А для программирования, как известно, используются языки программирования. Языков программирования сегодня существует огромное количество. И для многих из них имеются средства разработки для микроконтроллеров (средства для написания программ).

Однако я советую использовать стандартные средства разработки, которые предоставляют сами разработчики и производители МК. Во всяком случае на начальном этапе обучения. А стандартные средства разработки, как правило, поддерживают только два языка программирования: ассемблер и Си.

Несмотря на то, что ассемблер сложнее, я советую начинать обучение именно с него. Потому что так вы лучше разберётесь с тем, как работает МК и будете понимать, что и зачем вы делаете. А изучить Си можно будет потом.

Что нужно для программирования МК

Программы для программирования микроконтроллеров

Как я уже говорил, для создания программ потребуется среда разработки — это специальная программа, которая устанавливается на компьютер. С её помощью можно писать, отлаживать и загружать программы в микроконтроллер.

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

Имеются и другие полезные программы, которые по большей части используются для отладки и для эмуляции работы микроконтроллера. Это позволяет как следует отладить и проверить программу на компьютере без загрузки в микроконтроллер. Но на начальном этапе обучения вполне достаточно стандартных программ и стандартных отладочных средств.

Программы для прошивки микроконтроллеров

Загрузку готовой программы в микроконтроллер в простонародье называют “прошивкой”.

Когда вы написали программу, вам надо загрузить её в МК (прошить микроконтроллер). Для этого вам, кроме программы, потребуется специальное устройство — программатор, а также соединительные кабели.

Всё это можно купить в магазинах электроники или у производителя микроконтроллеров.

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

ВАЖНО! Некоторые микроконтроллеры допускают только одну прошивку, или количество перепрошивок может быть ограничено. Поэтому, прежде чем загружать программу в МК, постарайтесь её как следует проверить и отладить на компьютере.

Как работает микроконтроллер

Ну вообще вы можете об этом узнать, если внимательно прочитаете руководство на конкретный микроконтроллер. Но если сказать упрощённо, то микроконтроллер работает примерно так:

  • При включении питания выполняется сброс всех модулей микроконтроллера в исходное состояние, а программа загружается в оперативную память и начинает выполняться. Обычно программа выполняется в цикле. То есть все команды выполняются последовательно одна за одной. После выполнения последней команды вновь выполняется первая и так до бесконечности — пока не будет отключено питания или выполнен сброс.
  • Тактовый генератор задаёт тактовую частоту. Это позволяет синхронизировать по времени все процессы, происходящие внутри микроконтроллера. Например, если тактовая частота 1000 Гц, то это означает, что за одну секунду генератор выдаёт 1000 тактовых сигналов.
  • Каждый микроконтроллер имеет определённый набор команд (инструкций), из которых и состоит программа. Например, есть команда для чтения входа, есть команда для установки выхода, есть команды для выполнения арифметических операций и т.е.
  • Выполнение каждой команды программы занимает один или несколько тактов. Например, если команда занимает 2 такта, то это означает, что при тактовой частоте 1000 Гц она выполняется за 1 / (1000 / 2) = 0,002 с. Если в нашей программе будет 100 таких команд, то это будет означать, что вся программа будет выполнена за 0,002 * 100 = 0,2 секунды. Это, конечно, упрошённо. Но суть, я думаю, вы уловили.
  • Программа, как правило, считывает какие-то входные значения, обрабатывает их, и выдаёт на выходы сигналы в соответствии с логикой программы. Например, у нас есть новогодняя гирлянда с двумя режимами работы (пусть это будут “бегущий огонь” и “бегущая тень”), которые устанавливаются переключателем. Тогда микроконтроллер, в зависимости от того, на какой вход замкнут переключатель (какой режим выбран), будет через определённые промежутки времени поочерёдно подавать сигнал на выходы (зажигать светодиод — бегущий огонь), или снимать сигнал с выхода (гасить светодиод — бегущая тень). Временные промежутки также программируются при создании программы.

То есть упрощённый принцип работы МК такой:

  • Прочитать входы
  • Обработать полученные данные
  • Установить выходы

Практическое программирование микроконтроллеров

Пока всё кажется несложным. Но на самом деле, конечно, всё НАМНОГО сложнее. Я привёл лишь некоторые общие сведения для тех, кто совсем не в теме.

Но любым, даже самым сложным вещам, можно научиться. Было бы желание. Но, кроме обучения, требуется, конечно, практика. Без практики любое обучение не имеет ни смысла, ни результата.

Поэтому очень советую в ходе обучения как можно больше создавать программ. Пусть даже без реального микроконтроллера. Хотя бы просто на компьютере.

А вот что делать потом, когда вы уже чему-то научитесь? Где приложить полученные навыки на практике?

К счастью, сегодня и для этого есть множество путей — выбирайте любой из этих или придумайте свой:

  • Устроиться на работу, связанную с программированием микроконтроллеров
  • Разрабатывать, создавать и продавать свои устройства на МК
  • Преподавать уроки по микроконтроллерам в техническом училище или ВУЗе, ну или в области дополнительного образования — задач по микроконтроллерам на биржах фриланса довольно много
  • Создать свой канал про МК на Ютубе или в соцсетях, и зарабатывать на рекламе
  • Написать свою книгу или видеокурс по микроконтроллерам и также зарабатывать на их продаже
  • В конце концов, просто создавать свои устройства для удовольствия, то есть превратить это в увлекательное хобби, дарить эти устройства друзьям и родственникам, увлекать этим своих детей и т.п.

Основы программирования микроконтроллеров

Конечно, я не расскажу вам в одной статье даже основы. Узнать их вы можете здесь. А я лишь покажу, как примерно выглядит программа для микроконтроллера (точнее, исходный текст программы):

Это пример программы для микроконтроллера на языке Си. Эта программа бесполезная, потому что она просто устанавливает высокий уровень на одном выходе. Но для понимания структуры программы этого достаточно. Ну а чтобы создавать полезные программы — надо учиться.

И, как я говорил выше, начать лучше всё таки с ассемблера. А потом, если будет желание, можно перейти на Си. Как можно всему этому научиться — см. ниже.

Видеокурсы по программированию микроконтроллеров

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

Если вы новичок, то советую пока изучить первый видеокурс. Изучить тщательно, с практической проработкой всех примеров. Ну а если у вас уже есть какой-то опыт, то выбирайте то, что вам наиболее интересно.

Программирование микроконтроллеров для начинающих
Программирование микроконтроллеров на языке Си
Создание устройств на микроконтроллерах
Программирование дисплеев Nextion
Три курса со скидкой
Три курса со скидкой Если вы уже фанатично полюбили микроконтроллеры, и окончательно решили их досконально изучить, то вы можете получить три первых курса со скидкой. Как говорится: оптом — дешевле. Описания курсов вы можете найти по ссылкам выше, а получить их все вместе можно здесь. Экономия по сравнению с покупкой курсов по отдельности составит 780 рублей.
Все четыре курса со скидкой
Все четыре курса со скидкой Вы также можете купить все четыре курса. В этом случае экономия будет ещё больше. По сравнению с покупкой курсов по отдельности она составит 1880 рублей. Ссылка на оформление заказа.
Инженер умных устройств

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

Как прошить микроконтроллер ATtiny или ATmega без программатора

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

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

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

Для того, чтобы, не имея программатора, записать в МК программу, нам потребуется преобразователь порта USB-RS232TTL и программа «Перпетуум М» (6 Мб), а также скрипт для «Перпетуум М», реализующий функции программатора (347 Кб). Конвертер 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 следует также обращать внимание на совместимость его драйвера с версией используемой операционной системы. Рис. 3. Общая схема соединения микроконтроллеров серий ATtiny и ATmega с конвертером порта 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. На рисунке 4 показано назначение выводов, используемых при программировании через 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. Если вы уже подключили один из этих МК для программирования, как это предложено в данной статье, то можете прямо сейчас его прошить — получится музыкальная шкатулка. Об этом ниже. Рис. 8. Главное меню скрипта — программатора.

Читать:
Где на вднх прокат велосипедов

При выборе в меню скриптов строчки «Программатор МК 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, иначе дополнительная емкость на выводе может помешать программированию.

Успешных вам экспериментов!

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

Кроме PL-2303 существуют и другие микросхемы, на которых создаются конвертеры интерфейса, подобные использованному в данной статье. Читайте описание ещё одного преобразователя USB-UART (на микросхеме CH340G) и о его доработке до USB-RS232TTL.

Программаторы и программирование микроконтроллеров

Ставшие сегодня обычными радиолюбительские конструкции на микроконтроллерах подкупают простотой схемы и широкими возможностями. Однако прежде, чем собранное устройство заработает, микроконтроллер, в отличие от традиционных интегральных микросхем, выпускаемых с завода «готовыми к употреблению», необходимо «обучить». Для этого в его память нужно занести программу — последовательность команд, исполняя которые микроконтроллер будет делать все, что требуется.

Программу обычно составляют параллельно с разработкой схемы и конструкции прибора и окончательно отлаживают, испытывая готовое изделие. Мы не будем вникать в многочисленные возникающие при этом проблемы. Наша задача — научиться заносить в микроконтроллер готовую программу.
Что будем записывать
Обычно в описании прибора программа, по которой должен работать микроконтроллер, представлена таблицей кодов — их следует занести в память микроконтроллера. Вот фрагмент такой таблицы в так называемом НЕХ-формате (табл. 1):

Таблица 1
:1000C000A60C2618652805126728051600003F2093
:1000D000A60C26186D2805126F28051600003F2073
:1000E000A60C2618752805127728051600003F2053
:1000F000A60C26187D2805127F28051600003F2033
:10010000A60C2618852805128728051600003F2012
:100110000000000000000000000005163F203F2006
:10012000000000000000000000000800FF3FFF3F4B

Подробнее о нем можно прочитать, например в [1, 2].

Напомним, микроконтроллеры работают в двоичной системе счисления, различая лишь по два состояния (0 и 1) каждого из своих выводов, многочисленных ячеек памяти и других внутренних узлов. Большинство двоичных ячеек-разрядов для ускорения и удобства выполнения различных операций над их содержимым объединены в группы — восьмиразрядные байты и более длинные слова. В публикуемых таблицах исключительно для удобства их восприятия человеком помещают не двоичные, а шестнадцатиричные изображения программных кодов. Каждые четыре двоичных цифры заменяют одной шестнадцатиричной:
0000 — 0 0100 — 4 1000 — 8 1100 — С
0001 — 1 0101 — 5 1001 — 9 1101 — D
0010 — 2 0110 — 6 1010 — А 1110 — Е
0011 — 3 0111 — 7 1011 — В 1111 — F

Куда будем записывать
Внутреннюю память программ микроконтроллера в варианте, допускающем многократное изменение содержимого, часто называют FLASH-памятью, хотя этот термин характеризует ее устройство и принцип действия, а не функциональное назначение. Кроме программной имеется, как правило, и внутренняя электрически изменяемая память данных (EEPROM) для хранения различного рода констант, подбираемых в процессе настройки готового изделия или время от времени корректируемых в процессе эксплуатации.
Частью внутренней перепрограммируемой памяти микроконтроллера можно считать и конфигурационные ячейки — своего рода переключатели, управляющие некоторыми узлами микроконтроллера. Записав в эти ячейки нули или единицы, такие узлы можно включить, выключить, установить нужный режим их работы. Учтите, сделать это можно лишь в процессе программирования. Исполняемая микроконтроллером программа ни проверить его конфигурацию, ни изменить ее не может. Именно неправильно заданная конфигурация часто единственная причина неработоспособности отлаженной и неоднократно проверенной программы.
Среди конфигурационных есть ячейки, управляющие защитой памяти. Включив ее, делают содержимое внутренней памяти недоступным для любых внешних воздействий кроме полного стирания. Только уничтожив всю хранившуюся информацию, удастся отключить защиту. Таким образом предотвращают несанкционированное копирование программы. Учтите, однажды включенную защиту памяти микроконтроллера, рассчитанного на однократное программирование (ОТР), уже не отключить никаким способом.

Как будем записывать
В обычном рабочем режиме внутренняя память микроконтроллера для внешнего доступа закрыта. Чтобы получить возможность читать и записывать информацию, нужно подать на определенные выводы микросхемы специальную комбинацию уровней напряжения, не встречающуюся при обычной работе. У большинства современных микроконтроллеров для программирования предусмотрен последовательный интерфейс (не путать с интерфейсом, служащим для связи микроконтроллера с другими устройствами в рабочем режиме). Это значит, что двоичные значения кодов и команд, управляющих процессом программирования, подают на предназначенный для этого вывод микросхемы поочередно разряд за разрядом, сопровождая синхронизирующими импульсами на другом выводе. Таким образом в процессе программирования активно участвуют всего две цепи. Иногда требуется еще одна — для вывода (тоже последовательным кодом) содержимого памяти и ответов микроконтроллера на команды, управляющие программированием. Но во многих случаях двустороннюю связь организуют по одной цепи.
Переход с параллельного интерфейса программирования, требовавшего задействовать почти все выводы микроконтроллера, на последовательный привел к значительному упрощению программаторов — устройств для занесения информации во внутреннюю память. Еще больше упростил их перенос внутрь микроконтроллеров довольно сложной автоматики программирования, формирующей импульсы строго определенной длительности и повышенного напряжения. Внутрь переместились и сами источники этого напряжения. Внешнее напряжение, отличающееся от обычного, требующегося для питания микроконтроллера если и подают, то лишь как сигнал переключения последнего в режим программирования.
В аппаратной части программатора остаются один-два электронных ключа, и два-три буферных элемента, согласующих входы и выходы микроконтроллера с внешними цепями. Основная часть работы по формированию и анализу последовательностей импульсов во время программирования возложена на управляющий этим процессом компьютер.
Часто задают вопрос, нельзя ли записать программу в микроконтроллер, не имея компьютера? Ответ неожиданный: можно. В принципе достаточно переключателя, чтобы устанавливать на входе программирования уровни 0 или 1 в соответствии с кодовой таблицей, и кнопки для подачи синхроимпульсов. Естественно, кнопка и переключатель должны быть снабжены узлами подавления «дребезга» контактов. Оперируя этими органами вполне возможно занести в память микроконтроллера всю программу.
Беда в том, что самая простая программа состоит из нескольких сотен нулей и единиц, а в более сложных их тысячи. Многие ли обладают достаточным терпением и аккуратностью, чтобы безошибочно все это набрать вручную? Ведь после любого сбоя придется повторять работу с самого начала. Лучше уж поручить эти однообразные операции компьютеру.

Программатор = адаптер + управляющая программа
Прежде, чем продолжить рассказ, разберемся немного в терминологии. Слово «программатор» употребляют сегодня как минимум в двух значениях. Во-первых, это устройство, с помощью которого соединяют компьютер (источник данных) с микросхемой, в которую должны быть занесены эти данные. Этот прибор правильнее называть адаптером программирования. Во-вторых, программатор — программа, под управлением которой компьютер формирует все необходимые для записи данных в микроконтроллер сигналы на выводах одного из своих портов (того, к которому подключают адаптер).
Путаница в понятиях нередко приводит к взаимному непониманию в спорах о том, какой программатор лучше. Один утверждает, что программатор А, его можно собрать за день. Второй — что программатор Б, он удобнее в пользовании. Действительно, адаптер А очень прост, но сопровождающая его программа А неудобна. Сложный в изготовлении адаптер Б работает под управлением программы Б, оснащенной многими сервисными функциями. Так что оба правы. Но нередко спорящим невдомек, что адаптер А вполне может работать с программой Б и наоборот. Именно такая ситуация будет рассмотрена ниже.

Как подключить адаптер
Для связи компьютера с программируемым микроконтроллером через адаптер пригодны два вида стандартных портов, известных под аббревиатурами LPT и СОМ. То, что порт LPT параллельный, а СОМ последовательный, в данном случае значения не имеет. Важна возможность формировать нужные импульсы, программно изменяя уровни напряжения на отдельных линиях этих портов, и «читать» ответные сигналы микроконтроллера. Число практически равноправных выходных и входных линий вполне достаточно в портах обоих типов. Поэтому с точки зрения правильности и скорости программирования подключение адаптера, к порту того или иного типа, не дает никакого выигрыша.
Некоторое преимущество СОМ-порта состоит в том, что из его выходных сигналов легко получить не только напряжение +5 В мощностью, достаточной для питания самого адаптера и программируемой микросхемы, но и + 12 В для переключения в режим программирования микроконтроллеров, например, серии PICmicro (более известных под названием PIC-контроллеры). Здесь удается обойтись без дополнительного внешнего источника питания, который как правило необходим LPT-адаптерам. Хотя известны конструкции с питанием и от такого порта [31].
К тому же к розетке порта LPT1 в компьютере обычно подключен принтер, который на время работы с программатором приходится отключать. Очень редко компьютеры бывают снабжены вторым параллельным портом LPT2, к которому можно подключить адаптер, не отключая принтер от LPT1. Справедливости ради нужно сказать, что современные принтеры все чаще снабжают интерфейсом USB и порт LPT остается свободным.
Весьма заманчиво было бы использовать USB для связи компьютера с адаптером программирования. Прежде всего потому, что в этом интерфейсе специально предусмотрена подача на подключаемое устройство от компьютера питающего напряжения 5 В. К сожалению, организация аппаратного и программного взаимодействия по этому интерфейсу довольно сложна. Так что разработка USB-программатора — дело будущего.
Последовательных портов в компьютере обычно два (СОМ1 и COM2), адаптер можно подключить к любому. Но вилки этих портов зачастую разнотипны. Одна из них, как правило, СОМ1, девяти-, а COM2 — 25-контактная, что нужно учитывать при изготовлении адаптеров. При несовпадении типа разъемов можно приобрести переходник или изготовить его по схеме, показанной на рис. 1. Для подключения адаптера с 25-контактной розеткой к девятиконтактной вилке порта разъем Х1 должен быть розеткой (с буквенным индексом F), a X2 — вилкой (с индексом М). В противоположном случае — наоборот.
Длина соединительных кабелей, шлейфов или проводов компьютер— адаптер и адаптер—программируемая микросхема во всех случаях должна быть минимальной — 0,2. 0,5 м. Понятно, это доставит некоторые неудобства, так как разъемы портов размещены на обычно труднодоступной тыльной стороне корпуса системного блока. Но придется смириться с неудобствами. Именно длинные провода — одна из главных причин сбоев в процессе программирования.

Sl-Prog — программируем все
Описание сравнительно несложного адаптера, предназначенного для работы под управлением известной программы PonyProg, было опубликовано в [1]. Рекомендации по его проверке можно найти в [4]. Адаптер состоит из основной платы, подключаемой к разъему СОМ-порта, и нескольких сменных плат-переходников с панелями для программируемых микросхем различных типов, в том числе микроконтроллеров самых распространенных серий PICmicro, AVR и AT89S. Среди радиолюбителей за этим устройством закрепилось название PonyProg, хотя К. Ланконелли (Lanconelli), автор исходного варианта адаптера и обслуживающей его программы, предпочитает называть свой адаптер Sl-Prog. Будем следовать его примеру.

Адаптеры для PICmicro
Фирма Microchip (разработчик микроконтроллеров серии PICmicro) рекомендует для их программирования адаптер по схеме, показанной на рис. 2.

Ее оригинал приведен в фирменном руководстве по применению (application note) AN589 http://ww1.microchip.com/downloads/en/AppNotes/00589a.pdf , под тем же названием известен и сам адаптер. Его вилку XS1 соединяют с 25-контактной розеткой порта LPT на корпусе системного блока компьютера. Соединение с общим проводом (GND) цепей BUSY и РЕ дает возможность управляющей программе определить, что к LPT-порту подключен именно адаптер. Если разъем порта свободен или к нему подключен принтер, сочетание логических уровней в этих цепях иное.
Напряжение +13,5 В подают от любого источника, способного отдать ток не менее 50 мА. Микросхема DA1 — стабилизатор напряжения 5 В. На транзисторах VT1—VT3 собран узел управления напряжением в цепи, переводящей микроконтроллер в режим программирования. В зависимости от логических уровней на линиях DATA4 и DATA5 оно принимает три значения: 0, 5 и 12 В.
Выводы различных микроконтроллеров подключают к адаптеру в соответствии с табл. 2.

Таблица 2

MK Корпус MCLR CLOCK DATA PGM OSC1 VSS (Общ) VDD (+Uпит)
PIC12C5xx
PIC12C671
PIC12C672
PIC12CE673
PIC12CE674
PIC12F629
PIC12F675
PDIP-8 4 6 7 2 8 1
PIC16F630
PIC16F676
PDIP-14 4 12 13 2 14 1
PIC1400 PDIP-28 14 11 12 20 9
PIC16F83
PIC16F84
PDIP-18 4 12 13 16 5 14
PIC16F627
PIC16F628
PDIP-18 4 12 13 10 16 5 14
PIC16F870
PIC16F872
PIC16F873
PDIP-28 1 27 28 24 9 8, 19 20
PIC16F871
PIC16F874
PIC16F876
PIC16F877
PDIP-40 1 39 40 36 13 12, 31 11, 32

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

Цепь PGM имеется только у микроконтроллеров с двумя вариантами режима программирования: обычным для PICmicro «высоковольтным», включаемым подачей в цепь MCLR напряжения +12 В, и «низковольтным» (low voltage programming, LVP), для которого достаточно +5 В. Режим LVP имеет некоторые отличия от обычного и учтены они далеко не во всех программах, управляющих программированием. Чтобы независимо от установленной ранее конфигурации микроконтроллера разрешить высоковольтное программирование, вывод PGM необходимо соединить с VSS (общим проводом). Учтите, это должно быть сделано до подачи на микроконтроллер напряжения питания.
Иногда рекомендуют включать в цепь PGM последовательно резистор номиналом 240 Ом. Логический уровень на соответствующем выводе микроконтроллера во время программирования останется низким, но вывод будет защищен от перегрузки в случае, если занесенная в память программа «вдруг» начнет исполняться и окажется, что в ней предусмотрена настройка соответствующего разряда порта на вывод и запись в него лог. 1.
К выводу OSC1 в рабочем режиме микроконтроллера подключают один из выводов кварцевого резонатора или другого частотозадающего элемента. Хотя тактовый генератор во время программирования заблокирован, некоторые управляющие программы переводят микроконтроллер в этот режим слишком медленно. Если в процессе переключения генератор все-таки успеет совершить несколько колебаний, исходное состояние программного счетчика микроконтроллера станет не нулевым. Это приведет к записи программных кодов не в те ячейки, для которых они предназначены. Чтобы исключить сбои по этой причине и надежно заблокировать работу тактового генератора, вывод OSC1 рекомендуют на время программирования соединить с общим проводом непосредственно или через конденсатор сравнительно большой емкости (СЗ на рис. 2), хотя «официальные» протоколы программирования этого и не требуют.
Не указанные в табл. 2 выводы микроконтроллеров во время программирования можно оставить свободными. Они находятся, как правило, в высокоимпедансном состоянии. Если же к ним все-таки подключены какие-нибудь внешние элементы, на ход и результат программирования они не повлияют.

Среди адаптеров для PICmicro, подключаемых к порту СОМ и не требующих дополнительного источника питания, популярностью пользуется так называемый JDM. Его схема, изображенная на рис. 3, содержит ряд решений «на грани фола», тем не менее адаптер зарекомендовал себя с наилучшей стороны.
В исходном варианте он предназначен для микроконтроллеров PIC12C508, PIC12C509, PIC16C84 (устаревший вариант PIC16F84) и микросхем памяти с интерфейсом I 2 С. Их программируют, вставляя в панель XS2 различным образом, как показано на рис. 4.
Имеющаяся на схеме рис. 3 перемычка S1 (в прототипе она отсутствует) позволяет соединить вывод 10 панели XS2 с общим проводом, что необходимо для программирования микроконтроллеров PIC16F628, устанавливаемых в панель аналогично PIC16F84. Адаптер пригоден и для других микроконтроллеров серии PICmicro (см. табл. 2), если предусмотреть для них соответствующие панели.

Печатная плата адаптера JDM с розеткой Х1 DB9F и расположение элементов на ней изображены на рис. 5. Плата односторонняя, ее ребром вставляют между рядами выводов розетки XS1, но лишь выводы 1—5 припаивают непосредственно к контактным площадкам. Выводы 7 и 8 соединяют с соответствующими площадками проволочными перемычками. Внешний вид готового адаптера показан на рис. 6.


В некоторых случаях с помощью JDM не удается запрограммировать восьмивыводные микроконтроллеры PIC16F629 и PIC16F675.

Причина этого — слишком большой интервал между включением напряжения питания и подачей команды перехода в режим программирования.Японский радиолюбитель, адрес электронной почты которого hoheplyohamu@hotmail.com, предложил устранить недостаток, дополнив адаптер JDM узлом, схема которого приведена на рис. 7. Цепь, шедшую ранее к выводу 2 панели XS2 (см. рис. 3), следует разомкнуть.

Адаптеры для микроконтроллеров фирмы Atmel

Схема стандартного адаптера для микроконтроллеров фирмы Atmel серий AVR (в нее входят микросхемы с названиями, начинающимися с АТ90, ATmega, ATtiny) и AT89S показана на рис. 8.

Его вилку ХР1, как и в предыдущем случае, подключают к розетке порта LPT компьютера. Перемычки между контактами 3 и 11, 2 и 12 вилки позволяют управляющей программе «опознать» адаптер. Светодиод HL1 служит для сигнализации о режиме работы устройства, но делает это лишь в том случае, если управляющая программа вырабатывает соответствующий сигнал. Напряжение + 5 В подают от внешнего стабилизированного источника, более высокое здесь не требуется.
С выводами программируемой микросхемы адаптер соединяют в соответствии с табл. 3.

Таблица 3

MK Корпус RESET MOSI MISO SCK XTAL1 XTAL2 VCC (+Uпит) GND (Общ.)
AT90S2323
AT90S2343
ATtiny12
ATliny13
PDIP-8 1 5 6 7 2 3 8 4
ATtiny15 PDIP-8 1 5 6 7 8 4
AT90S1200
AT90S2313
PDIP-20 1 17 18 19 5 4 20 10
ATtiny26 PDIP-20 10 1 2 3 7 8 5, 15 6, 16
AT90S4433
ATmega8
PDIP-28 1 17 18 19 9 10 7, 20 8, 22
AT90S8515
ATmega161
ATmega162
PDIP-40 9 6 7 8 19 18 40 20
AT90S8535
ATmega8535
ATmega16
ATmega163
ATmega32
ATmega323
PDIP-40 9 6 7 8 13 12 10, 30 11, 31
ATmega64
АТтеgаЮЗ
ATmega128
ATmega169
PDIP-64 20 12 13 11 24 23 21, 52, 64 22, 53, 64

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

В отличие от микроконтроллеров серии PICmicro, рассматриваемые приборы требуют обязательной работы тактового генератора во время программирования. Все необходимые в этом режиме операции выполняются за определенное число тактов. Поэтому в непосредственной близости от микроконтроллера должен быть установлен и подключен к выводам XTAL1 и XTAL2 кварцевый резонатор ZQ1. Никакие длинные провода здесь недопустимы.
Резонансная частота ZQ1 — не менее 4 МГц, выдерживать ее с большой точностью нет необходимости. Обычно пригоден резонатор, с которым микроконтроллеру предстоит работать в дальнейшем. Однако при слишком «резвом» управляющем компьютере, формирующем сигналы недостаточной длительности, на время программирования придется установить более высокочастотный резонатор, не превышая, конечно, допустимой для данного микроконтроллера частоты. Другой вариант — подать тактовые импульсы нужной частоты на вывод XTAL1 от внешнего генератора, оставив XTAL2 свободным.
Чертежи печатной платы рассматриваемого адаптера и схема расположения на ней элементов показаны на рис. 9. Плата двусторонняя из фольгированного стеклотекстолита толщиной 1,5 мм.

Диаметр контактных площадок с обратной стороны преднамеренно увеличен, что уменьшает риск «промазать», сверля отверстия с лицевой стороны. Размеры платы позволяют разместить ее внутри пластмассового корпуса вилки DB25M (ХР1), как показано на фотографии рис. 10.
Плату вставляют ребром между рядами выводов вилки и припаивают каждый из них к соответствующей контактной площадке. Контакты 3 и 11, 2 и 12 соединяют перемычками из изолированного провода. Выводы микросхемы DD1 (кроме 10—12, 14, 18 и 20) перед монтажом отгибают. Оставленные в исходном состоянии вставляют в отверстия и припаивают к контактным площадкам с обратной стороны платы, отогнутые — к прямоугольным площадкам со стороны установки микросхемы. Конденсатор С1 и резистор R1 —для поверхностного монтажа, хотя при необходимости можно применить и обычные малогабаритные. Светодиод, установленный со сороны, противоположной микросхеме, должен быть виден через специально просверленное в корпусе разъема отверстие.
Адаптер для программирования микроконтроллеров семейства AVR может быть упрощен путем исключения из него буферной микросхемы (DD1 на рис. 8) и соединения перемычками контактных площадок входов ее элементов с соответствующими выходными (2 с 18, 3 с 17, 4 с 16 и т. д.). Естественно, вероятность сбоев при программировании при этом возрастет.
Схема еще одного предельно упрощенного варианта адаптера показана на рис. 11. Она аналогична использованной в отладочной плате для микроконтроллера AT90S2313, выпускаемой фирмой Dontronics под названием DT-006.
Среди микроконтроллеров фирмы Atmel имеются относящиеся по структуре и системе команд к все еще популярному семейству MCS-51 и сравнительно дешевые АТ89С1051, АТ89С2051 и АТ89С4051. Их широкому распространению среди радиолюбителей препятствует одно — сравнительная сложность адаптера программирования. Дело в том, что интерфейс программирования этих микроконтроллеров — своего рода переходная ступень между параллельным и последовательным. Число задействованных в программировании выводов вынуждено ограничено, так как не может превышать общего числа выводов микросхемы, но все-таки остается значительно большим, чем при истинно последовательным интерфейсе.
Стандартный, рекомендуемый фирмой-изготовителем адаптер для этих микроконтроллеров построен на семи микросхемах средней степени интеграции. Его схему и описание (документ AN285) можно найти на Интернет-сайте фирмы по адресу http://www.atmel.com/dyn/resources/prod_documents/DOC0285.PDF или в переведенном на отечественную элементную базу виде в [5].

Более простой адаптер предложен немецким радиолюбителем DL2TM, его схема показана на рис. 12. Розетка XS1 адаптера аналогична устанавливаемой на принтерах и соединяют ее с LPT-портом компьютера стандартным «принтерным» кабелем. Программируемую микросхему вставляют в панель XS2. Команды и данные для программирования поступают от компьютера двумя потоками на входы регистров-преобразователей последовательного кода в параллельный DD1 и DD2. Коммутатор DD3 поочередно подает на входные линии порта старшую и младшую четверку разрядов ответных сообщений микроконтроллера.
Адаптер питают напряжением +12 В от внешнего источника. С помощью стабилизатора DA1 получают напряжение +5 В для питания микросхем, а ключи на транзисторах VT1—VT4 управляют уровнем напряжения на входе микроконтроллера, переводящем его в режим программирования.

Чертеж печатной платы этого адаптера приведен на рис. 13. Перемычки на стороне расположения компонентов навесные (из отрезков луженого провода). Если имеется возможность изготовить двустороннюю плату, их можно сделать печатными.

Адаптер готов, что дальше?
После того, как адаптер для подключения к компьютеру программируемой микросхемы готов, желательно его проверить. Если он рассчитан на подключение к СОМ-порту компьютера, воспользуйтесь программой ТСОМ, о порядке ее использования для проверки одного из вариантов адаптера SI Prog можно прочитать в [4].

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

Подобные программы бывают двух видов. Простейшие лишь реализуют алгоритм, нужный для загрузки кода в микроконтроллер одного или нескольких очень похожих типов. Обычно бывает достаточно, запуская такую программу или отвечая на ее запрос, указать имя файла с исходными данными. Все остальное будет сделано автоматически. Пользователю не предоставлено никаких дополнительных возможностей, иногда невозможно даже прочитать записанное и сверить его с исходными данными.
Как правило, эти программы написаны их авторами лишь для того, чтобы запрограммировать недавно выпущенную (или ту, с которой пришлось столкнуться впервые) микросхему. Для опытного программиста это иногда проще, чем искать готовую программу. Однако посторонний пользователь подобных программ рискует столкнуться с проблемами и дефектами, которые автор программы в свое время не обнаружил и не исправил, а сделать это без его участия практически невозможно.
Нужно сказать, что фирмы—изготовители микроконтроллеров тоже распространяют (в том числе на справочных компакт-дисках и на своих Интернет-сайтах) простые программы для их программирования, либо включают их в состав систем автоматизированной разработки программного обеспечения. Позволяя потенциальным потребителям быстрее освоить новый товар, это способствует увеличению спроса. Достоинство «фирменных» программ — строгое соблюдение всех предписанных режимов программирования и быстрое обновление при выявлении каких-либо дефектов в старых версиях. Недостаток — они работают, как правило, только с фирменным же (или рекомендованным фирмой) адаптером, который предлагается купить и весьма недешево. Справедливости ради нужно отметить, что многие фирмы (Atmel и Microchip в том числе) публикуют схемы своих адаптеров, не делая из них секрета. Именно к таким относятся некоторые из тех, о которых шла речь в предыдущих разделах.
Другая категория «программ программирования» — универсальные, способные работать с адаптерами различных типов и программировать большое число разнообразных микросхем памяти и микроконтроллеров. Универсальные программы снабжены, как правило, развитым сервисом и очень удобны для пользователя. Очень хорошо, если автор программы «поддерживает» ее, постоянно устраняя не замеченные ранее ошибки и расширяя список программируемых микросхем и пригодных для них адаптеров.
Из универсальных программ, распространяемых через Интернет бесплатно, наиболее популярны PonyProg и IC-PROG. Сравнивать их довольно сложно — каждая имеет свои особенности, которые кто-то сочтет достоинствами, а кто-то — недостатками. Поэтому перейдем к рассмотрению конкретных программ и способов работы с ними.

Как научиться программировать программатор коми блок

Поддерживаемые серии ЭБУ ВАЗ:

  • М74.5: I427xxxx
  • M75: I574xxxx; I674xxxx
  • M86i: применяемость к M86 определяйте по таблице серийных прошивок.
Программирование ЭБУ Микас-12, М75, М74.5, M86i
  • Модуль предназначен для чтения ЭБУ с целью создания резервной копии его содержимого и восстановления содержимого ЭБУ из резервной копии или восстановления (обновления устаревшей версии) оригинального программного обеспечения ЭБУ в том случае, если есть подозрения на наличие в ЭБУ не оригинальной (модифицированной) программы управления, использование которой не сертифицировано производителем ЭБУ.
  • программирование ЭБУ M12/M75/M74.5 должно быть произведено с помощью подключения к разъёму ЭБУ. Программирование без снятия с автомобиля, путём подключения к диагностической колодке, может вызвать повреждение предохранителей, исполнительных механизмов или компонентов внутри ЭБУ.
  • при работе с ЭБУ M86 на автомобиле доступна запись области ПО во FLASH. Обмен с ЭБУ при этом осуществляется через J2534-совместимый адаптер, подключенный к диагностической колодке.
  • по умолчанию прошивки сохраняются в сжатом безопасном формате SMS-bin, для сохранения прошивки в несжатом двоичном виде необходимо удерживать клавишу Shift при нажатии кнопки «Сохранить» в диалоговом окне выбора имени файла.
  • Для обеспечения нормальной связи с ЭБУ может потребоваться повышение напряжения питания до 15 – 16В. При чтении FLASH обращайте особое внимание на совпадение КС. При неверной КС повторите чтение FLASH с повышенным напряжением питания.
  • для установки пароля на доступ к файлу при сохранении необходимо удерживать клавишу Ctrl при нажатии кнопки «Сохранить» в диалоговом окне выбора имени файла.
  • Внимание! Перед тем как поставить ЭБУ обратно на машину, какую бы операцию вы не делали (чтение или запись) запросите идентификацию ЭБУ. Если получите ответ вроде «ЭБУ в режиме программирования», воспользуйтесь кнопкой «Завершить программирование».
  • Внимание! Несоответствие аппаратной версии и записываемого ПО может привести к невозможности работы с ЭБУ в дальнейшем.
  • Внимание! в случае отсутствия выбора J2534-совместимого адаптера или невозможности работы с ним по каким-либо причинам (например устройство не подключено или уже используется другой программой) модуль не будет выдавать сообщения об ошибке. Продолжение работы будет доступно только в режиме соединения по К‑линии.

Для определения необходимости подачи +12В на 16 контакт адаптера DiaLink отключите точки GPT и подайте питание на ЭБУ (на вкладке Диагностика нажмите кнопку Зажигание). Замерьте напряжение на точках GPT ЭБУ. Если напряжение на каком-либо из контактов составляет около 12В, подайте +12В на 16 контакт DiaLink. После этого подключите обратно точки GPT и установите связь с ЭБУ.

Окно программы содержит следующие вкладки:

Вкладка FLASH

Модуль Combiloader Микас-12/М75А/M74.5/M86i

Вкладка содержит окно просмотра буфера программы контроллера и кнопок управления:

чтение Flash из контроллера во внутренний буфер программы
запись Flash из внутреннего буфера программы в контроллер

Наличие галочки в поле «Общее действ.» позволяет производить выбранные операции одновременно с FLASH и EEPROM памятью контроллера за один сеанс связи.

Вкладка EEPROM

Модуль Combiloader Микас-12/М75А/M74.5/M86i

Вкладка содержит окно просмотра буфера программы контроллера и кнопок управления:

чтение Flash из контроллера во внутренний буфер программы
запись Flash из внутреннего буфера программы в контроллер

Наличие галочки в поле «Общее действ.» позволяет производить выбранные операции одновременно с FLASH и EEPROM памятью контроллера за один сеанс связи.

Вкладка Дополнительно

Модуль Combiloader Микас-12/М75А/M74.5/M86i

Вкладка содержит окно выбора опций работы программы:

Идентификация ЭБУ – позволяет запросить идентификационные данные ЭБУ

Модуль Combiloader Микас-12/М75А/M74.5/M86i

Идентификация файла – отображает идентификацию ЭБУ, сохранённую в файле (только для файлов формата SMS-Soft Container File).

Инициализация ЭБУ – выполняет инициализацию ЭБУ после перезаписи.

Модуль Combiloader Микас-12/М75А/M74.5/M86i

Завершение программирования – выполняет функцию завершения программирования. Необходимо в тех случаях, когда ЭБУ уже корректно записан, но по каким-то причинам не вышел из процедуры программирования.

Ввиду того, что процессор ЭБУ закрыт, обновление бутлоадера (части программы, управляющая запуском основной программы и ее обновлением) модулем не поддерживается .

Если после записи в ЭБУ прошивки, бутлоадер которой отличается от исходной, появляется «Ошибка ПЗУ», рекомендуется считать из ЭБУ прошивку (уже с исходным бутлоадером), открыть ее в редакторе CTPro, сохранить (будет пересчитана контрольная сумма) и снова записать в ЭБУ.

Внимание! Перед тем как поставить ЭБУ обратно на машину, какую бы операцию вы не делали (чтение или запись) запросите идентификацию ЭБУ. Если получите ответ вроде «ЭБУ в режиме программирования», воспользуйтесь кнопкой «Завершить программирование».

При работе с ЭБУ на автомобиле выберите вкладку FLASH и снимите галку «Общее действ.». При нажатии на кнопку «Запись» будет выдан вопрос:

Модуль Combiloader Микас-12/М75А/M74.5/M86i

Нажмите «Да» для записи ПО в диагностическом режиме.

После записи выключите зажигание, дождитесь отключения Гл.Реле, включите зажигание и подождите 10 секунд перед запуском.

Если в записываемой прошивку бутлоадер отличается от содержащегося в ЭБУ, может возникнуть «Ошибка ПЗУ». В таком случае рекомендуется записывать ПО без использования диагностического метода записи.

M75 (левый разъем)

53, 54 Масса ЭБУ
55, 56 Неотключаемое напряжение (30)
16 Отключаемое напряжение (15)
27 K‑Line

M74.5 (большой разъем [1], малый [2])

2:G2, 2:G3, 2:G4 Масса
2:H1, 2:H2 Неотключаемое напряжение (30)
1:J1, 2:F2 Отключаемое напряжение (15)
1:G3 K‑line
1:E3 CAN‑H
1:E2 CAN‑L

Микас 12 (малый разъем)

G4: масса
G2: Неотключаемое напряжение (30)
С4: Отключаемое напряжение (15)
F4: K‑line

Схема кабеля M124 (ГАЗ)

Модуль Combiloader Микас-12/М75А/M74.5/M86i

M86 (левый разъём [1], правый разъём [2])

1:L4 Масса
1:L3 Неотключаемое напряжение (30)
1:A5 Отключаемое напряжение
2:C4 K‑line
1:H4, 2:D4 CAN‑H (J2534) (один из указанных)
1:H5, 2:D5 CAN‑L(один из указанных)
1:G5, 1:C2 разрешение программирования (12В) (используемый контакт выбирается в зависимости от типа ЭБУ, объединение не допускается)

Похожие публикации