STK500: создание программатора своими руками, принцип его работы

Обновлено: 15.07.2024

Cheap STK500 AVR Programmer for Atmel Studio: Atmel Studio is a powerful tool for making AVR programs, but writing a program is the first step. To use your program, you must make a circuit and transfer your code into the microcontroller. You can program your AVR from Atmel Studio by the use of …

Содержание

Программатор

В качестве программатора мы использовали AvrISP STK500 от Seeed Studio. Для его работы под Windows и Mac OS необходимы драйверы. Их можно скачать с официального сайта. Пользователям Linux устанавливать ничего не нужно — программатор будет сразу готов к работе.

Подключаем питание

Arduino мы не используем, поэтому обо всем нам придется думать самостоятельно. И первое, с чем необходимо разобраться — питание. Мы будем использовать преобразователь L7805, обладающей следующими характеристиками:

Выходной ток до 1.5 А Выходное напряжение — ровные 5 В Защита от перегрева Защита от короткого замыкания


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

Mac OS X

Первым делом необходимо скачать и установить CrossPack for AVR Development. Это даст нам все необходимые инструменты. CrossPack состоит из двух частей.

AVR Libc — a C library for GCC on AVR microcontrollers AVRDUDE — AVR Downloader/Uploader

Первая нам нужна для написания кода и создания файла прошивки, а вторая — для заливки прошивки в контроллер.

Проект создается в три шага.

Запустите терминал Перейдите в нем в нужную папку Создайте проект с помощью команды avr-project

В результате будет создано следующее дерево файлов.

На данном этапе нас интересует содержимое файла Makefile . В нем содержится информация о том, что вообще мы используем: какой контроллер, программатор. Это все описывается в строках с 20 по 24:

Пройдемся по строкам:

DEVICE содержит в себе название контроллера, который мы программируем CLOCK — частота работы PROGRAMMER — используемый программатор OBJECTS — какие объектные файлы будут сгененрированы FUSES — конфигурация fuse-битов в микроконтроллере

Внимание! Задание неверных fuse-битов может привезти к тому, что микроконтроллер перестанет работать и вернуть его к нормальной жизни может быть либо очень сложно либо невозможно! Воспользеумся сайтом AVR Fuse Calcuator.

Сначала из выпадающего списка выберем нужный нам контроллер (ATtiny84).


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


Видим, как поменялись сгенерированные значения.


Внесем изменения в Makefile.

Прошивка

Она происходит в 2 этапа.

Сначала необходимо перейти в папку firmware и выполнить команду make . Если ошибок нет, то результат выполнения команды будет таким:

Эта команда сделает из нашего исходника main.c файл, пригодный для заливки в контроллер — main.hex .

Второй этап — как раз заливка прошивки. Делается это с помощью команды make flash . Ее нормальный вывод выглядит следующим образом:

Все, прошивка контроллера завершена.

Нам понадобится


Application Ideas¶

  • AVR programming
  • AVR Burn Bootloader

Example: Burn Bootloader to Arduino UNO¶

  • 1.How to connect : See the picture above
  • 2.Install AVRISP driver in the CD .
  • 3.Download AVR STUDIO4.19 and install it.

The AVR STUDIO4.13 software in the CD.

4.Burn Bootloader to Arduino UNO

  • Step 1. Open AVR STUDIO4.19

Step 2. Connect to STK500

atmel avrisp stk500 usb isp programmer

Step 3. Select Platform

atmel avrisp stk500 usb isp programmer

atmel avrisp stk500 usb isp programmer

Step 4. Select Device «ATmega328P»

atmel avrisp stk500 usb isp programmer

Step 5. Select Bootloader > Path:arduino-1.0hardwarearduinoootloadersoptibootoptiboot_atmega328.hex

На aliexpress был куплен USB ISP программатор коих там — пруд-пруди.
Будем переделывать его в аналог атмеловского STK500, известный как AVRDOPER.

