Компьютерные подсказки

Вылетает Сталкер: Зов Припяти Программа икс рей 1

Stalker lost alpha гид по прохождению

Pony Express отслеживание почтовых отправлений

Pony Express – время и сроки доставки с Алиэкспресс в Россию

Застряли посылки с Алиэкспресс со статусом Hand over to airline: что делать?

РФ (Nigma) — интеллектуальная поисковая система

Данные для семантики — Яндекс Вордстат

Пиар ВКонтакте при помощи бирж: особенности и использование

Почему я не могу отправить сообщение?

Предупреждение «Подключение не защищено» в Google Chrome по протоколу https Нарушена конфиденциальность данных яндекс браузер

Всё что известно о смартфоне Samsung Galaxy S9 Аккумуляторная батарея Galaxy S9 и мощность

Темы оформления и русификация форума SMF, а так же установка компонента JFusion в Joomla

Автоматическое определение движка форума Позже board powered by smf

Коды в игре скайрим - зелья, ингредиенты, заклинания Код на ингредиенты скайрим

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

Прошивка мк. Процесс прошивки мини-пк

Микроконтроллеры для начинающих. Видеоурок. Записываем программу в микроконтроллер (прошиваем чип)

________________________________________________________________________________________________________

Первая простейшая программа, управляющая напряжением на выводах микроконтроллера. Программирование в редакторе CodeVisionAVR. Перенос программы в память микроконтроллера (прошивка кристалла). скачать (36 МБ)


Содержание

Если видеозапись не идёт, установите flash-плеер и проверьте звуковую карту, либо скачайте материал (36 МБ). Если вместо видео - зелёный экран, переустановите flash-плеер (просто скачайте последнюю версию ). Если видео "дёргается", поставьте его на паузу и дайте немного подгрузиться. Плеер для просмотра flash-видео на домашней машине . Разверните видео на весь экран. Если напишут "Видео не найдено", "Video not found" - перезапустите видео ещё раз.

Редактор СodeVisionAVR - официальный сайт

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

2) После отдыха еще раз внимательно проверьте:
Питание - не ниже 4.5 вольт , желательно взять от USB того компьютера, к которому подключён программатор (для исключения возможных выравнивающих токов). Проверьте напряжение тестером;
Не слишком ли длинные провода от компьютера к программатору. На длинные провода наводятся помехи и увеличивается вероятность сбоя передачи данных;
Может кабель внутри оборван? Прозвоните тестером все жилы.
Не перепутали ли провода MOSI , MISO , SCK , RESET, GND , в нужное ли место воткнули?
Правильно ли настроили программатор в Setting >> Programmer ;
Project >> Configure >> C Compiler ;
Правильно ли указали тип кристалла в Tools >> Chip Programmer ;

Фьюзы не трогали? Если трогали, придётся ставить внешний кварц.
Почистили чип перед прошивкой? Tools >> Chip Programmer >> Program >> Erase Chip ;
Иногда помогает полная очистка чипа Tools >> Chip Programmer большая к
нопка Reset Chip (равносильна подаче импульса на вывод RESET);
Поставьте в самом низу окна Tools >> Chip Programmer три галочки Check Signature , Check Erasure , Verify ;
Либо наоборот - снимите эти галочки. Попробуйте и так, и так.
Если уж ничего не поможет, тогда закажите новый чип . Вытащенный откуда-то чип может оказаться и горелый, и настроенный на внешний генератор, и с выжженными пинами и тому подобное.
Да и в магазинах их иногда бракованные подсосывают, т.к. хранят чёрт знает где. Иногда бывает проще купить новый чип, чем думать, что произошло со старым (но не выбрасывайте, когда наберётесь опыта - восстановите).
Если найдёте старый компьютер - попробуйт
е сделать LPT-программатор (вдруг USB-программатор бракованный подсунули?). Проще LPT-программатора ничего нет; я его делал на десятке компьютеров - он всегда начинал работать сразу и никогда не было сбоев.
Не забывайте перед монтажом заземлять руки о батарею, о водопроводный кран или о массивную стальную конструкцию (забор, стеллаж для книг), или купите антистатический браслет или коврик (статическое электричество с рук может повредить хлюпкие микросхемы).
Наконец, самый извращенский способ - попробуйте взять другой компьютер . Бывает, что материнские платы глючат, порты на них выгорают, проводочки от контактов отходят и т п.

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

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

Итак, если программа установлена, приступим к изучению её возможностей.

