Прошивка AVR микроконтроллеров с "нуля"

Микроконтроллеры семейства PIC мы уже научились прошивать вот из этой статьи. Но, существует не менее популярное семейство AVR микроконтроллеров. В этой статье для начинающих будет рассмотрено как же «залить прошивку» в контроллеры AVR.


Еще когда я только начинал осваивать контроллеры семейства AVR сразу встал вопрос, а чем же я буду их прошивать. Как и полагается «полез» в интернет. Много чего я там по находил!
Вариант 1. Прошивка контроллера при помощи технологии «пяти проводков»
Микроконтроллер AVR имеет следующие основные выводы программирования:
MOSI — вход данных
MISO — выход данных
SCK — вход синхронизирующих импульсов
REST — сигнал сброса
Так вот, суть технологии «пять проводков» заключается в том, что выводы программирования
контроллера подключаются напрямую к LPT порту компьютера. Пяты проводок — это общий провод.
Вот схема подключения:

Питание на программируемый микроконтроллер в этой схеме подается от отдельного источника.
Обратите внимание на перемычки между контактами 2-12, 3-11. По наличию этих перемычек программа «прошивальщик» определяет подключение к LPT порту программатора.
Кабель соединяющий компьютер и программатор должен быть экранированный, проводки, соединяющие контроллер должны быть минимальной длины, иначе, посыпятся ошибки при прошивке контроллера.
Это, конечно самый простой способ прошить AVR контроллер. Но у него есть и куча недостатков. Самый большой недостаток — это очень большая возможность «спалить» LPT порт, да и всю материнскую плату, так как никакой защиты для порта не предусмотрено. Но, не все еще потеряно.
Вариант 2. Существуют программаторы, в которых предусмотрена защита. Вот такой нам и нужно собрать, и компьютер цел останется и нервы в порядке.
А будем собирать программатор под названием STK200/300.
Этот программатор получил свое название от комплектующихся им отладочных плат фирмы Atmel для быстрого начала работы с микроконтроллерами At90s8515 и Atmega103. Но, им иожно прошивать и другие типы контроллеров.
Схем в сети этого программатора полно в различных вариация. Вот собственно его схема:
Изображение - savepic.su — сервис хранения изображений
Тут все просто. На входе защитные резисторы от перегрузки по току, далее идет микросхема 74HC244. Это не инвертирующий буфер. Микросхема содержит два независимых четырехразрядных буфера. Каждый буфер имеет свой сигнал разрешения выхода (низкий активный уровень). На входах нет триггеров Шмитта. Микросхема выполнена по технологии “быстрый” КМОП, что обеспечивает высокое быстродействие. Мощный токовый выход делает возможным сохранение высокого быстродействия даже при емкостной нагрузке. Быстродействие 74HC244 сравнимо с быстродействием микросхем, основанных на диодах Шоттки, при этом 74HC244 сохраняет достоинства микросхем КМОП, т.е. высокая помехозащищенность и низкая потребляемая мощность.Входы микросхемы защищены от повреждения статическим электричеством при помощи диодов. Вот блок схема данной микросхемы:

Так что тут все ясно и просто. На входе питания для программатора и контроллера Vcc
сидит светодиод и сигнализирует о подачи напряжения питания. Светодиод на линии LED / XTAL 1(некоторые программы на эту линию выводят тактовую частоту для работы контроллера) помаргивает при программировании. Ну вроде и все! Перейдем к конструкции.
Была сделана печатная плата. Детали в основном SMD. Плату планировалось «запихнуть в стандартную коробочку для разъема DP-25C. Вот в такую:

Плату сделал, надфилем доработал до формы коробочки, запаял детальки:


В крышке разъема потом просверлил отверстия для светодиодов. С платы вывел проводки для подключения контроллера.
Вот файл печатной платы
Все собрано, теперь бы надобно все настроить и опробовать! Поехали!
прошивать будем из программы PonyProg.
Запускаем пони прог. С начала раздастся звук ржания пони, чтоб это в дальнейшем не напрягало, ставим галочку в поле Disable sound, нажимаем ОК. Далее выпрыгнет окошко такого плана:

тут программа нас просит произвести ее калибровку, это нужно для того, чтобы программа проверило „железо“ компа и подстроилось под него, компы ведь бывают шустрые и не очень!)
Нажимаем ОК. Выскочит теперь еще одно окошко:

Тут программа хочет от нас, чтоб настроили интерфейс программирования, проще говоря, указали с каким программатором ей предстоит работать.Нажимаем ОК.
Теперь заходим Setup -> Calibration. Появляется окно:

Нажимаем „YES“ и через некоторое время программа скажет, что „Calibration OK“. Хорошо!
Теперь лезем в Setup -> Interface Setup.

Выбираем параллельный порт ввода/вывода, жмем OK.
Далее лезем в Command -> Program Options. Настраиваем все как на картинке ниже.

Жмем OK. Вот теперь все готово к „прошивке“.
Теперь последовательность действий для „прошивки“ контроллера. Программатор должен уже быть подключен к LPT порту, контроллер к программатору и подано питание на программатор и контроллер.

1. Тут выбираем из списка тип семейства контроллеров „AVR micro“
2. Из другого списка выбираем „ATtiny2313“
3. Загружаем файл прошивки (File -> Open Device File), выбираем нужный файл.
4. Жмём кнопку „Launch program cycle“. Когда программирование завершится, прога скажет „Program successful“
5. Ну и напоследок надо запрограммировать так называемые Фьюзы (fuses). Для этого жмём кнопочку „Security and Configuration Bits“.

В появившемся окне жмём „Read“, потом выставляем галочки фьюзов так, как нам нужно для конкретной схемы и жмём „Write“. Все, все „прошито“ Подробнее об этих самых фьюзах можно почитать тут и тут — тут приводить описание не вижу смысла, уже все давно рассмотрено!
А если у нас есть в наличии современный компьютер или ноутбук, где нет LPT порта вообще?
Как тогда быть? А тогда надо делать USB программатор. В принципе, тут тоже уже все давно придумано. Я собрал себе USB программатор AVR910. Вот официальный сайт его разработчика. Повторюсь, и приведу тут схему данного программатора.

Описание работы здесь не привожу, кто захочет, почитает на страничке автора. Единственный недостаток этого программатора — для прошивки контроллера программатора нужен программатор. Но, думаю где-нибудь найти компьютер с LPT портом, чтоб прошить контроллер хоть „5 проводками“, думаю еще можно!) Была разведена печатная плата, все смонтировано. На плате было выведено +5 вольт с USB порта для питания программируемого контроллера.
Светодиоды HL1 и HL2 загораются при чтении/записи контроллера, светодиод HL3 сигнализирует о подачи питания с USB порта. Перемычкой J1 LOW возможно понижать тактовую частоту порта SPI МК программатора до ~20 кГц. При разомкнутом джампере частота SPI нормальная, при замкнутом — пониженная. Cкорость работы порта SPI МК программатора при разомкнутом джампере J1 равна 187,5 кГц. Это позволяет программировать контроллеры с тактовой частотой примерно от 570 кГц для tiny/mega, 750 кГц для 90S и 7,5 МГц для 89S.
На вывод LED разъема выведен меандр с частотой 1 МГц для „оживления“ МК, у которых были ошибочно запрограммированы фьюзы, отвечающие за тактирование. Сигнал генерируется постоянно и не зависит от режима работы программатора.
Программатор позволяет программировать все контроллеры AVR, поддерживающие ISP (In System Programming — Программирование В Системе), а так же МК серии 89S — 89S53 и 89S8252.
Джампер J2-J3 служит как для начального программирования микроконтроллера (замкнут J2 — MOD), так и для использования в качестве разъема программатора (замкнут J3 — NORM)
Была разведена печатная плата.