atmel avrisp stk500 usb isp programmer

Стоит он в где-то 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. Считываем сигнатуру — если считалась — значит все сделали правильно и можно шить.

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

  1. считать текущие FUSE — биты и записать их значение
  2. считать прошивку в отдельный файл
  3. считать EEPROM в отдельный файл
  1. полностью стереть микроконтроллер
  2. записать новые FUSE биты
    для ATMEGA88 FUSE LOW BYTE = 0xDF и FUSE HIGH BYTE = 0xDD, если FUSE не инвертированные — это означает включеные SUT1, SPIEN и BODLEVEL1
  3. скачать и прошить прошивку AVRDOPER
  4. EEPROM не трогать

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

Теперь, когда Вы подключите новый программатор в USB, он найдет два устройства. Одно из которых будет виртуальный COM-порт. Находите его в диспетчере устройств, смотрите какой у него номер. Если номер > 4, то советую принудительно переопределить там же на какой-либо от 1 до 4 (т.к. в средах разработки COM-порты с бОльшими номерами не показываются).

Все — теперь что из CodeVision , что из AtmelStudio можно настроить, что программатор у Вас — STK500 на соответствующем COM-порту — и все — можно шить прямо из среды разработки.

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


С самого начала, как только я начал заниматься микроконтроллерами, я собрал себе самый простой 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.

В этой статье я расскажу о том, как программировать микроконтроллеры без использования Arduino. Мы будем использовать программатор AvrISP STK500 для программирования контроллера ATtiny84.

Подключение к контроллеру

avr_isp.jpg

Распиновка разъема программатора такова:

Важно! Это распиновка разъема программатора, если смотреть на него сверху (отверстиями от себя). Не перепутайте!


Разъем программатора необходимо подключить к микроконтроллеру. Можно использовать как 10-пиновый разъём, так и 6-пиновый. Без разницы. Соединим проводами соответствующие пины, т.е:

10-пиновый ICSP ATtiny84
Reset 5 4
MOSI 1 7
MISO 9 8
SCK 7 9

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.


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

В этой статье я расскажу о том, как программировать микроконтроллеры без использования Arduino. Мы будем использовать программатор AvrISP STK500 для программирования контроллера ATtiny84.

Основные параметры AVR

Обладая широким модельным рядом, продукция компании ATMEL способна послужить многим целям, особенно если правильно подобрать технические свойства будущего контроллера. Для прошивки любого чипа важно, чтобы программатор был способен корректно считать его содержимое перед заливкой нового firmware, а значит, они должны быть полностью совместимы. Типовые микросхемы семейства имеют такие параметры:

  • объём флеш-памяти — от 4 до 32 килобайт;
  • оперативная память — от 512 байт до 2 килобайт;
  • размер прошивки в модуле EEPROM — от 256 до 1024 байт;
  • напряжение питания — от 1,8 до 5,5 вольт.

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

Любая микросхема может быть впаяна на плату двумя разными способами:

  • сквозным, когда ножки запаиваются с обратной стороны;
  • планарным — с ножками-выводами, находящимися на той же площадке, что и корпус.

STK500: создание программатора своими руками, принцип его работы

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

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

Условия, в которых может работать такая микросхема, довольно разнообразны, что идёт на пользу её многозадачности. Температуры, при которых она гарантированно будет функционировать, лежат в промежутке от 55 градусов мороза до 125 тепла. Хранить же её можно при более широком диапазоне. Кристалл микросхемы термоустойчив, поэтому в правильно собранной плате не будет перегреваться выше паспортных данных.

Прошивка

Напишем код прошивки на чистом «C», которая заставит светодиод мигать. Использование ШИМ-сигналов и считывание аналоговых сигналов на чистом «C» не так тривиальна, и может являться темой отдельной статьи, поэтому остановимся пока на простейшем примере.