Устанавливаем микроконтроллер в панель программации, подключаем программатор к компьютеру и запускаем "PICkit 2 Programmer".

При запуске программа производит опрос программатора и автоматически определяет тип программируемого микроконтроллера по идентификационным битам (так называемому device ID). Внимание! Микросхемы семейства Baseline, а также микросхемы EEPROM и KeeLOG не имеют device ID. Чтобы программа смогла работать с этими микросхемами, нужно выбрать конкретное изделие через меню "Device Family".

Если вместо такой дружелюбной картинки покажется вот такая...

То нужно проверить корректно ли подключен usb-кабель, и через меню "Tools" - "Check Communication" произвести переподключение устройства.

Открытие файла с прошивкой.

Чтобы записать программу МК в его память, необходимо выбрать в меню пункт "File" - "Import Hex".

Затем выбрать в открывшемся окне нужный файл прошивки.

После этого в окне памяти программ (Program Memory) и данных (EEPROM Data) отобразится содержимое.hex файла.

Запись программы в МК.

Теперь можно программировать МК. Для этого жмём кнопку "Write". Процесс записи занимает 3 - 5 секунд.

Об успешном выполнении процедуры записи уведомит надпись "Programming Successful".

Для большей уверенности можно провести процедуру проверки. При нажатии на кнопку "Verify" программа сравнивает данные hex-файла и данные, записанные в МК. Если верификация прошла успешно, то в окне сообщений появится надпись "Verification Successful".

Внимание! Если вы прошиваете микроконтроллеры PIC12F675, PIC12F629 и аналогичные с внутренним тактовым генератором, то при верификации может выскакивать ошибка. Дело в том, что PICkit2 Programmer (версии 6.21) сохраняет калибровочную константу, а затем записывает её в последнюю ячейку памяти МК. Понятно, что исходный файл прошивки и записанные данные в памяти будут отличаться. О калибровочной константе будет рассказано далее.

Быстрые кнопки.

Кнопка "Auto Import Hex + Write Device" понравиться тем, кто хочет "загонять прошивку" в МК нажатием одной кнопки. Один щелчок и программа предложит выбрать файл прошивки, а затем незамедлительно запишет её в МК.

Кнопка "Read Device + Export Hex File" выполняет обратную функцию - производит считывание данных с МК и предлагает сохранить файл прошивки в.hex файл.

Изменение битов конфигурации.

Биты конфигурации задают основные параметры работы МК. Это и тип генератора (кварц, RC-цепь), включение/отключение так называемого "сторожевого таймера", установка защиты от считывания памяти программ и некоторые другие. Как правило, при написании алгоритма работы МК (программы) прописываются значения, которые нужно записать в биты конфигурации. При "прошивке" программная оболочка берёт данные о конфигурации из самого файла прошивки и принудительно указывать эти данные не требуется.

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

Если нужно поменять 0 на 1, то меняем - жмём "Save". Естественно, менять надо осознанно. Повторяю, при использовании готового файла прошивки менять ничего не надо, программа сделает всё автоматически.

Выбор модели микроконтроллера.

Микроконтроллеры бывают разные. Поэтому при программировании МК бывает необходимость указать конкретную модель микроконтроллера. При выборе пункта меню "Device Family" выпадает список семейств микроконтроллеров. Есть среди этого списка и микросхемы памяти EEPROM.

В отличие от микроконтроллеров, микросхемы памяти EEPROM не определяются автоматически по команде "Tools" - "Check Communication". Поэтому при считывании/записи микросхем EEPROM в программе необходимо указать маркировку микросхемы.

В меню выбираем пункт "Device Family" - "EEPROMS" - "24LC".

Калибровочная константа.

Как известно, для работы микроконтроллера требуется тактовый генератор. Элементом, который задаёт частоту работы этого генератора, может быть внешний кварцевый резонатор , RC - цепь. Но среди микроконтроллеров PIC есть такие, которые содержат необходимые задающие цепи внутри самой микросхемы. К таким МК относятся, например PIC12F629, PIC12F675.

На заводе в память таких микроконтроллеров записывается специальная константа, которая задаёт параметры встроенного генератора на 4 МГц. Эта калибровочная константа вида 34хх записывается в последнюю ячейку памяти программ по адресу 0x3FF.

При программировании микроконтроллера эту константу легко стереть . И хоть PICkit2 Programmer версии 2.61 автоматически сохраняет эту константу и затем записывает её при программации, не лишним будет записать значение константы OSCCAL.

