Работа с микроконтроллерами: прошивка программатором и чистый «Си»
В этой статье я расскажу о том, как программировать микроконтроллеры без использования Arduino. Мы будем использовать программатор AvrISP STK500 для программирования контроллера ATtiny84.
Нам понадобится
Подключаем питание
Arduino мы не используем, поэтому обо всем нам придется думать самостоятельно. И первое, с чем необходимо разобраться — питание. Мы будем использовать преобразователь L7805, обладающей следующими характеристиками:
Теперь нам надо узнать схему подключения этого преобразователя. Ее мы найдем на странице 3 даташита.
Помимо самого преобразователя, мы видим еще 2 конденсатора — входной Сi и выходной Сo. Входной конденсатор необходим для того, чтобы сгладить пульсации на входе в случае удаленности L7805 от источника. В нашем случае длина соединительных проводов не будет превышать 15 см, поэтому входного конденсатора у нас не будет. Зато будет выходной, поскольку мы хотим «кормить» наш контроллер стабильным питанием.
Распиновка
Необходимо знать назначение ножек преобразователя. Это описано на 2-й странице даташита.
Схема
С учетом всего вышеописанного, получается схема для организации питания.
Программатор
В качестве программатора мы использовали AvrISP STK500 от Seeed Studio. Для его работы под Windows и Mac OS необходимы драйверы. Их можно скачать с официального сайта. Пользователям Linux устанавливать ничего не нужно — программатор будет сразу готов к работе.
Подключение к контроллеру
Распиновка разъема программатора такова:
Важно! Это распиновка разъема программатора, если смотреть на него сверху (отверстиями от себя). Не перепутайте!
Разъем программатора необходимо подключить к микроконтроллеру. Можно использовать как 10-пиновый разъём, так и 6-пиновый. Без разницы. Соединим проводами соответствующие пины, т.е:
10-пиновый ICSP | ATtiny84 | |
---|---|---|
Reset | 5 | 4 |
MOSI | 1 | 7 |
MISO | 9 | 8 |
SCK | 7 | 9 |
Прошивка
Напишем код прошивки на чистом «C», которая заставит светодиод мигать. Использование ШИМ-сигналов и считывание аналоговых сигналов на чистом «C» не так тривиальна, и может являться темой отдельной статьи, поэтому остановимся пока на простейшем примере.
После скетчей Arduino, код малопонятен, правда? Ничего, сейчас я объясню, что да как. В первых двух строчках мы подключаем необходимые библиотеки, чтобы воспользоваться такими штуками, как DDRA , PORTA , _delay_ms .
Что же такое DDRA ? Это регистр микроконтроллера, управляющий направлением работы порта А. Он содержит в себе 8 бит. Если установить какой-то бит в 1, то пин с соответствующим номером станет выходом.
PORTA — тоже регистр, но он содержит в себе данные порта А. Если мы хотим на вывод номер 2 записать логическую единицу, то мы должны поместить 1 в соответсвующий бит регистра.
А _delay_ms — функция задержки. Исходя из этого можно составить таблицу соответствия:
Arduino | C | |
---|---|---|
Направление | pinMode(led, OUTPUT); | DDRA = 1 |
Значение | digitalWrite(led, HIGH); | PORTA = 1 |
Задержка | delay(1000); | _delay_ms(50); |
Однако, самым важным различием кода является то, что в программе на С нет разделений функций setup и loop . За все это отвечает функция int main(void) . И она выполняется всего 1 раз! А мы хотим, чтобы наш светодиод моргал не один раз, а постоянно. Как раз для этого и используется бесконечный цикл while (1==1) .
Поэтому легко сделать вывод, что этот цикл и есть аналог функции loop() в Arduino. А то, что до него — аналог функции setup() .
Далее начинается самое интересное. Нам нужно скомпилировать и загрузить прошивку. Однако, в зависимости от вашей операционной системы, методика будет различаться.
Mac OS X
Первым делом необходимо скачать и установить CrossPack for AVR Development. Это даст нам все необходимые инструменты. CrossPack состоит из двух частей.
Первая нам нужна для написания кода и создания файла прошивки, а вторая — для заливки прошивки в контроллер.
Проект создается в три шага.
В результате будет создано следующее дерево файлов.
На данном этапе нас интересует содержимое файла Makefile . В нем содержится информация о том, что вообще мы используем: какой контроллер, программатор. Это все описывается в строках с 20 по 24:
Пройдемся по строкам:
Это автосгенерированный make-файл, поэтому нам необходимо вручную его подправить. Править будем строку DEVICE у нас же микроконтроллер attiny84 и строку FUSES . А вот с ней все сложнее. Fuse-биты, или просто «фьюзы» — два (иногда три) особых байта, в которых содержится фундаментальая конфигурация работы контроллера. Очень важно правильно их задать.
Внимание! Задание неверных fuse-битов может привезти к тому, что микроконтроллер перестанет работать и вернуть его к нормальной жизни может быть либо очень сложно либо невозможно! Воспользеумся сайтом AVR Fuse Calcuator.
Сначала из выпадающего списка выберем нужный нам контроллер (ATtiny84).
И затем укажем необходимые опции, которые нам нужны. Сейчас для нас важны 2 вещи: сохранение возможности прошивать контроллер через SPI и сохранение его работоспособности без внешнего резонатора, поэтому выбираем соответствующие пункты, а остальные оставляем по умолчанию.
Видим, как поменялись сгенерированные значения.
Внесем изменения в Makefile.
Прошивка
Она происходит в 2 этапа.
Сначала необходимо перейти в папку firmware и выполнить команду make . Если ошибок нет, то результат выполнения команды будет таким:
Эта команда сделает из нашего исходника main.c файл, пригодный для заливки в контроллер — main.hex .
Второй этап — как раз заливка прошивки. Делается это с помощью команды make flash . Ее нормальный вывод выглядит следующим образом:
Все, прошивка контроллера завершена.
Windows
Здесь все проще.
Первым делом необходимо скачать и уствновить среду разработки для AVR — Atmel AVR Studio 4. А вторым — Atmel AVR Toolchain.
После запуска среды, необходимо создать новый проект.
Затем указать имя, расположение и то, что мы хотим использовать С ( GCC ).
Третий шаг — настройка отладчика.
На этом все, проект готов к использованию. Теперь необходимо написать и сохранить исходник, который мы уже обсудили.
В результате общий вид среды разработки выглядит вот так:
Теперь необходимо подключиться к программатору. Делается это с помощью нажатия на кнопку con .
В качестве Platform выбираем STK500 , а в Port — Auto . Затем нажимаем Connect.
Если все правильно, то в открывшемся окне выбираем вкладку Main и нажимаем в ней на кнопку Read Signature .
Строка Reading signature from device .. 0x1E, 0x93, 0x0C .. OK! говорит о том, что все хорошо и сигнатура успешно прочиталась. Сигнатура — это своего рода позывной микроконтроллера, которым он сообщает собственную модель.
Это окно нельзя закрывать, иначе соединение с программатором будет потеряно. Просто сверните его.
Теперь нажмем Build → Build . Это заставит программу скомпилироваться. Прошьем контроллер с помощью кнопки Write Flash Memory Using Current Settings — это заставит скомпилированную программу загрузиться в память микроконтроллера.
Заключение
Мы собрали простейшее устройство мигалку, но сделали это на низком уровне. С использованием программатора и «продвинутой» среды разработки, а не Arduino.
Разобравшись в премудростях программирования микроконтроллеров на чистом «Си», вы сможете выжимать из них максимум возможности, затрачивая при этом минимум места и денег.
STK500: создание программатора своими руками, принцип его работы
2.1 Распаковка набора
В комплект поставки набора входят:
- Оценочная плата стартового набора STK500
- Соединительные шнуры для STK500:
– 10-проводной шнур для портов ввода-вывода и параллельного программирования – 2 шт.
– 6-проводной шнур для внутрисистемного программирования – 1 шт.
– 2-проводной шнур подключения УАПП и DataFlash – 4 шт. - 9-выв. шнур интерфейса RS-232
- Шнур питания
- Компакт-диск с документацией и программным обеспечением
- Образец микроконтроллера AT90S8515-8PC
2.2 Системные требования
Для нормальной работы с набором требуется ПК, отвечающий следующим требованиям:
- Процессор 486 (рекомендуется Pentium®)
- 16 Мбайт ОЗУ
- 12 Мбайт свободного места на диске (для AVR Studio®)
- Операционные системы Windows® 95/98/2000/ME и Windows NT® 4.0 и более новые версии
- Порт RS-232, 115200 бод (COM-порт)
- Источник постоянного напряжения 10 – 15В, 500 мА.
2.3 Быстрый старт
Набор STK500 поставляется с микроконтроллером AT90S8515-8PC на панели с маркировкой SCKT3000D3. Исходные установки перемычек обеспечивают работу микроконтроллера совместно с тактовым генератором и стабилизатором напряжения, установленных на плате STK500.
В микроконтроллер запрограммирована тестовая программа, которая управляет светодиодами. Данная программа аналогична примеру прикладного кода, описываемого в разделе 9. Для запуска тестовой программы в AT90S8515 необходимо подключить светодиоды и кнопки, а затем подать питание.
Используйте 10-проводной шнур из комплекта для подключения штырьков разъема с маркировкой “PORTB” с разъемом отмеченного как “LEDS”, а затем аналогично соедините разъемы “PORTD” с “SWITCHES”. Результат выполнения соединений представлен на рис.2.1.
Рисунок 2.1 – Начальные установки набора STK500
Для работы требуется внешний источник питания 10 – 15В. Входная схема выполнена как двухполупериодный выпрямитель, поэтому, STK500 распознает полярность приложенного напряжения. Если к центральному штырьку разъема приложен положительный полюс источника, то это может привести к невозможности выключения STK500, т.к. переключатель питания разрывает цепь GND, а она может быть организована через шнур порта RS-232 или через другое альтернативное подключение. Подключите шнур питания между источником питания и STK500. Подайте 10-15В постоянного напряжения к шнуру питания. Перемещение переключателя питания позволяет включить или отключить STK500. Свечение красного светодиода сигнализирует о подаче питания, а состояние статусного светодиода будет изменяться от красного к желтому, а затем к зеленому. Зеленый цвет светодиода сигнализирует о наличии напряжения VCC (питание микроконтроллера). Программа в AT90S8515 начинает работать, изменяя состояние светодиодов при нажатии на кнопки.
Стартовый набор может настраиваться на различные частоты тактирования и источники питания. Полное описание установок перемычек описано в разделе 3.8.
2.3.1 Соединение аппаратных средств
Рисунок 2.2 – Подключение к STK500
Для программирования AT90S8515 подключите 6-проводной шнур из комплекта между разъемами ISP6PIN и SPROG3 (см. рис. 2.1). В разделе 3.7.1 описывается подключение шнура программирования.
Соедините шнур последовательной связи между разъемом с маркировкой “RS232 CTRL” на оценочной плате и разъемом COM-порта персонального компьютера как показано на рис.2.2. Проинсталлируйте программу AVR Studio на персональном компьютере. Инструкции по инсталляции и использованию AVR Studio приведены в разделе 4 и разделе 5, соответственно. После запуска AVR Studio автоматически определяется COM-порт с подключенным STK500.
2.3.2 Программирование целевого AVR-микроконтроллера
STK500 управляется из AVR Studio не ниже версии 3.2. AVR Studio – интегрированная среда проектирования (IDE), предназначенная для разработки и отладки AVR-приложений. AVR Studio содержит средства управления проектом, редактор исходных файлов, симулятор, интерфейс внутрисхемного эмулятора и интерфейс программирования для STK500.
Для того, чтобы запрограммировать hex-файл в AVR-микроконтроллер, выполните команду “STK500” из меню “Tools” программы AVR Studio.
Выберите тип AVR-микроконтроллера из раскрывающегося списка на закладе “Program” и укажите путь к записываемому intel-hex-файлу в поле «Input HEX File».
Нажмите кнопку “Erase Device” (стирание), расположенную на закладке программирования “Program”. Статусный светодиод светиться желтым цветом во время программирования, а после успешного завершения загорается зеленым цветом. После выявления ошибки программирования светодиод загорается красным цветом. См. рекомендации по разрешению проблем в разделе 7.
Рисунок 2.3 Меню программирования STK500 в AVR Studio
Полное описание по использованию интерфейса STK500 в AVR Studio приведено в разделе 5.
STK500: создание программатора своими руками, принцип его работы
STK500: Что же он умеет и как с ним работать.
Автор: moLCHec
Опубликовано 25.03.2008
Данная статья поможет при работе с фирменным STK500 и его клонами, а также раскроет тем кто еще не работал с данным программатором его функции.
STK500 это отладочный модуль с интегрированным программатором, предназначенный для разработки и отладки устройств на МК AVR. STK500 имеет ряд преимуществ выгодно отличающих его от других программаторов:
– возможность высоковольтного (HV) программирования;
– внутрисхемное программирование (ISP);
– возможность установки частоты ISP и HV интерфейса;
– возможность регулировки питающего VTG и опорного AREF напряжения;
– возможность регулировки ISP уровней;
– возможность обновления прошивки основного управляющего контроллера, благодаря чему программатор поддерживает все новинки от Атмел.
Недостатками STK500 на мой взгляд являются:
– COM интерфейс, отсутствующий на современных РС;
– большие габариты;
– отсутствие панелей с нулевым усилием сводит на нет программирование микросхем непосредственно в программаторе т.к. что бы достать микросхему из панели необходимо приложить немалое усилие, а в случае применения отвертки и пр. инструмента велика опасность повредить джампера и пр.
– наличие дополнительного источника питания, что еще больше усложняет применение программатора в “полевых” условиях и захламляет без того насыщенное рабочее место.
Для работы с программатором необходимо установить программу AVR Studio, являющуюся бесплатным средством разработки и отладки от ATMEL.
После установки запустите программу AVR Studio (рис. 1).
Для ручной установки необходимо нажать кнопку (рис. 2) установить при необходимости порт на котором находится программатор и нажать кнопку “Connect:”.
Для автоматического определения программатора необходимо нажать кнопку .
Вкладка Main изображена на рис. 3.
Прежде всего, необходимо выбрать кристалл в выпадающем списке “Device and Signature Bytes” и установить вид программирования в выпадающем списке “Programming Mode and Target Settings”:
ISP mode – внутрисхемное программирование по SPI
HP/HVSP mode – программирование при повышенном напряжении
Если было выбрано внутрисхемное программирование ISP то представляется возможность установить частоту интерфейса SPI при программировании для этого необходимо нажать кнопку “Settings” после чего появится окно рис. 4.
Желаемая частота выбирается в выпадающем списке “ISP Freq:”, после чего необходимо нажать кнопку “Write”.
Кнопка “Erase Device” вкладки Main стирает выбранный кристалл.
Кнопка “Read Signature” чтение байтов сигнатуры кристалла.
Вкладка Program изображена на рис. 5:
Группа Device “Erase device before programming” – стирание кристалла перед программированием
“Verify device after programming” – верификация(проверка данных) после программирования
Группа Flash
Кнопка выбор HEX файла прошивки
Кнопка “Program” – программирование выбранного HEX файла данных Flash
Кнопка “Verify” – верификация(сравнение с HEX файлом) данных flash
Кнопка “Read” – чтение данных flash
Группа EEPROM
Кнопка выбор HEX файла данных EEPROM
Кнопка “Program” – программирование выбранного HEX файла данных EEPROM
Кнопка “Verify” – верификация(сравнение с HEX файлом) данных EEPROM
Кнопка “Read” – чтение данных EEPROM
Группа ELF Production File Format
Кнопка выбор ELF файла
Кнопка “Program” – программирование выбранного ELF файла
Кнопка “Save” – сохранение ELF файла
Вкладка Fuses изображена на рис. 6:
“Auto read” – автоматическое чтение Fuse байтов
“Smart warnings” – предупреждения при ошибке
“Verify after programming” – верификация после программирования
Кнопка “Program” – программирование Fuse байтов
Кнопка “Verify” – верификация Fuse байтов
Кнопка “Read” – чтение Fuse байтов
Вкладка функционально идентична вкладке Fuses.
Вкладка калибровки внутреннего генератора.
Вкладка HW Settings изображена на рис. 7:
Функции группы Voltages позволяют устанавливать напряжение питания МК VTG и опорное напряжение AREF.
Группа Clock Generator позволяет установить частоту на выводе SWCLK разъема HV программирования. Определяет частоту при программировании повышенном напряжением. Скроллингом устанавливается необходимая частота после чего нажимаем кнопку “Write”.
Кнопка “Read” предназначена для чтения текущей частоты.
Группа Firmware Upgrade
Кнопка “Upgrade” – автоматическое обновление.
Информация о версии программатора.
Данная вкладка предназначена автоматического программирования установленных параметров предыдущих вкладок. Удобно если необходимо прошить несколько процессоров подряд с одинаковыми параметрами. Задаем все что нужно в соответствующих вкладках, устанавливаем галочки и нажи-маем Start.
Главное окно программы изображено на рис. 9:
Для отображения окна программирования необходимо нажать кнопку , окно программирования изображено на рис. 10.
Выбираем программатор STK-500/AVRISP и COM порт на котором установлен программатор рис. 10 нажимаем кнопку “ISP Options. ” рис. 11
Нажимаем кнопку “Browse. ” и указываем путь к файлу “Stk500.exe”, по умолчанию программа AVR Studio устанавливается на диск C, тогда файл находится по адресу C:Program FilesAtmelAVR ToolsSTK500Stk500.exe
Главное окно программы представлено на рис. 12:
В меню “Settings” выбираем вкладку “Programmer” (рис. 13)
В выпадающем списке “AVR Chip Programmer Type” выбираем “Atmel STK500/AVRISP”, в выпадающем списке “Communication Port” выбираем порт на который установлен программатор (рис. 13)
Обновление прошивки программатора
Данный программатор обеспечивает автоматическое обновление прошивки.
Версия прошивки должна соответствовать установленной на РС версии AVR Studio.
Для входа в режим программирования необходимо при включении питания удерживать кнопку Program, после включения программатора через несколько секунд кнопку можно отпустить.
Обновление прошивки можно осуществлять следующими средствами:
1. утилитой AVR Prog находящейся во вкладке Tools Рис.14
В появившемся окне необходимо выполнить установки в соответствии с рис. 15:
Файл прошивки STK500.ebn находится в директории в которую установлена AVR Studio в папке STK500, по умолчанию C:Program FilesAtmelAVR ToolsSTK500
2. Утилитой Upgrade, находящейся в директории в которую установлена AVR Studio в папке STK500, по умолчанию C:Program FilesAtmelAVR ToolsSTK500.
При запуске утилиты Upgrade она автоматически ищет программатор в диапазоне портов COM1-COM6 и если программатор при включении вошел в режим программирования утилита уведомит о том, что готова к обновлению рис. 16
Для запуска процесса обновления необходимо нажать кнопку “Start Upgrade”, после чего запустится процесс обновления. О завершении обнов-ления утилита известит соответствующим уведомлением.
Если по каким либо причинам обновление прошивки было прервано, необходимо повторить процедуру обновления.
Если по каким либо причинам обновление прошивки утилитой Upgrade невозможно воспользуйтесь утилитой AVR Prog п.1.
Таблица 1. Обозначение и функции выводов, используемых при программировании в параллельном режиме
Таблица 2. Функции сигналов XA0 и XA1.
Подключение МК при HV программировании
ATmega8515, ATmega8535, ATmega16, ATmega161, ATmega162, ATmega163, ATmega164P, ATmega165, ATmega165P, ATmega1650,ATmega169, ATmega169P, ATmega1690, ATmega32, ATmega324P, ATmega325, ATmega325P, ATmega3250, AT-mega3250P, ATmega329,ATmega329P, ATmega3290, ATmega3290P, ATmega323, ATmega64, ATmega640, ATmega644P, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega103, ATmega128, ATmega1280, ATmega1281, ATmega1284P, AT90CAN32, AT90CAN64, AT90CAN128, ATmega2560, ATmega2561, AT90USB162, AT90USB646, AT90USB647, AT90USB1286, AT90USB1287
AT90S2333, AT90S4433, ATmega48(P), ATmega8, ATmega88(P), ATmega168(P), ATmega328(P)
SCI-тактовый вход, SDO(PB2)-DATA0, SII(PB1)-DATA1, SDI(PB0)-DATA2 ATtiny11, ATtiny12, ATtiny13, ATtiny22, ATtiny25, ATtiny45, ATtiny85, ATtiny15
SCI-тактовый вход, SDO(PA4)-DATA0, SII(PA5)-DATA1, SDI(PA6)-DATA2 ATtiny24, ATtiny44, ATtiny84
XA1 подключается на PB2, BS2 не подключается
BS1 подключается на PB3, PAGEL не подключается
ATtiny26, ATtiny261, ATtiny461, ATtiny861
XA1 подключается на PB2, BS2 не подключается
BS1 подключается на PB3, PAGEL не подключается
ATtiny2313
Кстати, если программатора у вас нет, а собирать лень, то вот тут можно прикупить вполне уже собранный.
STK500v2 Мой вариант данного программатора
С самого начала, как только я начал заниматься микроконтроллерами, я собрал себе самый простой STK200 программатор и пользовался им до этого момента. Но в последнее время он перестал меня устраивать и я начал искать альтернативу.
Что из этого вышло я и постараюсь рассказать далее.
К программатору у меня были следующие требования:
- Скорость прошивки
- Работа с avrstudio, avrdude и другими распространенными программами
- USB интерфейс (не программный)
- Возможность прошивки устройств с различными напряжениями питания (1.5v — 5v)
По всем параметрам мне понравился клон Avrisp mkII. Он был собран и опробован на макетке. По скорости прошивки, думаю, он безусловный лидер. Но у него есть один недостаток, из за которого я отказался его собирать, это невозможность работы с avrstudio и с avrdude одновременно. Тип программы, с которой будет работать программатор задается на этапе компиляции прошивки. Меня это не устраивало.
Позже был найден проект AvrUsb500v2, на основе которого я и сделал себе программатор.
Этот проект был мной доработан программно и схемотехнически. Главная программная доработка, пожалуй, это замена программного spi интерфейса на аппаратный, что дало значительный прирост скорости прошивки. (Полностью atmega8 зашивается за 2 секунды, с верификацией 3 секунды) Теперь скорость isp соответствует выбранной в avrstudio и может меняться от 4kHz до 1.845 MHz. Скорость и другие настройки сохраняются в eeprom.
Также было исправлено несколько багов, переработан местами алгоритм работы программы, добавлена возможность просмотра напряжения питания программируемой схемы в avrstudio. Добавлена возможность генерации внешнего тактового сигнала на 3 ножке 10-пинового isp коннектора. Частота сигнала устанавливается из окна настроек avrstudio и может менятся от 112.5 Hz до 3.686 MHz, либо генерация сигнала вообще может быть отключена.
Добавлена возможность обновления прошивки программатора через bootloader.
В схему я добавил буферы на все линии, для возможности программирования схем с различным напряжением питания (1.5-5v) На линии reset тоже стоит буфер. Это дает возможность программирования нескольких поддерживаемых AT89S* микроконтроллеров, которые сбрасываются плюсом. Если поддержка их не нужна, можно сэкономить на буфере и поставить транзистор (схема и прошивка такого варианта в архиве ниже).
После того, как прошивка зашита в целевое устройство, все буферы, кроме буфера в линии Ex. Clock переводятся в Hi-Z состояние. Буфер в линии Ex. Clock переводится в Hi-Z состояние если выключена генерация внешнего тактового сигнала.
Если не подключено целевое устройство, все буферы, включая Ex. Clock, переводятся в Hi-Z состояние.
В спящем режиме программатора (см. ниже.) все буферы переводятся в Hi-Z состояние.
В качестве usb-uart преобразователя используется CP2102.
Три светодиода индицируют работу программатора.
LED1 — горит, если связь с компьютером установлена, мигает если связи с компьютером нет (компьютер в спящем режиме, компьютер выключен и т.д.).
LED2 — горит при подключении программируемой схемы.
LED3 — обмен данными с компьютером.
Кнопка S1 — режим обновления прошивки, я её не выводил. При необходимости обновления просто замыкаю пинцетом 2 и 3 ножки атмеги (либо 1 и 2 в данной прошивке). Чтобы войти в bootloader необходимо на подключенном к компьютеру программаторе просто замкнуть эти ножки (пинцетом например), при этом никаких переподключений не требуется. Пока мы в бутлоадере горят все три светодиода. Прошивка обновляется средствами avrstudio программой avrprog.
На транзисторе VT1 собрана защита входа VCC от переплюсовки без падения напряжения.
В схеме использована Atmega88. Т.к. SPI теперь используется аппаратный, для достижения минимальных скоростей isp используется программный делитель частоты. В Atmega8, например, его просто нет.
Схема в формате pdf в архиве ниже.
Плата получилась компактная, двухсторонняя. Делалась под размер имеющегося корпуса от какой то радиометки. Дальше немного фоток, все кликабельны.
Под этот корпус делалась плата, корпус вообще без всяких отверстий.
Такая получилась плата.
На заводской плате:
Спичечный коробок для масштаба
В корпусе были вырезаны все необходимые отверстия, распечатаны наклейки.
В режиме бутлоадера
Программатор в работе
Во вложении схема в pdf, прошивки (bootloader и основная), печатная плата в формате sprint layout 6.0.
UPD.
Обновил прошивку. Теперь минимальная скорость ISP не 14 а 4KHz, что дает возможность программировать контроллеры с низкочастотным кварцем, например часовым.
Такой низкой скорости удалось достигнуть использованием программого spi, на остальных частотах задействован аппартный spi модуль.
UPD1. от 30.03.2013
Обновил прошивку и бутлоадер.
— Изменена работа с бутлоадером, теперь при включении программатора работа начинается не с него, а с разу с основной программы. Чтобы войти в бутлоадер, необходимо на подключенном к компьютеру программаторе замкнуть 1 и 2 либо 2 и 3 ножки микроконтроллера.
— Для исключения дребезга при работе со схемами на граничном напряжении 1.6в введен небольшой гистерезис.
— Мелкие исправления.
! Данная версия прошивки и бутлоадера не совместима с предыдущей! Если хоте обновить, делайте, как написано ниже.
Порядок первой прошивки программатора после сборки:
— Зашейте bootloader.hex и установите фьюзы сторонним программатором. (Прошивка и фьюзы в архиве ниже).
— Подключите программатиор к компьютеру (светодиоды гореть не будут), убедитесь, что номер определившегося com порта не превышает 4.
— Откройте Avr Studio 4 версии, запусти Tools -> AVR Prog., Если все сделали правильно, откроется окошко AVRprog.
— Зашейте по очереди файлы STK500.hex во влеш и STK500.eep в еепром. Нажмите Exit.
— Загорится зеленый светодиод — программатор готов к работе.
UPD2. от 30.03.2013
Конфигурация CP2102.
Скачайте и установите последнюю версию драйвера CP210x, если у вас его ещё нет.
Подключите программатор к компьютеру, запустите программу CP210xSetIDs.exe (скачать), в выпадающем списке выберите подключеннный программатор, заполните поля Max power, Serial Number* и Product String, как показано на скриншоте, не забудьте установить галочки. Нажмите «Program Device».
* Поле Serial Number заполните произвольным набором букв и/или цифр, это нужно для того, чтобы программатор не конфликтовал с другими устройствами на CP2102.
(Кликните для увеличения)
Переподключите программатор к компьютеру, система должна обнаружить новое устройство.
Зайдите в свойства определившегося com порта в диспетчере устройств.
Для корректной работы программатора необходимо на вкладке «Управление электропитанием» снять галочку.
UPD3. от 04.06.2013
Добавил в архив схему и прошивку (файлы с префиксом RSTINVERT_) с транзистором вместо буфера на линии reset. Таким образом можно сэкономить один буфер, но теряется поддержка нескольких (старых и экзотических) микроконтроллеров, с инвертированным reset.
Лабораторія Практичної Електроніки
Радіоаматорство, радіоелектроніка, мікроконтролери, схеми
Программатор AvrUsb500 by Petka или моя история хорошего программатора
Эта публикация немного отступит от общих правил моего сайта – публиковать ТОЛЬКО собственные разработки. Объясню почему я пошел на такой шаг:
1. Это не совсем “копипаст” чужой разработки – сюда вложены мои собственные мысли, изменения и наблюдения.
2. Я считаю что мои наработки в направлении этой чудесной, пусть и чужой конструкции будут интересны читателю.
3. Ну просто очень хорошо получилось…
Для начала немного истории. Все интересующиеся, свой путь к микроконтроллерам начинали по-разному. Не все становятся программистами, подавляющее большинство удовлетворяется повторением понравившихся конструкций. Без изменений остается один момент – каждый собирает программатор. Кого-то до конца устраивают “пять проводков”, кто-то покупает родные программаторы предлагаемые производителями, кто-то собирает монструозные вещи типа ucGoZilla уважаемого Prottossa. В общем кто-как… Мне было немного проще – у меня для старта был промышленный программатор ChipStar. Хорошая штука, но больно громоздкая и ориентированная больше на DIP корпуса – для внутрисхемного программирования надо было городить переходники. Быстрее и удобнее было собрать другой программатор. Что собственно и было сделано. Выбор пал на AVR910 того же Prottossa. Очень хороший надежный как танк, простой и доступный в изготовлении и т.д. и т.п. И все бы ничего, но я начал “пописывать” программки и скоро очень остро стал вопрос скорости и совместимости с АВР студией. Как известно микроконтроллерщиков можно условно разделить на две части – железячники – как правило старая гвардия радиолюбителей начинавших с дискретной логики, знающих в точности КАК и главное ЗАЧЕМ работает транзистор, но ничего не смыслящая в программировании – этим больше дается ассемблер, как язык более близкий к железу. И вторые – как правило более молодые, программисты-компьютерщики, менее подкованные в железе, пришедшие к микроконтроллерам из написания программ для компьютеров. Паяльник к ним в руки попадает только в виде вынужденной меры претворения их “программерской” идеи в железо. Такие естественно выбирают более высокоуровневые языки – СИ, бейсик. Я натыкался даже на Паскаль. Естественно это в основном мои умозаключения и грани между этими двумя группами любителей микроконтроллеров порой мутнеют и стираются.
Так вот о чем это я…. Я отношу себя к первой группе. Пользую в основном AVR Studio + ASM. Потому AVR910 не совсем подходил, да и на работе тоже нужен был внутрисхемный программатор. Не буду вас утомлять – долгие поиски в сети и чтение форумов привели меня к “AvrUsb500 by Petka”. Начало истории этого программатора вы найдете здесь. А здесь страничка с описанием программатора. Есть еще одна страничка с толковым описанием этого устройства, но ссылки на этот сайт здесь не будет (хотя бы из солидарности к автору статьи, к которому руководство того ресурса отнеслось, на мой взгляд, по скотски) . Программатор был собран, я получил массу положительных эмоций – эффект примерно такой, как будто пересел с советского автопрома на иномарку. Была только небольшая капля дегтя – немного подглючивал USB конвертер FT232BM от FTDI – то не определится, то студия его не увидит, то с USB кабелем не каждым заработает. Я не зря писал, что “AVR910 надежен как танк” – программная реализация USB в нем таких глюков не имеет. Но на тот момент это все были мелочи, по сравнению с преимуществами работы прямо из студии и скорости. Довольно долгое время эти два программатора служили мне верой и правдой, пока с AVR910 не пришлось расстаться. Как и зачем не есть для вас интересно, скажу лишь то, что стала задача собирать очередной программатор. К этому времени я убедился что столь любимая нашими радиолюбителями FT232 не так безгрешна как о ней думают. Вы конечно могли бы обвинить меня в кривизне рук, что я ее “готовить не умею” и т.д. Мне есть что ответить – было собрано несколько разношерстных устройств на этой микросхеме, все пожелания производителя в даташите были учтены, тонна драйверов перепробована на разном железе. Скажу больше – мой промышленный Chipstar XL имеет в качестве USB конвертера тоже FT232, и хоть и не использует VCP-драйвер но глючит тоже не слабо. Эти все “выбрыки” за год-два эксплуатации мне порядком надоели, потому я решил модифицировать оригинальную схему. На глаза попалась CP2102 – USB-UART преобразователь. Простая схема, хорошие отзывы о самом производителе (SiLabs) и главное – цена (. ). Она стоит у нас в Украине в два раза дешевле, чем “поделка” от FTDI. Глядишь на разницу в цене и начинает душить то самое зеленое земноводное, памятник которому стоит у нас в Бердянске. Немного забегу вперед – вот фото обоих программаторов:
Сборка этого экземпляра (нижний) с CP2102 принесла весьма интересные результаты.
1. Субъективно все стало работать на 20-25% быстрее.
2. Полностью пропали глюки присущие FT232. Определяется без проблем каждый раз, даже после быстрого “перетыкивания” USB, без проблем заработала со всеми моими шнурками.
3. Драйвера моя Windows 7 вытянула с сервера обновления и поставила сама.
В дальнейшем коснусь лишь узла CP2102, так как работа самого программатора “разжевана” по ссылкам приведенным внизу.
Сразу хочу оговориться – проблемой “курицы и яйца” я особо не заморачивался – все цепи самопрограммирования через USB вырезаны в угоду размеру. Эта компиляция программатора рассчитана больше на людей с более-менее приличной подготовкой. Причин тому несколько – корпус CP2102 MLP28 (5×5 мм) с контактными площадками на “пузе” вместо ножек – без определенных навыков не поставить, дорожки 0.25мм – обычным утюгом тоже “взять” вряд ли получится.
Платка выполнена фоторезистом на двухстороннем текстолите. Вторая сторона используется в качестве земли.
После травления плату лудим. Далее самое сложное – первой ставить нужно именно CP2102. Я действовал таким методом:
1. На контактные площадки платы на месте микросхемы наносим самым тонким имеющимся жалом капельки с припоем примерно одной высоты. Здесь самое главное не перегреть контактные площадки. Операцию проводим при помощи лупы.
2. На плату и на микросхему наносим слой флюса. Желательно что-нибудь неактивное и не очень жидкое.
3. Центрируем микросхему, и греем феном паяльной станции. Для создание равномерного давления сверху – можно положить на микросхему гайку M3. По весу вполне подойдет. Это лучше чем давить сверху пинцетом – меньше шансов сместить микросхему. Остальное сделает температура и поверхностное натяжение
Больше особо сложного ничего нет. Разве что в некоторых случаях применены довольно мелковатые резисторы / конденсаторы 0603.
Обвязка CP2102 выполнена исключительно по даташиту без каких либо своевольных “художеств”, от себя добавлен второй светодиод индицирующий наличие питания. Так как материалы по этому программатору довольно сильно “размазаны” по форуму, имеется масса прошивок под разные кварцы и контроллеры – у себя я акцентирую внимание только на ФАКТИЧЕСКИ собранном устройстве, т.е. выкладываю в одном месте одну схему, одну плату и одну прошивку. Собственно схема:
Программирование контроллера производится внутрисхемно. Пятачки предусмотрены на плате. Установка фузов ATMega8:
Изготовление у меня заняло ровно одно воскресенье, потому можно смело называть конструкцией выходного дня. Надеюсь моя доработка этого чудесного программатора кому-то пригодится.
Делаем дешевый аналог STK500 из китайского USB ISP программатора
На aliexpress был куплен USB ISP программатор коих там – пруд-пруди.
Будем переделывать его в аналог атмеловского STK500, известный как AVRDOPER.
Стоит он в где-то 3-4$ (около 200 рублей на момент покупки), ищется на aliexpress / ebay по фразе USB ISP programmer . Если в хозяйстве нет программаторов для ATMEL – рекомендую брать там же USBASP программатор (только платка) по цене 2-3$ – она позволит не только программировать микропроцессоры ATMEGA, но и вот такие программаторы. Правда не из среды разработки, а только из AVRDUDE и подобных спец. программ.
Открываете у программатора колпачок, затем стягиваете алюминиевый корпус в сторону USB-разъема и все – получаете плату программатора. Смотрите внимательно – нам нужно, чтобы программатор был собран на ATMEGA88 (предположительно, версия платы > 3.0).
Если Вы там увидели простую ATMEGA8 – не страшно, люди ставили AVRDOPER и туда:
здесь, здесь и здесь. Ну либо сделать аналогично тому, что написано ниже, только для ATMEGA8.
Ну а если у Вас там – ATMEGA88 – продолжаем – переворачиваем плату, видим там два контакта для перемычки (с надписью UP). Закорачиваем их проводком:
После этого программатор перейдет в режим самопрограммирования. Программировать его можно любым другим программатором с аналогичным разъемом – например USBASP-ом.
Т.е. берем второй программатор, его втыкаем в компьютер, а хвостик с разъемом – в нашего подопытного.
Я программировал с помощью AVRDUDE + AVRDUDEPROG и китайского USBASP программатора. Выбираем в AVRDUDE USBASP и ATMEGA88. Считываем сигнатуру – если считалась – значит все сделали правильно и можно шить.
Если хотите сохранить текущую прошивку программатора, что я рекомендую (чтобы была возможность откатиться), то:
- считать текущие FUSE – биты и записать их значение
- считать прошивку в отдельный файл
- считать EEPROM в отдельный файл
Далее:
- полностью стереть микроконтроллер
- записать новые FUSE биты
для ATMEGA88 FUSE LOW BYTE = 0xDF и FUSE HIGH BYTE = 0xDD, если FUSE не инвертированные – это означает включеные SUT1, SPIEN и BODLEVEL1 - скачать и прошить прошивку AVRDOPER
- EEPROM не трогать
Ну вот и все, теперь надо отпаять нашу перемычку, чтобы программатор вошел в штатный режим работы и установить драйверы AVRDOPER.
Теперь, когда Вы подключите новый программатор в USB, он найдет два устройства. Одно из которых будет виртуальный COM-порт. Находите его в диспетчере устройств, смотрите какой у него номер. Если номер > 4, то советую принудительно переопределить там же на какой-либо от 1 до 4 (т.к. в средах разработки COM-порты с бОльшими номерами не показываются).
Все – теперь что из CodeVision , что из AtmelStudio можно настроить, что программатор у Вас – STK500 на соответствующем COM-порту – и все – можно шить прямо из среды разработки.
По скорости мне показалось, что AVRDOPER медленнее прямого USBASP, зато удобней из-за работы непосредственно из среды, где код пишешь.
Что касается FUSE битов и других контроллеров ATMEL
В принципе, FUSE биты можно посмотреть в makefile от AVRDOPER (в том числе и для ATMEGA8). По-умолчанию AVRDOPER собран для ATMEGA8 и кварцев от 12 MHz с соотвествующим makefile-ом, однако в моем архиве он изменен под ATMEGA88 (однако hex для ATMEGA8 там присутствует, да и makefile можно всегда исправить).
Для нашего случая я перекомпилил AVRDOPER для ATMEGA88.
Перекомпилить просто в любом линуксе (я использовал Ubuntu server):
- ставим компиллер GCC с поддержкой ATMEL
sudo apt-get install gcc-avr binutils-avr avr-libc - ставим утилиту make sudo apt-get install make
- копируем в некую директорию разархивированный AVRDOPER
- изменяем там makefile, выставляя там DEVICE, F_CPU и FUSE_L и FUSE_H
- make usbasp
- получаем в той же директории нужный нам hex-файл прошивки
Этот же программатор можно переделать в нормальный USB ASP
Вот переделанные исходники, их можно скомпилить хоть под ATMEGA8 хоть под ATMEGA88 и авторская статья.
Для ATMEGA88 FUSE LOW BYTE = 0xFF и FUSE HIGH BYTE = 0xDF и прошивка.