После скетчей Arduino, код малопонятен, правда? Ничего, сейчас я объясню, что да как. В первых двух строчках мы подключаем необходимые библиотеки, чтобы воспользоваться такими штуками, как DDRA , PORTA , _delay_ms .

Что же такое DDRA ? Это регистр микроконтроллера, управляющий направлением работы порта А. Он содержит в себе 8 бит. Если установить какой-то бит в 1, то пин с соответствующим номером станет выходом.

PORTA — тоже регистр, но он содержит в себе данные порта А. Если мы хотим на вывод номер 2 записать логическую единицу, то мы должны поместить 1 в соответсвующий бит регистра.

А _delay_ms — функция задержки. Исходя из этого можно составить таблицу соответствия:

Arduino C
Направление pinMode(led, OUTPUT); DDRA = 1 << 2;
Значение digitalWrite(led, HIGH); PORTA = 1 << 2;
Задержка delay(1000); _delay_ms(50);

Однако, самым важным различием кода является то, что в программе на С нет разделений функций setup и loop . За все это отвечает функция int main(void) . И она выполняется всего 1 раз! А мы хотим, чтобы наш светодиод моргал не один раз, а постоянно. Как раз для этого и используется бесконечный цикл while (1==1) .

Поэтому легко сделать вывод, что этот цикл и есть аналог функции loop() в Arduino. А то, что до него — аналог функции setup() .

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

Summary:

Expansion cards are View More

Thank you for your request. We will reply back with quotation as soon as possible! If you have any questions in the meantime, feel free to contact us here .

Documents and Software

Additional resources data currently not available.

Expansion cards are available for the different AVR sub-families and larger devices.

The Online User Guide online-help contains the most current information and a complete list of supported devices

Подключение к контроллеру

avr_isp.jpg

Распиновка разъема программатора такова:

Важно! Это распиновка разъема программатора, если смотреть на него сверху (отверстиями от себя). Не перепутайте!


Разъем программатора необходимо подключить к микроконтроллеру. Можно использовать как 10-пиновый разъём, так и 6-пиновый. Без разницы. Соединим проводами соответствующие пины, т.е:

10-пиновый ICSP ATtiny84
Reset 5 4
MOSI 1 7
MISO 9 8
SCK 7 9

Features¶

  • It can supports a wide range of ATMEL AVR microcontrollor.
  • It can works with AVR Studio or WINAVR (GCC)
  • It works with ATMEL AVR Studio 4.13, you can upgraded it’s firmware,in upgrade firmware Completed,it can work at a higher version of the AVR Studio and to be able to support more device,
  • Completed,it can work at a higher version of the AVR Studio and to be able to support more device,Compact Size — 75mm x 57mm x 27mm

Распиновка


Необходимо знать назначение ножек преобразователя. Это описано на 2-й странице даташита.

Example: Burn Bootloader to Arduino UNO¶

  • 1.How to connect : See the picture above
  • 2.Install AVRISP driver in the CD .
  • 3.Download AVR STUDIO4.19 and install it.

The AVR STUDIO4.13 software in the CD.

4.Burn Bootloader to Arduino UNO

  • Step 1. Open AVR STUDIO4.19

Step 2. Connect to STK500

atmel avrisp stk500 usb isp programmer

Step 3. Select Platform

atmel avrisp stk500 usb isp programmer

atmel avrisp stk500 usb isp programmer

Step 4. Select Device «ATmega328P»

atmel avrisp stk500 usb isp programmer

Step 5. Select Bootloader > Path:arduino-1.0hardwarearduinoootloadersoptibootoptiboot_atmega328.hex

atmel avrisp stk500 usb isp programmer

atmel avrisp stk500 usb isp programmer

Introduction: Cheap STK500 AVR Programmer for Atmel Studio