При необходимости константу легко указать вручную. Для этого в меню выбираем пункт "Tools" - "OSCCAL" - "Set Manually".

В поле "OSCCAL value" указываем ранее записанное значение константы. Жмём кнопку "Set" (установить).

Теперь, когда вы знакомы с основными возможностями PICkit2 Programmer, можно смело начать сборку какого-нибудь устройства на микроконтроллере, например,

Этим постом я хочу начинать публикацию цикла, в которой подробнейшим образом будут, рассматриваться основные приемы разработки, прошивки и наладки устройств на микроконтроллерах. Посты будут полезны и тем, кто собирается лишь повторять готовые устройства не заморачивая себя их разработкой и отладкой. Мы (я и администрация сайта) надеемся, что публикации этого цикла поможет многим начинающим и не очень радиолюбителям приступить к разработке и (или) повторению аппаратуры на микроконтроллерной базе. В этой статье будут собраны и систематизированы материалы из различных открытых источников, в том числе и всеми нами любимого журнала Радио. Мы коротко рассмотрим, что такое МК, и с чем его едят, зачем нужны компиляторы, и что за страшные звери, сидят в файлах с расширением *. HEX , *. bin , *. asm , и т.п., не много окунёмся в историю и наконец, создадим наш первый программатор SI - Prog (на мой взгляд очень простой надёжный универсальный и не заслуженно предаваемый забвению) и прошьём МК кроме, того на конкретном примере, разберёмся с программными оболочками РопуРго g 2000 и IS - Prog . И так приступим. Не для кого не секрет что, среди цифровых интегральных микросхем МК сегодня занимают примерно такое же место, как операционные усилители среди аналоговых. Это - универсальные приборы, их применение в электронных устройствах самого различного назначения постоянно расширяется. Разработкой и производством МК занимаются почти все крупные и многие средние фирмы, специализирующиеся в области полупроводниковой электроники. Перечень и основные параметры МК некоторых популярных семейств можно найти, например, в интернете.

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

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

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

Между тем процессы разработки программы для МК и обычной принципиальной схемы цифрового устройства во многом схожи. В обоих случаях "здание" нужной формы строят из элементарных "кирпичей”. Просто "кирпичи" разные: в первом случае - набор логических элементов, во втором - набор команд микроконтроллера.

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

Еще одна трудность - недостаточное количество полноценной технической документации и справочной литературы на русском языке. Большинство публикаций подобного рода в периодических изданиях и особенно в русскоязычном Интернете, зачастую не более чем подстрочные переводы английских оригиналов. Причем переводчики, иногда мало знакомые с предметом и терминологией, истолковывают "темные” места по-своему, и они (места) оказываются довольно далекими от истины. Практически отсутствуют русскоязычные программные средства разработки и отладки программ МК.

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

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

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

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

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

Если речь идет о замене МК близким по структуре и принадлежащим к тому же семейству или о замене устаревшего изделия современным аналогом, адаптировать программу, как правило, удается. Фирма Microchip и ATMEL даже включает в справочные данные своих МК рекомендации по такой адаптации. В общем случае полноценный перенос программы на другой МК требует наличия не только публикуемой обычно "прошивки" РПЗУ, а и полного исходного текста, желательно с комментариями программиста. Листинг, полученный в результате дизассемблирования "прошивки",далеко не полноценный эквивалент. От программиста потребуется значительно более высокая квалификация, чем достаточная для разработки "с нуля", не меньшими будут и трудозатраты.

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

Наш дальнейший рассказ построим на конкретном примере. Как то недавно потребовался счетчик, способный подсчитывать пересечения неким предметом определенного рубежа в одну и другую стороны. Полистав номера журнала "Радио”, нашел подходящее устройство, но оно показалось слишком сложным (11 микросхем, в том числе РПЗУ большого объема) и к тому же не обладало некоторыми необходимыми функциями, в частности, возможностью предварительной установки показаний счетчика и запоминания его состояния после выключения питания. Появилась идея изготовить нужный прибор на МК. По причинам, изложенным далее, был выбран МК PIC16F84 (PIC16F84А). В результате родилась схема устройства (рис. 1 ),


содержащего всего две микросхемы. В устройстве допустимо применение микроконтроллера PIC16F84 и PIC16F84 A с любыми предельной частотой, типом корпуса и рабочим интервалом температур (об этих параметрах говорят цифровые и буквенные индексы после дефиса в обозначении микросхемы, например, -101/Р). А если совершенствование программы не предполагается, можно использовать и дешевый однократно программируемый аналог PIC16CR84 если конечно его удастся найти.