Микроконтроллер ATmega8 в программаторе был взят в корпусе TQFP32, если использовать в корпусе DIP28, то следует учесть, что нумерация выводов у МК в корпусах TQFP отличается от нумерации выводов МК в корпусе PDIP-28.
Подключил собранный программатор к программатору STK 200/300, поставил джампер J2, воткнул кабель от программатора в USB порт, запустил Pony Prog и прошил.
Вот файл прошивки.
После система определит новое устройство — AVR910 USB Programmer, при предложении автоматически найти драйвер, отказаться, и указать путь к файлу prottoss.avr910.usb.inf Качаем его здесь.
Система начнет устанавливать драйвер. Если установка драйвера прервется и система попросит указать путь к файлу lowcdc.sys
то указываем где он у нас лежит, вот ссылка для скачивания данного файла. Система должна его увидеть и закончить установку драйвера.
Программатор установлен в системе. Теперь настроим его для работы в программе прошивальщике. К сожалению этот программатор не работает в программе Pony Prog. Работает он в таких программах:AVRProg v.1.4 (входит в пакет AVRStudio), ChipBlasterAVR v.1.07 Evaluation, AVROSP (ATMEL AVR Open Source Programmer), CodeVisionAVR.
Рассмотрим настройку данного программатора в программном пакете CodeVisionAVR.
Качаем ее тут. Теперь самое главное. Щелкаем левой кнопкой на значке „Мой компьютер“,
в выпадающем меню выбираем „Свойства“
Вот так получится:

переходим на вкладку „Оборудование“

запускаем „Диспетчер устройств“

Выбираем „Порты (COM и LPT)“. Видим там „Virtual Communications Port“ и в скобочках указан номер присвоенного порта, в моем случае это COM5. Запоминаем этот номер.
Теперь запускаем CodeVision AVR. В основном меню нажимаем кнопку „Setting“, в выпадающем меню нажимаем „Programmer“:

Появится вот такое окошко:

В самой первой строчке из списка выбираем наш AVR910, во второй строчке выставляем номер
Com порта, который смотрели в диспетчере оборудования. Остальное оставляем без изменений.
Все, программатор настроен. Теперь немного о том как прошить контроллер в CodeVision AVR.
Итак, в основном меню выбираем „Tools“, далее нажимаем „Chip Programmer“,

появится вот такое окошко:

Рассмотрим, что тут есть и как это работает.
Программатор уже должен быть подключен к Usb, а к программатору подключен контроллер,
в моем случае это будет Atmega 8.
В списке Chip выбираем наш контроллер, теперь нажимаем в меню сверху Read.

В этом меню мы можем запустить чтение содержимого контроллера. Пока, что нас интересуют два пункта, это FLASH и Fuse Bit(s). Если нажать на FLASH, то начнется чтение содержимого
FLASH памяти контроллера, на программаторе будет мигать зеленый светодиод. Итак, FLASH прочитана, а где же глянуть, что же там прочиталось. А вот где. Нажимаем в главном меню
Edit, а выпавшем списке FLASH.

Появится вот такое окно:

Вот, собственно, все содержимое FLASH памяти контроллера, тут можно и отредактировать,
если нужно определенные блоки. Но, пока тут все чисто, во всех ячейка — FFFF.
Если нужно прочитать Fuse Bit(s), то делаем следующее — Read — Fuse Bit(s). Пройдет чтение и вот в таком окошке появятся заводские фьюзы контроллера (если он новый):

С этим думаю, понятно. А как же здесь загрузить прошивку в контроллер. Тоже просто!
Сперва нужно указать сам файл прошивки, которым будем загружать в контроллер. Делается это так. выбираем в меню File, далее выбираем Load FLASH.

Жмем Load FLASH и в появившемся окне выбираем файл прошивки.

Нажимаем Открыть.
Теперь заходим в меню Program.

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