Atmel Studio is a powerful tool for making AVR programs, but writing a program is the first step. To use your program, you must make a circuit and transfer your code into the microcontroller. You can program your AVR from Atmel Studio by the use of STK500 hardware. Why you cannot program MCU directly from computer by cheap hardware like PIC microcontrollers? The answer is that to transfer your program to IC you must use SPI connection, but there is no SPI port on the PC. There is plenty of software that uses RS232 port as SPI, but you cannot program your AVR directly from Atmel Studio like them. Here I introduce you software that simulates STK500 hardware on the PC and sends data to the microcontroller using RS232 via simple and cheap hardware. Note that using PC RS232 as SPI port is slow and programming the chip will take more time than an STK500 device.

Part Number: ATSTK500

Mac OS X

Первым делом необходимо скачать и установить CrossPack for AVR Development. Это даст нам все необходимые инструменты. CrossPack состоит из двух частей.

AVR Libc — a C library for GCC on AVR microcontrollers AVRDUDE — AVR Downloader/Uploader

Первая нам нужна для написания кода и создания файла прошивки, а вторая — для заливки прошивки в контроллер.

Проект создается в три шага.

Запустите терминал Перейдите в нем в нужную папку Создайте проект с помощью команды avr-project

В результате будет создано следующее дерево файлов.

На данном этапе нас интересует содержимое файла Makefile . В нем содержится информация о том, что вообще мы используем: какой контроллер, программатор. Это все описывается в строках с 20 по 24:

Пройдемся по строкам:

DEVICE содержит в себе название контроллера, который мы программируем CLOCK — частота работы PROGRAMMER — используемый программатор OBJECTS — какие объектные файлы будут сгененрированы FUSES — конфигурация fuse-битов в микроконтроллере

Внимание! Задание неверных fuse-битов может привезти к тому, что микроконтроллер перестанет работать и вернуть его к нормальной жизни может быть либо очень сложно либо невозможно! Воспользеумся сайтом AVR Fuse Calcuator.

Сначала из выпадающего списка выберем нужный нам контроллер (ATtiny84).


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


Видим, как поменялись сгенерированные значения.


Внесем изменения в Makefile.

Прошивка

Она происходит в 2 этапа.

Сначала необходимо перейти в папку firmware и выполнить команду make . Если ошибок нет, то результат выполнения команды будет таким:

Эта команда сделает из нашего исходника main.c файл, пригодный для заливки в контроллер — main.hex .

Второй этап — как раз заливка прошивки. Делается это с помощью команды make flash . Ее нормальный вывод выглядит следующим образом:

Все, прошивка контроллера завершена.

Нам понадобится


Схема

С учетом всего вышеописанного, получается схема для организации питания.


Подключаем питание

Arduino мы не используем, поэтому обо всем нам придется думать самостоятельно. И первое, с чем необходимо разобраться — питание. Мы будем использовать преобразователь L7805, обладающей следующими характеристиками:

Выходной ток до 1.5 А Выходное напряжение — ровные 5 В Защита от перегрева Защита от короткого замыкания


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

Программатор

В качестве программатора мы использовали AvrISP STK500 от Seeed Studio. Для его работы под Windows и Mac OS необходимы драйверы. Их можно скачать с официального сайта. Пользователям Linux устанавливать ничего не нужно — программатор будет сразу готов к работе.

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 — это заставит скомпилированную программу загрузиться в память микроконтроллера.


Supported Devices¶

AT90S1200 AT90S2313 AT90S2323 AT90S2343
AT90S4433 AT90S8515 AT90S8535 ATmega128
ATmega1280 ATmega1281 ATmega128RZAV ATmega128RZBV
ATmega16 ATmega161 ATmega162 ATmega163
ATmega164P ATmega164P Automotive ATmega165 ATmega168
ATmega168 Automotive ATmega168P ATmega169 ATmega16A
ATmega16U4 ATmega2560 ATmega2561 ATmega256RZAV
ATmega256RZBV ATmega32 ATmega323 ATmega324P
ATmega324P automotive ATmega325 ATmega3250 ATmega3250P
ATmega325P ATmega328P ATmega329 ATmega3290
ATmega3290P ATmega329P ATmega32A ATmega32U4
ATmega48 ATmega48 Automotive ATmega48P ATmega64
ATmega640 ATmega644 ATmega644P ATmega644P Automotive
ATmega645 ATmega6450 ATmega649 ATmega6490
ATmega8535 ATmega88 ATmega88 Automotive ATmega88P
ATtiny12 ATtiny13 ATtiny13A ATtiny15L
ATtiny2313 ATtiny26 ATtiny88