Датчики перемещения предмета - транзисторные оптроны с открытым каналом АОТ147Б (U1, U2). Нагрузкой их фототранзисторов служат имеющиеся в МК внутренние резисторы. Допустимо использовать и оптопары, состоящие из отдельных свето и фотодиодов (фототранзисторов). Оптические датчики при необходимости заменяют любыми другими: магнитными, контактными, индуктивными. Важно лишь, чтобы при их срабатывании на соответствующих входах МК изменялись логические уровни.

В устройстве применен четырехразрядный семи сегментный светодиодный индикатор СА56-11SR фирмы Kingbright. Возможно также использование любых семи сегментных светодиодных индикаторов с общим анодом, например, четырех отечественных АЛС324Б. Набор резисторов DR1 можно заменить семью обычными резисторами сопротивлением 300 Ом. Программа, которую необходимо занести в память МК DD2, чтобы превратить устройство в счетчик, приведена в табл. 1. При включении питания во всех разрядах индикатора зажигаются нули. После каждого выполнения цикла "затенен U1" - "затенены U1 и U2" - "не затенен U1” - "не затенен U2" показания увеличиваются на единицу. Счетчик реверсивный, поэтому при срабатывании датчиков в обратном порядке показания на столько же уменьшаются. Максимальное число - 9999, после него следует ноль.

В следующей статье цикла будет о рассказано о том, как создавалась и отлаживалась схема и программа счетчика, об её совершенствовании и введении дополнительных функций. Этим примером будут проиллюстрированы основные возможности МК PIC16F84 и приемы работы с бесплатными средствами программирования и отладки. Они объединены в пакет MPLAB, последнюю версию которого можно "скачать" с Интернет-сайтов www.microchip.com или www.microchip.ru. Или со станицы форума АЛЕКСАНДРА там же подробно описано как его установить.

Для того чтобы занести коды из табл. 1 во внутреннюю память МК, необходим программатор. Однако он не "умеет" читать коды с интернет страниц, поэтому прежде всего требуется создать в компьютере файл с этими кодами в формате, "понятном" программатору. В табл. 1 они приведены в так называемом НЕХ-формате, разработанном фирмой Intel и ставшем фактическим стандартом для программирования ПЗУ различного назначения. (Нужно сказать, что других одноименных форматов, например, Microchip HEX, не существует, используются подобные названия лишь по недоразумению). Аналогичные форматы, разработанные другими фирмами, не нашли широкого применения и предназначены, как правило, лишь для аппаратных и программных средств собственной разработки, в большинстве своем "понимающих" и Intel НЕХ-формат.

Коды вводят в компьютер с помощью любого текстового редактора, в том числе Microsoft Word, точно в том виде, в котором они приведены в табл. 1 .


Если имеется сканер и программа распознавания текста, например, FineReader, можно воспользоваться ими. Но в последнем случае считанные данные придется сверить с оригиналом, так как автоматическое распознавание не идеально (возможны ошибки). Учтите, что в НЕХ файлах применяются только символ двоеточия, цифры и латинские буквы A - F. Каждую строку начинают двоеточием в первой позиции и заканчивают нажатием на клавишу ENTER. Пробелы не допускаются. Закончив ввод и проверив коды, сохраните файл в режиме" Текст DOS" или "Только текст”, присвоив ему любое имя с расширением *.hex.

Нередко коды программ публикуют в виде так называемого "дампа памяти". Это более удобная для зрительного восприятия (чем в НЕХ-формате) таблица. Она состоит из строк, начинающихся шестнадцатеричным адресом (обычно четырехразрядным), за которым через пробелы следуют двухразрядные шестнадцатеричные коды, хранящиеся в следующих одна за другой ячейках (байтах) памяти. Адрес в начале строки относится к первой из ячеек, а всего их обычно 16. Для сравнения в табл. 2 приведен дамп, содержащий те же данные, что и табл. 1 . HEX и дамп легко преобразовать один в другой следующим образом (см. табл. 3 ).

Первые два знака после двоеточия - число байт информации в строке. В данном случае их 16 (10 H ). Далее следует адрес первого байта (0020Н), за ним - двухразрядный код назначения строки:

0 - строка содержит данные;

1 - завершающая строка файла (:00000001 FF); она не содержит данных, число байт и адрес в ней - нулевые. Во многих случаях для опознания строки как завершающей достаточно нулевого числа байт;

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