Запомните, если в квадратике, напротив названия фьюз бита стоит галочка, то фьюз бит не запрограммирован, если не стоит, то запрограммирован.
Когда выставили необходимые фьюз биты, то в пункте меню Program нажимаем Fuse Bit(s). Вот
теперь все. Можно еще раз прочитать содержимое FLASH и удостовериться, что все за программировалось.
Теперь немножко по доработке программатора AVR910. Когда я начал им пользоваться и активно шить контроллеры, то выявил один, вроде и не очень существенный недостаток.
Этот программатор достаточно медленно читает и прошивает контроллеры. Вроде, а куда спешить? Но бывает приходится по десять раз стирать и заново прошивать контроллер во время настройки устройства, вот тогда и надоедает ждать. Поискав по сети решение этой проблемы, нашел! Вот тут.
Автор там переделал прошивку самого программатора и теперь с этой прошивкой он работает намного шустрее. Перешивал при помощи того же STK200/300. Вот файл прошивки и драйвера для Windows. После перепрошивки так же устанавливаем драйвер, но только уже из архива, ссылка на который выше. В CodeVision AVR теперь настраиваем следующим образом:

Новая прошивка эмулирует теперь программатор STK 500. Вот такое превращение).
Далее работаем так же как и описывалось выше, но с заметным приростом скорости работы программатора.
Вот и все, что хотел рассказать. Конечно, все в одну статью не всунешь, так что если возникнут вопросы, задавайте! Думаю, статья поможет тем, кто только начинает осваивать
микроконтроллеры AVR!

19 комментариев

avatar
Спасибо за информацию по USB программатору! Хотелось бы еще статью по прошивке мк фирмы maxim (плюс разбор на чем писать софт и пару примитивных примеров эл.схем с этими мк). Думаю это актуально, так как производитель с радостью рассылает эти мк в виде семплов (мне вчера пришли пара штук).
avatar
Пока еще максимовские мк не щупал, не было пока необходимости, но можно будет и попробовать, а как сэмплы заказывали у них?
avatar
Написал в лс
avatar
Я заказывал семплы с Интерсил прислали за 5 дней. А как на меня то нам нужно создать отдельную статью на эту тему. Как и где брать халяву или очень дешево электронные компоненты. Также прошу отписаться кто еще заказывал в Украину, и как с доставкой.
avatar
Можно подробнее по Интерсил?
avatar
да, расскажите про Интерсил
avatar
Большое Спасибо за статью, лежит 3 меги 8ых и всё никак не сделаю программатор(((
Вопрос немного странный: а на что плату фотали?
avatar
та фоткал на телефон, фотик пока у меня отсутствует((
avatar
Просто моё фотографическое нутро заныло))
Немного дальше снимайте от объекта и он будет чётким ;)
avatar
появиться фотик просто перефоткаю, на телефоне камера паршивая, как не фоткай все равно такой результат)))
avatar
спасибо, давно хотел спаять пограматор
avatar
Программатор Громова тоже стоило бы упомянуть. 7 резисторов и 3 диода))) Для начала самое то. А пятью проводками можно запросто спалить ЛПТ.
avatar
ну так было сказано, что можно спалить… программатор громова потом добавлю, забыл за него, так как не пользовался им
avatar
уважаемый автор рассказано очень хорошо.я хотел попросит у вас помощи допустим скачали программу CodeVisionAVR вот как его УСТАНОВИТЬ? в наше молодые годы не было комп-ов по этому не смогли бы объяснить как на статье? мне надо прошить ATtiny26/а его программе в PONI PROG нету.для этой программы пишут нужно 2 программы мне нужен только для прошивки тоже обе программы надо да? какие именно программы не смогли бы написать желательно на почту могу отблагодарить почта iurynesterov@yandex.ru спасибо с/у юра
avatar
во-первых напишите какой у вас программатор
комментарий был удален
комментарий был удален
avatar
я извиняюсь тут написано что СТАВЛЕННАЯ ГАЛКА не прошито(1) это же не правильно что в пони что code vision ставленные наоборот прошито (0).допустим что новый контроллер считаем заводской запрограммированый фьюз который пршит на заводе на внутренний генератор стоит галка значит прошито или я ошибаюсь. с/у юра
avatar
у меня програматор постал 3 не пойму как программировать атмега8
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.