Step 2: Virtual Ports

Before using WinSTK500 software you need a pair of virtual serial ports. There is a lot of virtual serial port emulator software like Virtual Serial Ports Emulator, com0com (mirror) and etc. Here I used com0com software. After installing com0com, create a pair of virtual serial ports like ones on the picture.

Заключение

Мы собрали простейшее устройство мигалку, но сделали это на низком уровне. С использованием программатора и «продвинутой» среды разработки, а не Arduino.


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

Звезда активна
Звезда активна
Звезда активна
Звезда активна
Звезда активна

Программатор STK500v2 by Bonio

С самого начала, как только я начал заниматься микроконтроллерами, я собрал себе самый простой 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 и может меняться от 10kHz до 3.686MHz, либо генерация сигнала вообще может быть отключена. Добавлена возможность прошивки программатора через bootloader.


В схему я добавил буферы на все линии, для возможности программирования схем с различным напряжением питания (1.5-5v) На линии reset тоже стоит буфер. Это для возможности программирования нескольких поддерживаемых AT89* контроллеров, которые сбрасываются плюсом. Если поддержка их не нужна, можно сэкономить на буфере и поставить npn транзистор, не забыв инвертировать в исходнике соответствующий пин.

После того, как прошивка зашита в целевое устройство, все буферы, кроме буфера в линии Ex. Clock переводятся в Hi-Z состояние. Буфер в линии Ex. Clock переводится в Hi-Z состояние если выключена генерация внешнего тактового сигнала.
Если не подключено целевое устройство, все буферы, включая Ex. Clock, переводятся в Hi-Z состояние.
В спящем режиме программатора (см. ниже.) все буферы переводятся в Hi-Z состояние.

В качестве usb-uart преобразователя используется CP2102. (Помучился я, запаивая ее паяльником)

Три светодиода индицируют работу программатора.
- LED1 горит при подключении программатора к компьютеру, мигает, когда не обнаружен сигнал usb, например при выключенном компьютере (спящий режим программатора). Для этого используется пин SUSPEND CP2102.
- LED2 горит при подключении программируемой схемы.
- LED3 — обмен данными с компьютером.

Кнопка S1 — режим обновления прошивки, я её не выводил. При необходимости обновления просто замыкаю пинцетом 2 и 3 ножки атмеги. Чтобы войти в bootloader необходимо просто замкнуть эти ножки, при этом никаких переподключений не требуется. Пока мы в бутлоадере горят все три светодиода. Прошивка обновляется средствами avrstudio программой avrprog.

На транзисторе VT1 собрана защита входа VCC от переплюсовки без падения напряжения. В схеме использована Atmega88. Т.к. SPI теперь используется аппаратный, для достижения минимальных скоростей isp используется программный делитель частоты. В Atmega8 его просто нет.

Плата получилась компактная, двухсторонняя. Делалась под размер имеющегося корпуса от какой то радиометки. Дальше немного фоток:




Под этот корпус делалась плата, корпус вообще без всяких отверстий:


Такая получилась плата:




Спичечный коробок для масштаба:


В корпусе были вырезаны все необходимые отверстия, распечатаны наклейки:








В режиме бутлоадера:


Программатор в работе:


В архиве схема в pdf, прошивки (bootloader и основная), программа CP210xSetIDs для конфигурации CP2102, печатная плата в формате Sprint Layout 5.