3 - в области данных находятся четыре байта стартового адреса программы в обычном для IBM PC формате CS:IP;

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

5 - то же, что 04, но задает абсолютное значение адреса старта программы.

Строки с кодами назначения 02 и 04 используют, если необходимо задать адреса, превышающие 0FFFFH. Для программирования МК с памятью небольшого объема (таких, как PIC16F84) в них нет необходимости. Тем не менее, иногда подобную строку, задающую нулевой начальный адрес, помещают в начало НЕХ-файла. Ее можно безболезненно удалить.

Строки с кодами 03 и 05 встречаются весьма редко, поскольку адрес старта программы МК чаще всего определяется архитектурой последнего и не может быть изменен. У МК семейства PICmicro он нулевой.

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

Первоначально НЕХ-формат предназначался для хранения восьмиразрядных данных. Коды большей разрядности разбивают на соответствующее число байтов, которые записывают в файл в порядке от младшего к старшему. Например, каждой из 14-разрядных команд МК ИС16F84 отводят по два байта, причем два старших двоичных разряда второго байта остаются свободными (код в этом байте не превышает 3FH).

В результате адреса в НЕХ-файле удвоены по сравнению с действительными адресами команд программы. Например, строка

:080008008C0003088D000408C0 описывает такую последовательность программных кодов;

Адрес Код

4 008С

5 0803

6 008D

7 0804

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

Описанный формат представления многоразрядных данных часто называют Merged (склеенный). Изредка встречается другой вариант: НЕХ-файл разбивают на два, один из которых содержит все младшие, а второй - все старшие байты слов программы. Такой формат называют Splitted (расщепленный).

Следует учесть, что файл может не задавать сплошной последовательности кодов. Например, между кодами в первых двух строках табл. 1 остается незаполненным промежуток в шесть байт (три команды программы). Никакой информации об их содержимом НЕХ-формат не дает. В зависимости от алгоритма работы программатора они остаются в незапрограммированном исходном состоянии или в них сохраняются коды, записанные ранее. В табл. 2 неиспользованные ячейки заполнены нулевыми кодами.

Как известно, МК содержат постоянную память различного назначения: FLASH либо однократно программируемую для программы, EEPROM для данных, специальные ячейки конфигурации и идентификации МК. Информацию, предназначенную для этих областей, нередко хранят в отдельных файлах и при

программировании приходится вручную указывать, куда именно ее записать. Но в семействе PICmicro принято решение, позволяющее объединить все в одном НЕХ-файле. Упомянутые выше области, находящиеся для процессора МК в разных адресных пространствах, с точки зрения программатора объединены в одно. Для PIC16F84 распределение следующее (в скобках - "байтные" адреса):

0-3FFH (0-7FFH) - коды программы; у МК с памятью большего объема эта область может быть расширена до 1FFFH (3FFFH) ;

2000Н-2003Н (4000Н-4007Н) - коды идентификации;

2007Н (400ЕН, 400FH) - слово конфигурации;

2100Н-213FH (4200Н-427FH) - коды, записываемые по адресам 0-3FH EEPROM.

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

ПРОДОЛЖЕНИЕ СЛЕДУЕТ >>>>>

ВСЕ ВОПРОСЫ НА

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

Запускаем программу CVAVR

1) Сначала нам нужно настроить порт, заходим в меню Settings -> Programmer.

Откроется окошко, все настройки выставляем как на рисунке ниже

Откроется следующее окно:

Ничего лишнего в этом окошке не трогаем, галочки не ставим и ничего не переключаем.

3) Выбираем нужный нам микроконтроллер из выпадающего меню, я выбрал ATmega8. Если у вас в названии микроконтроллера после ATmegaX стоит буква, к примеру V или L, то в списке выбирайте такой же МК, с такой же буквой.

4) Теперь нам нужно открыть файл прошивки, в этом окошке нажимаем File -> Load FLASH

5) Откроется окно, где нужно будет выбрать файл прошивки с расширением.hex, кстати, не забудьте внизу из выпадающего меню "Тип файлов" выбрать этот тип файла.

6) Файл EEPROM выбираем точно так-же, для этого нажимаем меню File -> Load EEPROM, расширение этого файла.eep, если к вашему проекту такой файл не прилагается, значит нужно прошивать только FLASH т.е. .hex.

