В прошлом уроке мы прошивали контроллер Атмега 8 через Ардуино. Кроме того научились выбирать подходящий под наши задачи контроллер и выставлять фьюзы прямо в оболочке Arduino IDE. В принципе ничего сложного в прошивке не оказалось и теперь вы можете прошивать практически любой контроллер AVR с помощью Ардуино. Но что делать если вы скачали прошивку не в файле с расширением INO (т.е. Ардуиновский файл) а просто hex-файл. Если вы попробуете открыть такой файл в Ардуино IDE то он у вас просто не откроется. Вы спросите- зачем тогда вообще hex файлы если они не подходят к Ардуино? Отвечу так- эти файлы появились задолго до появление Ардуино как широкой платформы для радиолюбителей и программистов. Раньше такими файлами (а hex-файл это ни что другое как сжатая (скомпилированная) программа) через программаторы заливали прошивки в микроконтроллеры. Впрочем этим занимаются и сейчас. Очень много людей предлагают такие файлы своих самоделок как платно так и бесплатно но факт не этом а в том что Ардуино их просто не берет, хотя сама оболочка с легкостью может компилировать hex-файл которым вы можете с легкостью поделиться со своими друзьями, знакомыми и т.д.
Самый простой метод получить hex-файл в Ардуино такой:
- Компилируете свой файл так чтобы не было ошибок и он работал на Ардуино.
- Открываете проводник (комбинация клавиш Win+E) или Пуск- Выполнить. Это не важно какой путь здесь вы выберете- результат будет одинаковый.
- Вводим или копируем отсюда команду %temp%\ в строку адреса.
- Ищем папку формата buildXXXXXXXXX.tmp с последней датой изменения. Открываем её.
- В данной папке будет много папок и файлов но вам нужен файл с расширением *.hex. Это и есть Ваш файл!
Совершенно ничего сложного!
Теперь этот файл включает в себя все библиотеки нужные для работы вашей программы и вообще- это все в одном! Очень удобно! Сами знаете что при программировании на IDE приходится подключать библиотеки, а так как библиотек развелось огромное множество, то приходится выбирать нужную. Но люди инертные создания и многим не нужно 5-10 библиотек, например, OneWire. Многие в интернете выдают уроки где предлагают качать разные библиотеки но я, такой же как и большинство, к этому отношусь резко негативно. Есть стандартные библиотеки и не нужно делать кучу абсолютно одинаковых по функционалу но разных по названию и методам библиотек. Глупо это.
hex-файл тем и хорош что просто бери его и пользуй! Ладно, это все лирика. Перейдем непосредственно к программированию контроллеров.
Для программирования опять же можно использовать Ардуино как программатор ISP. Можно воспользоваться любым другим, просто в любой программе для прошивки нужно указать тип программатора. На примере программы Sinaprog я постараюсь подробнее описать процесс программирования. Естественно для начала скачать SinaProg2.1.1. Она не требует установки и работает сразу. Теперь нужно подключить правильно подсоединенный микроконтроллер к программатору к USB компьютера. Повторюсь что программатор может быть любой. Может быть я буду повторяться т.к. руководств по данной программе много но все таки может вы найдете здесь что то новое.
Внешний вид программы представлен на картинке. В программе минимум кнопок и в принципе собрано все самое необходимое для программирования МК. Начнем разбирать программу по порядку (может это и покажется ненужным но подчас элементарное незнание назначений кнопок заставляет биться буквально головой о стену).
- Hex file— путь к hex файлу который вы намереваетесь залить в МК. Открывается меню выбора файла при нажатии раскрытой папки.
- Знак больше >… Хммм… Как сказать. Это монитор состояния программы. При нажатии на данную кнопку справа выплывет большое окно которое будет показывать текущее состояние задач программы. Пример использования будет немного ниже.
- Flash— собственно программирование МК. Есть три кнопки, переводятся по порядку как «Программировать», «Проверить», «Считать». Т.е. из данного меню вы можете сделать такие действия с МК. При программирований МК запишется (не забудьте про назначение фьюзов). При проверке), обычно после записи, можно, а лучше принять за правило, проверить прошивку в МК с исходным кодом hex файла. И, наконец, можно просто прочитать прошивку с указанного МК и после сохранить её.
- EEPROM— действия с энергонезависимой памятью. Т.е. вы можете записать содержимое памяти в МК если в вашем приложении используются ячейки внутренней памяти МК. С памятью можно производить те же действия что и с Flash.
- Device— переводится как «устройство» т.е. МК на который вы БУДЕТЕ ЗАПИСЫВАТЬ ПРОШИВКУ. Внимательно посмотрите на выпадающий список и выберите Ваш МК. После того как вы выбрали МК попробуйте нажать кнопку Search справа. Вот в этом случае очень удобно использовать монитор состояния (см. пункт 2). Из сообщения понятно что Sinaprog не смог найти программатор USBAsp. Поэтому двигаемся дальше
- Fuses— это и есть те самые фьюзы которые мы можем и должны записать в МК чтобы он корректно работал. При нажатии кнопки Advanced (переводится как «расширенный») появится такое окно
в котором нужно указать значения фьюзов. Здесь все тоже довольно просто. Единственное что нужно- быть предельно аккуратным с настройками фьюзов. Для этого очень удобно использовать калькулятор фьюзов от Андрея Деменева. Интерфейс настолько прост, все действия с фьюзами кратко но понятно описаны так что ошибиться довольно трудно. Постарайтесь не использовать фьюз RSTDISBL если можно без него обойтись. Этот фьюз отключает вывод RESET МК и, если вы потом захотите перепрошить МК, то у вас ничего не получится т.к. как вы закроете доступ к программированию МК именно отсутствием сигнала RESET. Вы совершенно ничего не сможете сделать с МК. Остается только сбросить его с помощью AVR Doctor. Но бывает что нужно защитить МК от копирования и т.д. В данном случае можно включить RSTDISBL и прошить МК. Затем проверить на работоспособность и уже пускать в готовое изделие. Но все равно работать с данным фьюзом следует предельно аккуратно. После выбора нужных опции в калькуляторе фьюзов следует внести значения регистров в соответствующие поля Sinaprog.
Это делается таким образом чтобы значения верхних регистров калькулятора совпадали со значением верхних регистров Sinaprog, нижних калькулятора- нижних Sinaprog и т.д. Будьте внимательны. Буквально одна неправильная буква или цифра может заблокировать МК. Ну и кнопка Program в самой Sinaprog- программирует фьюзы МК.
- И самый последний пункт- Programmer — программатор. Выбираете из списка Ваш программатор, порт, к которому он подключен, скорость передачи данных (все поля перечислены по порядку). Я незнаю почему так сделано но я бы сначала ставил программатор п.1, затем чип п.2 и т.д… Было бы более логично. Здесь, все иначе.
И, наконец, сам алгоритм работы по программированию МК.
- Устанавливаете МК в программатор (неважно как- в панельку программатора, на макетной доске, припаиваете провода и т.д.).
- Подключаете программатор к компьютеру.
- Запускаете Sinaprog.
- Выбираете программатор (делаете все действия предыдущего п.7)
- Выбираете чип (предыдущий п.5). Нажимаете Search и открываете монитор состояния (предыдущий п.2). В случае удачного обнаружения программатора и чипа выдается сообщение что все в порядке и мы готовы к прошивке! Иначе- выдается сообщение что что-то не найдено и не работает. В таком случае проверьте правильность соединения МК и программатора. Данный пункт рекомендую использовать ВСЕГДА! Таким образом вы сможете избежать множество ошибок и недоразумений.
- Выбираете hex-файл и программируете МК.
- Если необходимо- прошиваете EEPROM.
- И, наконец, если необходимо, прошиваете фьюзы.
Все. Отключаете программатор и пробуете МК на уже подготовленном устройстве! Но что делать если вы решили поменять прошивку, добавить функций, изменить функционал, наконец просто использовать данный МК для другой цели?
Если вы не закрыли (залочили по радиолюбительски от англ. Lock- закрывать) МК то стереть и перепрограммировать его заново можно опять же с помощью Sinaprog. Заходите в расширенное меню настройки фьюзов (естественно после того как выбрали программатор и чип) и выбираете Chip Erase (стереть чип). После данной процедуры чип будет сброшен к заводским настройкам и вы сможете его снова перепрошить нужной вам прошивкой.
На этом урок по работе с Sinaprog можно считать законченным. Следующий урок будет по программированию МК Atmega с помощью AVR Studio. Программа оооочень навороченная. Большинство радиолюбителей используют её максимум на 5-10% (впрочем как и я). Может она вам будет и не нужна но знать этого зверя в лицо- просто нужно. Засим откланиваюсь- всем спасибо.