Update. Обновил прошивку. Теперь минимальная скорость ISP не 14 а 4KHz, что дает возможность программировать контроллеры с низкочастотным кварцем, например часовым. Такой низкой скорости удалось достигнуть использованием программого spi, на остальных частотах задействован аппартный spi модуль.

Update. от 02.07.2012. Все, что написано дальше не является обязательным а нужно лишь для того, чтобы программатор корректно работал при подключении к компьютеру других устройств на микросхеме CP210x, а также для того, чтобы новое устройство определялось компьютером не как "Silicon Labs CP210x USB to UART Bridge", а как "STK500v2 USB Programmer"

Скачайте и распакуйте драйвер программатора отсюда, к нему мы ещё вернемся.

Подключите программатор к компьютеру, если у вас уже установлен драйвер CP210x в системе появится новый com порт, если нет, скачайте и установите драйвер тут.

Запустите программу CP210xSetIDs.exe, в выпадающем списке выберите подключеннный программатор, заполните поля Vid, Pid и Product String, как показано на скриншоте, не забудьте установить галочки. Нажмите «Program Device».


Переподключите программатор к компьютеру, система должна обнаружить новое устройство "STK500v2 USB Programmer":





Теперь наш программатор имеет название и его легко можно найти в диспетчере устройств:


Для корректной работы программатора необходимо зайти в свойства нового устройства и на вкладке «Управление электропитанием снять» снять галочку:

Звезда активна
Звезда активна
Звезда активна
Звезда активна
Звезда активна

Программатор STK500v2 by Bonio

С самого начала, как только я начал заниматься микроконтроллерами, я собрал себе самый простой 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 и может меняться от 10kHz до 3.686MHz, либо генерация сигнала вообще может быть отключена. Добавлена возможность прошивки программатора через bootloader.


В схему я добавил буферы на все линии, для возможности программирования схем с различным напряжением питания (1.5-5v) На линии reset тоже стоит буфер. Это для возможности программирования нескольких поддерживаемых AT89* контроллеров, которые сбрасываются плюсом. Если поддержка их не нужна, можно сэкономить на буфере и поставить npn транзистор, не забыв инвертировать в исходнике соответствующий пин.

После того, как прошивка зашита в целевое устройство, все буферы, кроме буфера в линии Ex. Clock переводятся в Hi-Z состояние. Буфер в линии Ex. Clock переводится в Hi-Z состояние если выключена генерация внешнего тактового сигнала.
Если не подключено целевое устройство, все буферы, включая Ex. Clock, переводятся в Hi-Z состояние.
В спящем режиме программатора (см. ниже.) все буферы переводятся в Hi-Z состояние.

В качестве usb-uart преобразователя используется CP2102. (Помучился я, запаивая ее паяльником)

Три светодиода индицируют работу программатора.
- LED1 горит при подключении программатора к компьютеру, мигает, когда не обнаружен сигнал usb, например при выключенном компьютере (спящий режим программатора). Для этого используется пин SUSPEND CP2102.
- LED2 горит при подключении программируемой схемы.
- LED3 — обмен данными с компьютером.

Кнопка S1 — режим обновления прошивки, я её не выводил. При необходимости обновления просто замыкаю пинцетом 2 и 3 ножки атмеги. Чтобы войти в bootloader необходимо просто замкнуть эти ножки, при этом никаких переподключений не требуется. Пока мы в бутлоадере горят все три светодиода. Прошивка обновляется средствами avrstudio программой avrprog.

На транзисторе VT1 собрана защита входа VCC от переплюсовки без падения напряжения. В схеме использована Atmega88. Т.к. SPI теперь используется аппаратный, для достижения минимальных скоростей isp используется программный делитель частоты. В Atmega8 его просто нет.

Плата получилась компактная, двухсторонняя. Делалась под размер имеющегося корпуса от какой то радиометки. Дальше немного фоток:




Под этот корпус делалась плата, корпус вообще без всяких отверстий:


Такая получилась плата:




Спичечный коробок для масштаба:


В корпусе были вырезаны все необходимые отверстия, распечатаны наклейки:








В режиме бутлоадера:


Программатор в работе:


В архиве схема в pdf, прошивки (bootloader и основная), программа CP210xSetIDs для конфигурации CP2102, печатная плата в формате Sprint Layout 5.

Update. Обновил прошивку. Теперь минимальная скорость ISP не 14 а 4KHz, что дает возможность программировать контроллеры с низкочастотным кварцем, например часовым. Такой низкой скорости удалось достигнуть использованием программого spi, на остальных частотах задействован аппартный spi модуль.

Update. от 02.07.2012. Все, что написано дальше не является обязательным а нужно лишь для того, чтобы программатор корректно работал при подключении к компьютеру других устройств на микросхеме CP210x, а также для того, чтобы новое устройство определялось компьютером не как "Silicon Labs CP210x USB to UART Bridge", а как "STK500v2 USB Programmer"

Скачайте и распакуйте драйвер программатора отсюда, к нему мы ещё вернемся.

Подключите программатор к компьютеру, если у вас уже установлен драйвер CP210x в системе появится новый com порт, если нет, скачайте и установите драйвер тут.

Запустите программу CP210xSetIDs.exe, в выпадающем списке выберите подключеннный программатор, заполните поля Vid, Pid и Product String, как показано на скриншоте, не забудьте установить галочки. Нажмите «Program Device».


Переподключите программатор к компьютеру, система должна обнаружить новое устройство "STK500v2 USB Programmer":





Теперь наш программатор имеет название и его легко можно найти в диспетчере устройств:


Для корректной работы программатора необходимо зайти в свойства нового устройства и на вкладке «Управление электропитанием снять» снять галочку:

Звезда активна
Звезда активна
Звезда активна
Звезда активна
Звезда активна

Программатор STK500v2 by Bonio

С самого начала, как только я начал заниматься микроконтроллерами, я собрал себе самый простой 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 и может меняться от 10kHz до 3.686MHz, либо генерация сигнала вообще может быть отключена. Добавлена возможность прошивки программатора через bootloader.


В схему я добавил буферы на все линии, для возможности программирования схем с различным напряжением питания (1.5-5v) На линии reset тоже стоит буфер. Это для возможности программирования нескольких поддерживаемых AT89* контроллеров, которые сбрасываются плюсом. Если поддержка их не нужна, можно сэкономить на буфере и поставить npn транзистор, не забыв инвертировать в исходнике соответствующий пин.

После того, как прошивка зашита в целевое устройство, все буферы, кроме буфера в линии Ex. Clock переводятся в Hi-Z состояние. Буфер в линии Ex. Clock переводится в Hi-Z состояние если выключена генерация внешнего тактового сигнала.
Если не подключено целевое устройство, все буферы, включая Ex. Clock, переводятся в Hi-Z состояние.
В спящем режиме программатора (см. ниже.) все буферы переводятся в Hi-Z состояние.

В качестве usb-uart преобразователя используется CP2102. (Помучился я, запаивая ее паяльником)

Три светодиода индицируют работу программатора.
- LED1 горит при подключении программатора к компьютеру, мигает, когда не обнаружен сигнал usb, например при выключенном компьютере (спящий режим программатора). Для этого используется пин SUSPEND CP2102.
- LED2 горит при подключении программируемой схемы.
- LED3 — обмен данными с компьютером.

Кнопка S1 — режим обновления прошивки, я её не выводил. При необходимости обновления просто замыкаю пинцетом 2 и 3 ножки атмеги. Чтобы войти в bootloader необходимо просто замкнуть эти ножки, при этом никаких переподключений не требуется. Пока мы в бутлоадере горят все три светодиода. Прошивка обновляется средствами avrstudio программой avrprog.

На транзисторе VT1 собрана защита входа VCC от переплюсовки без падения напряжения. В схеме использована Atmega88. Т.к. SPI теперь используется аппаратный, для достижения минимальных скоростей isp используется программный делитель частоты. В Atmega8 его просто нет.