Имейте ввиду, что процессы прошивки программы, фьюзов
и ПЗУ (EEPROM) это самостоятельные отдельные процедуры.
И рекомендуется шить сначала программу, затем ПЗУ, затем фьюзы, в принципе что у нас и происходит, когда мы загружаем все файлы для прошивки, и выставляем фьюзы в окошке.

7) Итак, файлы прошивки мы загрузили, теперь нам нужно выставить фьюзы, для моего проекта фьюзы следующие: BOOTSZ1, BOOTSZ0, SUT1, CKSEL3, CKSEL2, выставляем их.

8) Затем ставим галочку Program Fuse Bit(s), если вы не поставите галочку – фьюзы не будут записываться.

Чтобы проверить, видит ли наша программа программатор, подключенный к LPT порту, нажимаем кнопку Reset Chip, на программаторе должны мигнуть светодиоды чтения/записи. Если светодиоды не мигают, значит нам нужно проделать операции после пункта 6, описанные в предыдущей части статьи.

9) Теперь можно прошить МК, нажимаем кнопку Program All, и начнется процесс прошивки.

Если вы загружали только файл прошивки FLASH, .hex, то по ходу прошивки программа предложит загрузить файл EEPROM, жмем NO, т.е. НЕТ.

После чего пробегут еще 2 полоски и процесс прошивки завершится

Во время прошивки МК нельзя выключать или перезагружать ПК!

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

11) Чтобы стереть данные с МК нажимаем Program -> Erase Chip.

Решение некоторых проблем с AVR

C разными программаторами, и с разными программами возникают разные ошибки, но некоторые ошибки между собой очень похожи, и устраняются одинаково. Во первых микроконтроллеры подключайте строго к указанным выводам: RESET, VCC, GND, MOSI, MISO, SCK. Если спутаете вывода, или забудете припаять один из контактов, МК не прошьется. Случайно МК в панельку можно поставить спутав вывода, т.е. задом на перед, от этого МК не сгорит, но и не прошьется конечно тоже. Напомню еще раз, что у некоторых МК, например в ATmega 64 и 128 вывода MOSI и MISO не применяются для ISP программирования, вместо них вывода MOSI подключают к ножке PE0, a MISO к PE1. Напряжение питания не должно быть ниже чем нужно, иначе МК не будет программироваться, программы будут выдавать ошибки о том, что не могут обнаружить МК.

Записывать левые программы, например программу, предназначенную для ATmega8 в ATmega48 нельзя. Бывает, что вы запрограммировали МК и файлы прошивки удалили с компьютера, а найти прошивку чтобы прошить другой МК не можете найти. В таких случаях просто считываете программу с микроконтроллера, например с помощью CVAVR и сохраняете его на ПК, затем этой прошивкой прошиваете другой МК.

Если вы случайно запрограммировали какой то фьюз, после чего МК залочился, вспомните, что это был за фьюз, некоторые МК с неправильно зашитыми фьюзами удается восстановить, есть несколько способов как это сделать. На К155ЛА3 можно собрать генератор чтобы восстановить МК с запрограммированным RSTDSBL, если вы выставили фьюзы на работу от внешнего генератора, подавая сигнал на вывод XTAL1 некоторые умудряются таким способом восстановить МК. Также фьюзами можно выставить тактирование от внешней RC цепочки. В таком случае придется собрать RC цепочку, чтобы опять запустить МК. Ещё есть фьюзы DWEN, SPIEN..., установив которые, вы отключите возможность пользоваться ISP программатором, тут поможет только параллельный программатор, другие программаторы (к примеру тритон) или приборы, которые встречаются на просторах интернета.

Вам также будет интересно:

Читы и консольные команды для Counter-Strike: Global Offensive Команда в кс го чтобы летать
В этой статье мы рассмотрим некоторые из наиболее полезных и забавных консольных команд в...
Arduino и четырехразрядный семисегментный индикатор Семисегментный индикатор 4 разряда распиновка
В сегодняшней статье поговорим о 7-сегментных индикаторах и о том, как их «подружить» с...
«Рабочие лошадки» Hi-Fi: собираем бюджетную систему Хороший бюджетный hi fi плеер
Выбор плеера - это сложный процесс, иногда человек желает получить не просто коробочку,...
Как правильно пользоваться сургучными печатями
На самом деле, сургуч - это смесь смол, окрашенная в определенный цвет. Если у вас на руках...
Лагает fallout 4 как снизить графику
10 ноября состоялся релиз долгожданной игры на ПК, PlayStation 4 и Xbox One, и постепенно...