Плата получилась компактная, двухсторонняя. Делалась под размер имеющегося корпуса от какой то радиометки. Дальше немного фоток:




Под этот корпус делалась плата, корпус вообще без всяких отверстий:


Такая получилась плата:




Спичечный коробок для масштаба:


В корпусе были вырезаны все необходимые отверстия, распечатаны наклейки:








В режиме бутлоадера:


Программатор в работе:


В архиве схема в pdf, прошивки (bootloader и основная), программа CP210xSetIDs для конфигурации CP2102, печатная плата в формате Sprint Layout 5.

Update. Обновил прошивку. Теперь минимальная скорость ISP не 14 а 4KHz, что дает возможность программировать контроллеры с низкочастотным кварцем, например часовым. Такой низкой скорости удалось достигнуть использованием программого spi, на остальных частотах задействован аппартный spi модуль.

Update. от 02.07.2012. Все, что написано дальше не является обязательным а нужно лишь для того, чтобы программатор корректно работал при подключении к компьютеру других устройств на микросхеме CP210x, а также для того, чтобы новое устройство определялось компьютером не как "Silicon Labs CP210x USB to UART Bridge", а как "STK500v2 USB Programmer"

Скачайте и распакуйте драйвер программатора отсюда, к нему мы ещё вернемся.

Подключите программатор к компьютеру, если у вас уже установлен драйвер CP210x в системе появится новый com порт, если нет, скачайте и установите драйвер тут.

Запустите программу CP210xSetIDs.exe, в выпадающем списке выберите подключеннный программатор, заполните поля Vid, Pid и Product String, как показано на скриншоте, не забудьте установить галочки. Нажмите «Program Device».


Переподключите программатор к компьютеру, система должна обнаружить новое устройство "STK500v2 USB Programmer":





Теперь наш программатор имеет название и его легко можно найти в диспетчере устройств:


Для корректной работы программатора необходимо зайти в свойства нового устройства и на вкладке «Управление электропитанием снять» снять галочку:

Схема

С учетом всего вышеописанного, получается схема для организации питания.


Прошивка

Напишем код прошивки на чистом «C», которая заставит светодиод мигать. Использование ШИМ-сигналов и считывание аналоговых сигналов на чистом «C» не так тривиальна, и может являться темой отдельной статьи, поэтому остановимся пока на простейшем примере.

После скетчей Arduino, код малопонятен, правда? Ничего, сейчас я объясню, что да как. В первых двух строчках мы подключаем необходимые библиотеки, чтобы воспользоваться такими штуками, как DDRA , PORTA , _delay_ms .

Что же такое DDRA ? Это регистр микроконтроллера, управляющий направлением работы порта А. Он содержит в себе 8 бит. Если установить какой-то бит в 1, то пин с соответствующим номером станет выходом.

PORTA — тоже регистр, но он содержит в себе данные порта А. Если мы хотим на вывод номер 2 записать логическую единицу, то мы должны поместить 1 в соответсвующий бит регистра.

А _delay_ms — функция задержки. Исходя из этого можно составить таблицу соответствия:

Arduino C
Направление pinMode(led, OUTPUT); DDRA = 1 << 2;
Значение digitalWrite(led, HIGH); PORTA = 1 << 2;
Задержка delay(1000); _delay_ms(50);

Однако, самым важным различием кода является то, что в программе на С нет разделений функций setup и loop . За все это отвечает функция int main(void) . И она выполняется всего 1 раз! А мы хотим, чтобы наш светодиод моргал не один раз, а постоянно. Как раз для этого и используется бесконечный цикл while (1==1) .

Поэтому легко сделать вывод, что этот цикл и есть аналог функции loop() в Arduino. А то, что до него — аналог функции setup() .

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

Распиновка


Необходимо знать назначение ножек преобразователя. Это описано на 2-й странице даташита.

Читайте также: