Atmel studio как прошить микроконтроллер

от admin

Программирование микроконтроллеров AVR с помощью программатора USBASP и Atmel Studio 7.0

Существует несколько способов программирования микроконтроллеров семейства AVR. В данной статье мы рассмотрим один из наиболее популярных в настоящее время способов программирования данных микроконтроллеров – с помощью программатора USBASP v2.0 и программы Atmel Studio 7.0. Хотя на нашем сайте уже есть достаточно подробные статьи про программатор USBASP и программу Atmel Studio 7.0 я все таки решил перевести с иностранного сайта и эту статью – вдруг кто то найдет в ней для себя что то интересное.

В данной статье будут рассмотрены следующие вопросы:

  1. Установка драйвера USBASP.
  2. Скачивание и установка Atmel Studio.
  3. Установка WinAVR для Atmel Studio.
  4. Установка микроконтроллера Atmega16 с кварцевым генератором и одним светодиодом.
  5. Создание и загрузка программного кода в Atmega16.

Рассмотрим подробно все эти вопросы. Установку драйвера для программатора USBASP будем рассматривать на примере операционной системы Windows10 – но все сказанное в этом разделе будет справедливо и для других версий Windows.

Установка драйвера для USBASP в Windows 10

Если вы используете интерфейс JTAG, вам может потребоваться установка драйвера для USBASP если он не установился автоматически. Если вы не установите этот драйвер, то вы не сможете найти порт USBASP в программе Atmel Studio. Скачать драйвер USBASP можно по этой ссылке — http://www.mediafire.com/file/z576zrku371qyjs/windows-8-and-windows-10-usbasp-drivers-libusb_1.2.4.0-x86-and-x64-bit.zip/file.

После скачивания драйвера выполните следующую последовательность действий:

1. Распакуйте из архива скачанные файлы и поместите их на рабочий стол.

2. Подсоедините модуль USBASP v2.0 к своему компьютеру.

3. Откройте в Windows диспетчер устройств (Device Manager).

4. Теперь вы можете увидеть подсоединенный USBASP в списке устройств.

USBASP в диспетчере устройств

5. Кликните правой кнопкой мыши по “USBasp” и выберите “Обновить драйвер (Update Driver)”.

Меню обновления драйвера для USBASP

6. Select “Произвести поиск драйвера на своем компьютере (Browse my computer for driver software)”.

Выбор способа обновления драйвера для USBasp

7. Найдите в открывшемся окне распакованную папку с драйвером для USBASP и щелкните «Открыть».

Выбор папки с драйвером для USBASP

8. Если установка драйвера прошла успешно, то вы увидите сообщение примерно такое же как на нижеприведенном рисунке – в этом случае вам уже не нужно выполнять дальнейшие инструкции в этом разделе статьи.

Драйвер для USBASP успешно установлен

9. Если вы увидите сообщение об ошибке как на приведенном рисунке, то вы в этом случае должны отключить цифровую подпись драйвера.

Произошла ошибка при установке драйвера для USBASP

Чтобы сделать выполните следующие шаги:

— нажмите кнопку Shift и удерживая ее нажатой перезагрузите свой компьютер (кликните Restart в меню Windows пока держите ее нажатой);

— когда ваш компьютер перезагрузится не отпускайте кнопку Shift до тех пор пока не увидите “Advanced Options (Расширенные настройки)” на синем экране;

Выбор расширенных настроек

— отпустите кнопку Shift и кликните на “Startup Settings”;

— кликните на “Troubleshoot (Устранение проблем)”;

Выбор устранения проблем

— выберите “Advanced Options (Расширенные настройки)”;

Выбор расширенных настроек при устранении проблем

— после этого вы увидите на экране список расширенных опций и кнопку “Restart” в правом нижнем углу – кликните на ней;

Список расширенных опций перезагрузки

— подождите пока компьютер снова перезагрузится. После этого вы увидите на экране ряд настроек;

— в открывшемся списке настроек выберите пункт “Disable Driver Signature Enforcement (Отключить цифровую подпись драйвера)”. Чтобы ее выбрать просто нажмите кнопку «7» на вашей клавиатуре (не путать с кнопкой «F7»);

Отключение цифровой подписи драйвера при перезагрузке

— после нажатия этой кнопки компьютер перезагрузится и цифровая подпись драйвера будет отключена;

— после этого снова выполните шаги 1-8 из данного раздела статьи и драйвер для программатора USBASP будет успешно установлен.

Скачивание и установка Atmel Studio

Выполните следующую последовательность действий:

2. Также вам необходимо скачать приложение WinAVR чтобы иметь возможность загружать программы в микроконтроллер AVR с помощью USBASP.

После этого вам необходимо создать тестовый проект в Atmel Studio 7.0. Для этого выполните нижеследующую последовательность действий.

3. Подсоедините USBASP v2.0 к USB порту вашего компьютера и подождите пока он правильно определится.

4. Откройте Atmel Studio.

5. Выберите пункт меню “File”, в нем “New” и выберите “project”.

Создание нового проекта в Atmel Studio

6. Теперь назовите ваш проект, выберите место расположения проекта и выберите компилятор “GCC C Executable Project”. Кликните на “Ok” и продолжайте.

Выбор компилятора в Atmel Studio

7. После этого вам будет необходимо выбрать ваше устройство для программирования. В нашем случае это будет микроконтроллер Atmega16A. Если вы будете программировать другие микроконтроллеры, например, Atmega8, Atmega32, то для их программирования также можно использовать программатор USBASP.

Выбор типа микроконтроллера в Atmel Studio

8. После этого для вас будет создан файл main.c, где вы можете писать ваш программный код.

Но после создания проекта финальный шаг, который вам необходимо выполнить – это установить внешние инструментальные средства (WinAVR).

Установка WinAVR в Atmel Studio

1. В пункте меню “Tools (Инструменты)” выберите “External Tools (Внешние инструменты)”.

Выбор внешних инструментов в Atmel Studio

2. У вас откроется окно, где вы должны будете ввести имя вашего инструментального средства.

3. В пункте “Title (название)” введите имя вашего внешнего инструментального средства. Можно выбрать любое имя, но в рассматриваемом примере мы выбрали имя “USBasp”. Поставьте галочку в пункте ”Use Output Window” и снимите галочку с пункта “Prompt for arguments” как показано на нижеприведенном рисунке.

4. Теперь ведите “Command”. Там будет необходимо указать путь к “avrdude.exe” – его вы можете найти в папке где установлена WinAvr. Просто найдите “WinAVR-20100110” на диске “C” вашего компьютера – куда вы устанавливали WinAvr.

5. Введите аргументы. Это самый важный шаг в этой последовательности действий поскольку от них будет во многом зависеть корректность работы приложения. Поскольку в рассматриваемом нами случае мы используем внешние инструментальные средства, то можно ввести следующие аргументы:

<avrdude -c usbasp -p atmega8 -U flash:w:$(ProjectDir)Debug\$(TargetName).hex:i>

6. Больше аргументов можно найти по этой ссылке.

7. Введите аргументы в поле для ввода аргументов. Оставьте поле “Initial directory (Начальный директорий)” без изменений.

Окно для ввода аргументов

8. После заполнения всех полей нажмите “Apply” и затем “Ok”.

В результате этих шагов вы сможете использовать внешние инструментальные средства чтобы загружать программы в микроконтроллер. Проверим это с помощью тестового проекта (программы) “blink.c”. Файл main.c вы можете найти в конце этой статьи. Теперь скопируйте main.c в Atmel studio.

Схема устройства с мигающим светодиодом для Atmega16

Схема устройства, которую необходимо собрать, приведена на следующем рисунке. Соедините кварцевый генератор и светодиод с микроконтроллером Atmega16.

Схема конструкции с мигающим светодиодом

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

Внешний вид макетной платы с собранной конструкцией

Также вы должны соединить микроконтроллер и USBASP как показано на следующей схеме:

Схема соединений USBASP и микроконтроллера AVR ATmega16

Компоновка и загрузка программного кода в Atmega16

1. Сохраните файл main.c.

2. Подсоедините светодиод к контакту PORTA0 микроконтроллера Atmega16 как было показано на вышеприведенном рисунке.

3. Выберите пункт меню “Build” и затем выберите “Build Blink”.

Компоновка проекта в Atmel Studio

4. Если программа не содержит ошибок, то вы увидите сообщение как на представленном рисунке.

Успешная компиляция проекта в Atmel Studio

5. Теперь выберите пункт меню “Tools” и выберите в ней созданные внешние инструментальные средства. В нашем случае это будет “USBasp”. Кликните по нему.

Выбор USBASP в Atmel Studio

6. Если после этого вы увидите сообщение об успешности операции (как показано на рисунке ниже), то значит вы успешно загрузили программу в микроконтроллер. Если вы получили сообщение об ошибке, то проверьте правильность выполнения всех предыдущих шагов, а также проверьте исправность соединительных проводов между USBASP и Atmega16.

Загрузка программы в микроконтроллер AVR с помощью программатора USBASP и Atmel Studio 7.0

7. Вы успешно загрузили тестовую программу с мигающим светодиодом в микроконтроллер используя USBASP v2.0 and Atmel Studio 7.0 и можете увидеть как мигает светодиод в собранной схеме. Теперь вы можете аналогичным образом загружать в микроконтроллер любые другие программы.

Использование программатора USBASP в Atmel Studio

Программатор AVR USB ASP ISP

Программатор USBASP является на сегодняшний день самым дешевым программатором микроконтроллеров AVR компании ATMEL и позволяет программировать большое множество микроконтроллеров серий AVR ATTiny, AVR ATMega и других. В данной статье я расскажу вам об основных особенностях использования этого программатора из под ОС Windows 7 и как настроить его работу совместно со средой разработки программ Atmel Studio на примере версии 6.1. К сожалению, по умолчанию, Atmel Studio не поддерживает этот программатор.

Установка драйвера программатора

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

Установка драйвера USBASP

Установка Avrdude

Для программирования микроконтроллеров AVR будем использовать программу Avrdude. Эта программа поддерживает большое количество программаторов, в том числе и USBASP. Этой программе посвящена отдельная страница в википедии.

Программа avrdude является консольной и запускается из командной строки. Для выполнения программирования ей передается набор параметров, определяющий настройки. Ниже приведен пример командной строки для программирования контроллера при помощи программатора USBASP:

Поясним основные параметры:

  • -c usbasp параметр определяет тип программатора, в нашем случае это usbasp;
  • -p atmega32 параметр определяет тип микроконтроллера, для примера использован ATmega32;
  • -U flash:w:myhexfile.hex параметр определяет hex файл для записи в контроллер. Файл должен располагаться либо в каталоге программы, либо необходимо указать полный путь к файлу;
  • -U lfuse:w:0x6a:m параметр определяет младший байт регистра Fuse;
  • -U hfuse:w:0xff:m параметр определяет старший байт регистра Fuse;

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

Avrdude имеет много разных функций, но в рамках данной статьи нам важен один режим ее работы, а именно заливка программы в микроконтроллер. Остальные функции вы сможете изучить в документации.

Настройка программирования из Atmel Studio

Как уже было упомянуто, Atmel Studio не поддерживает программатор USBASP. Однако в нее встроен механизм для запуска внешних программ для выполнения различных действий. Используя данный механизм внешних инструментов, программирование контроллера будет осуществляться одной кнопкой прямо из меню Atmel Studio.

В Atmel Studio открываем пункт меню Tools и выбираем пункт External tools.

В открывшемся окне настройки инструментов нажимаем кнопку Add для добавления нового инструмента. Заполняем следующие поля:

  • Title: произвольное имя инструмента, мы указали USBASP atmega32.
  • Command: файл запуска программы avrdude. Мы указали C:AVRDUDEavrdude.exe, так как у нас она размещена в каталогеAVRDUDE на диске С.
  • Arguments: параметры запуска для avrdude, которые мы рассмотрели выше. Мы задали строку -c usbasp -p atmega32 -U flash:w:$(TargetName).hex, в которой указали имя программатора, имя контроллера, и путь к файлу прошивки. Путь к файлу указан через специальные макросы и Atmel Studio подставит их сама. Мы не указали регистр Fuse в этом примере, но при необходимости вы можете добавить их самостоятельно.
  • Initial directory: указан макрос для подстановки каталога, в котором находится файл прошивки.
  • Use Output window: установите эту галочку для того, что бы результат работы программы показывался в окне Atmel Studio. Послу установки всех настроек нажмите кнопку OK для сохранения настроек и выхода.

Теперь, для программирования микроконтроллера достаточно зайти в меню Tools и нажать команду USBASP atmega32, которая там должна появиться после проделанных настроек. Программирование необходимо запускать после компиляции проекта, так как файл прошивки создается в процессе компиляции проекта.

Запуск программирования AVRASP

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

Программатор USBASP подключается к микроконтроллеру по стандартному интерфейсу ISP. Физически на программаторе интерфейс имеет 10 контактов. Большинство контактов объединены общим проводом. Назначение используемых контактов следующее:

  • MISO, MOSI, SCK, RESET — подключается к соответствующему выводу микроконтроллера;
  • GND – земля, подключается к мину или GND микроконтроллера;
  • VCC – используется для подачи питания на микроконтроллер.

На печатных платах модулей, где используются контроллеры AVR, разработчики очень часто располагают интерфейс SPI 6 контактов, позволяющий произвести внутрисхемное программирование контроллера. Такой интерфейс можно видеть даже на платах Arduino. Для подключения программатора к такому 6-и контактному интерфейсу можно использовать соединительные провода мама-мама или специальный переходник ISP10 в ISP6 для программатора AVR USBASP.

Atmel studio как прошить микроконтроллер

Как прошить микроконтроллер AVR? Именно этим мы и займемся в этой статье.

Что такое “прошить” и “прошивка”?

Давайте первым делом определимся, что означает слово “прошить”? Думаю, вы часто слышали такие словосочетания, как “прошить телефон”, “слетела прошивка”, “кривая прошивка” и тд. А что такое “прошивка”?

Прошивка – это грубо говоря, операционная система для маленьких устройств, таких как мобильный телефон, MP3-плеер, цифровой фотоаппарат и тд. То есть это небольшая программка, которая управляет этим устройством. Также часто можно услышать и такое:” У меня “глючит” сотовый телефон, его надо срочно “перепрошить“.

В данном случае это означает, что надо заново установить операционную систему на мобильный телефон. Значит, “прошить МК” означает закачать во внутрь него программу, которая бы управляла этим МК, а МК уже управлял бы каким-нибудь устройством. То есть по идее, МК – это посредник между программой и каким-либо устройством, которым надо управлять ��

Оборудование для прошивки МК

Итак, что нам потребуется, чтобы прошить МК?

  1. Cам микроконтроллер.
  2. Компьютер, с заранее установленным программным обеспечением (ПО).
  3. Программатор.
  4. Несколько джамперов.
  5. Макетная плата. Я бы порекомендовал сразу купить набор для начинающего AVRщика. Этот набор питается от USB.
  6. Прямые руки, растущие из нужного места.

Мы с вами договорились использовать МК Atiny2313 в корпусе DIP-20:

Подготовка МК к прошивке

В прошлых статьях мы с вами рассматривали программатор Громова. Главный его минус в том, что нам требуется COM-порт, который с трудом можно сейчас найти в компьютере, а разъем USB зато есть на каждом компьютере. Поэтому, было принято решение о покупке самого дешевого USB программатора для AVR МК. Называется такой программатор USBASP и выглядит он примерно вот так

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

Вот его вид сзади:

Его рабочий разъем выглядит примерно вот так:

С программатором также в придачу идет шлейф

который одним концом цепляется к рабочему разъему программатора:

Другой конец шлейфа мы будем цеплять к МК.

Если внимательно присмотреться, то можно узнать, какой вывод в разъеме является первым. Стрелка укажет на первый вывод разъема:

После того, как узнали, где находится первый вывод, можно без труда определить остальные выводы:

Дальше берем макетную плату с установленным на ней МК Tiny2313:

Итак, наша задача – соединить выводы МК с выводами программатора.

Для этого в разъем шлейфа втыкаем провода в гнезда MOSI, RST, SCK, MISO, VTG (VCC), GND. GND я взял 10 гнездо, можно и другое, где написано GND. Итого 6 проводков-джамперов:

Далее качаем даташит на наш МК. В данном случае у нас Tiny2313. Ищем в даташите лист с его цоколевкой:

VTG (он же VCC) цепляем к 20 ножке МК

SCK(UCSK) цепляем на 19 ножку МК

MISO цепляем к 18 ножке МК

MOSI на 17 ножку

GND на 10 ножку

RST на первую ножку

Должно получиться как-то вот так:

После первого включения программатора в разъем USB ПК, Диспетчер устройств нам выдаст новое устройство:

Не пугаемся, качаем вот этот архивчик, распаковываем его и указываем путь на него при установке “дров”. Когда “дровишки” на программатор установятся, то мы увидим что-то типа этого:

Все ОК, программатор готов к бою.

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

Она выглядит вот так. Не забываем выбрать наш МК в списке.

Для того, чтобы прошить МК, нам надо выбрать файл с расширением HEX. Итак, вот мой файлик. Первым делом я нажимаю кнопочку “Стереть все”. А вдруг кто-то уже использовал МК и там залита уже какая-нибудь программа? Поэтому, перед прошивкой стираем память МК. Если “стирка” прошла удачно, то программка выдаст нам примерно такое сообщение:

Прошиваем МК AVR

Нажимаем на кнопку выбора файла:

А теперь выбираем наш файл “Lesson 1.hex” . Это и есть наша программа.

А теперь жмем кнопочку “Программирование”

После того, как все прошло удачно, высветится что-то типа этого:

Но это еще не все! Как вы помните, в прошлой статье мы выставили частоту кварца 8 Мегагерц. Чтобы не было неразберихи, нам эту частоту теперь надо поделить на 8. Для этого существует фьюз, который делит тактовую частоту именно на 8. Ставим маркер на “прямые фьюзы”, потом ставим галочку на CKDIV.

После того, как сделали эти два шага, нажимаем на кнопку “Программирование”:

Проверяем МК в железе

Теперь собираем нашу схемку, о которой говорилось еще в прошлой статье:

и наслаждаемся результатом:

Прошиваем микроконтроллер AVR.

Как и чем прошить avr микроконтроллер.

1)Прежде всего для прошивки микроконтроллеров Atmel AVR необходим программатор, например для прошивки через USB-порт такой — USB ASP Программатор микроконтроллеров ATmega AVR

2)Теперь нужно установить драйвера для вышеприведенного программатора

Для этого устанавливаем программу eXtreme Burner — AVR, в процессе установки она автоматически установит правильные драйвера

Скачать можно здесь eXtremeBurnerAV_LampCORE_ru

3) Дальше требуется соединить микроконтроллер с программатором , быстрее и проще это сделать с Беспаечная макетная плата MB102 и с проводами-радугой с типом наконечников Male to Male или если программатор без шлейфа с наконечниками Female to Male

Соединять в соответствии с картинкой , приведенной ниже(Это для микроконтроллеров ATMEGA8, у других мк смотрите соответствующую им распиновку!):

Если беспаечной платы и проводов-радуги нет — то можно напрямую припаяться к выводам разъема программатора и к ножкам микроконтроллера для прошивки.

Обратите внимание, что контакт 22 — GND находится напротив по другую сторону мс контакта 7 — VCC, исходя из этого не нужно отсчитывать ножки микросхемы, а просто соединить контакт напротив по другую сторону микросхемы соответственно.

Соединение без макетной платы и с помощью обычных проводов

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

Паяем к микроконтроллеру в соответствии с распиновкой.

Удобнее паять таким паяльником — Паяльник GJ 907.

Или можно просто запихать в разъем шлейфа обычные провода, но при таком соединении возможен плохой контакт или его отсутствие.

Запускаем eXtreme Burner AVR , во вкладке Chip выбираем свой микроконтроллер(у нас ATmega8):

(Если при запуске у вас выдается сообщение — «не удается продолжить выполнение кода поскольку система не обнаружила libusb0.dll» то необходимо скачать и установить эти драйвера

вручную, запустив файл InstallDriver.exe )

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

(Если выдается ошибка Power On Failed

Cannot Communicate with Target Chip! значит , что какая или какие-либо ножки микроконтроллера не контактируют с программатором, логично проверить наличие контактов и исправить их отсутствие)

Flash — это прошивка

EEPROM — энергонезависимая память

Fuse Bits and Lock Bits — это настройка фьюзов, защиты, параметров микроконтроллера(например работать микроконтроллеру от внутренней частоты или от внешнего кварцевого резонатора, откуда брать опорное напряжение для АЦП и т.д.)

Если драйвера установлены, подсоединено всё правильно то имеем такой результат:

Мы считывали еще не прошитый микроконтроллер ATMEGA8, поэтому у нас будут считаны только нули(FFFF):

Попробуем прошить микроконтроллер

Прошивка микроконтроллера представляется в виде формата .HEX

Она мигает светодиодом на любом выводе D микроконтроллера ATmega, так как в прошивке задана установка всех портов D как выход.

Запускаем eXtreme Burner

Нажимаем Open и в файлах выбираем прошивку в формате HEX

Дальше должно быть так:

Для запуска прошивки выбираем вкладку Write(Запись) и нажимаем Flash, должен пойти процесс прошивки

Прошивка успешно завершилась:

Теперь считаем её

Жмем Read — Flash, получаем:

Как видно нули заменились другими цифрами и видно оставшееся пустое мето в памяти для прошивки.

Теперь отсоединим микроконтроллер от программатора и проверим работу прошивки на практике.

Собираем все по такой схеме:

Собрали, всё должно работать(светодиод мигает 2 раза в секунду):

Если светодиод не горит или наоборот горит постоянно — проверьте надежность контактов.

Внимание! Не вешайте напрямую нагрузку на ножки микросхемы с потреблением больше 25 мА!

Не подавайте на микросхему больше 5.5 Вольт.

Цикл перезаписи прошивки не бесконечен — есть определенный ресурс.Не стоит микроконтроллер использовать и перезаписывать как USB-флешку.

Прошиваем микроконтроллер AVR.

Как и чем прошить avr микроконтроллер.

1)Прежде всего для прошивки микроконтроллеров Atmel AVR необходим программатор, например для прошивки через USB-порт такой — USB ASP Программатор микроконтроллеров ATmega AVR

2)Теперь нужно установить драйвера для вышеприведенного программатора

Для этого устанавливаем программу eXtreme Burner — AVR, в процессе установки она автоматически установит правильные драйвера

Скачать можно здесь eXtremeBurnerAV_LampCORE_ru

3) Дальше требуется соединить микроконтроллер с программатором , быстрее и проще это сделать с Беспаечная макетная плата MB102 и с проводами-радугой с типом наконечников Male to Male или если программатор без шлейфа с наконечниками Female to Male

Соединять в соответствии с картинкой , приведенной ниже(Это для микроконтроллеров ATMEGA8, у других мк смотрите соответствующую им распиновку!):

Если беспаечной платы и проводов-радуги нет — то можно напрямую припаяться к выводам разъема программатора и к ножкам микроконтроллера для прошивки.

Обратите внимание, что контакт 22 — GND находится напротив по другую сторону мс контакта 7 — VCC, исходя из этого не нужно отсчитывать ножки микросхемы, а просто соединить контакт напротив по другую сторону микросхемы соответственно.

Соединение без макетной платы и с помощью обычных проводов

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

Паяем к микроконтроллеру в соответствии с распиновкой.

Удобнее паять таким паяльником — Паяльник GJ 907.

Или можно просто запихать в разъем шлейфа обычные провода, но при таком соединении возможен плохой контакт или его отсутствие.

Читать:
Где находится реле бензонасоса на газели

Запускаем eXtreme Burner AVR , во вкладке Chip выбираем свой микроконтроллер(у нас ATmega8):

(Если при запуске у вас выдается сообщение — «не удается продолжить выполнение кода поскольку система не обнаружила libusb0.dll» то необходимо скачать и установить эти драйвера

вручную, запустив файл InstallDriver.exe )

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

(Если выдается ошибка Power On Failed

Cannot Communicate with Target Chip! значит , что какая или какие-либо ножки микроконтроллера не контактируют с программатором, логично проверить наличие контактов и исправить их отсутствие)

Flash — это прошивка

EEPROM — энергонезависимая память

Fuse Bits and Lock Bits — это настройка фьюзов, защиты, параметров микроконтроллера(например работать микроконтроллеру от внутренней частоты или от внешнего кварцевого резонатора, откуда брать опорное напряжение для АЦП и т.д.)

Если драйвера установлены, подсоединено всё правильно то имеем такой результат:

Мы считывали еще не прошитый микроконтроллер ATMEGA8, поэтому у нас будут считаны только нули(FFFF):

Попробуем прошить микроконтроллер

Прошивка микроконтроллера представляется в виде формата .HEX

Она мигает светодиодом на любом выводе D микроконтроллера ATmega, так как в прошивке задана установка всех портов D как выход.

Запускаем eXtreme Burner

Нажимаем Open и в файлах выбираем прошивку в формате HEX

Дальше должно быть так:

Для запуска прошивки выбираем вкладку Write(Запись) и нажимаем Flash, должен пойти процесс прошивки

Прошивка успешно завершилась:

Теперь считаем её

Жмем Read — Flash, получаем:

Как видно нули заменились другими цифрами и видно оставшееся пустое мето в памяти для прошивки.

Теперь отсоединим микроконтроллер от программатора и проверим работу прошивки на практике.

Собираем все по такой схеме:

Собрали, всё должно работать(светодиод мигает 2 раза в секунду):

Если светодиод не горит или наоборот горит постоянно — проверьте надежность контактов.

Внимание! Не вешайте напрямую нагрузку на ножки микросхемы с потреблением больше 25 мА!

Не подавайте на микросхему больше 5.5 Вольт.

Цикл перезаписи прошивки не бесконечен — есть определенный ресурс.Не стоит микроконтроллер использовать и перезаписывать как USB-флешку.

AVR Programming

ATMEL’s AVR Series of Microcontrollers is a very good option for those who wish to use the microcontrollers to their true potential, exploiting every bit of functionality they can offer. Learning them requires you to sometimes indulge into the internal aspects of microcontrollers. Registers, Binary Numbers all play a major role in operating these microcontrollers in their hardcore form. They form the heart of the Arduino Microcontrollers you might have learned earlier.

The AVR Series has many microcontrollers which vary in their processing capacity(Speed) and Memory. Throughout this tutorial we shall consider ATMega16 as our sample.

(ATMega32: 8-bit AVR Processor, 16 kbytes flash memory)

Contents:

  • 1: Installation
    • 1.1: Download Atmel Studio
    • 1.2: Install Drivers
    • 1.3: Install on Linux
    • 2.1: Pins
    • 2.2: Registers
    • 2.3: Using the Datasheet
    • 3.1: Controlling Output
    • 3.2: Reading Input
    • 4.1: Boolean Algebra
    • 4.2: Bit Shifting
    • 4.3: Bit Masking
    • 5.1: Pre-scaling
    • 5.2: Registers for controlling timers/counters
    • 5.3: LED Blink Code
    • 6.1: Timer triggered interrupt
    • 9.1: Anatomy
    • 9.2: Controlling the LCD

    Installation

    In order to write the code for AVR, and to burn it to the microcontroller, we use the software provided by ATMEL: ATMEL Studio.

    We also need something that connects the microcontroller and the computer (by USB). This was very simple in case of Arduino because among its peripherals, there was an in-built USB slot. Here we will use a “Development Board”.

    image

    In the picture above, observe 2 main things:

    1. The Programmer, which is plugged in the computer USB slot: It is used for the development board-to-USB Slot interface.
    2. The Development Board: Provides an interface to connect pins with Jumpers to further circuitry and with the input of the programmer.

    After this let us move on to installation of ATMEL Studio.

    Download Atmel Studio
    Install Drivers

    After installing Atmel Studio 7, we need to install Drivers for the programmer. Refer to the following videos for the procedure.

    And for configuring the USBasp tool: Microcontroller Installing Atmel Studio

    Atmel Studio has the environment for writing and compiling the code for AVR Microcontrollers, but in order to program the microcontroller with a programmer (the chip with an LED at the USB slot in the above picture), we need to configure the software with a new tool. For this configuration, we must set up avrdude (Video 1).

    Now, for configuring the USBasp tool we need to set certain things since it is different than the normal USBs which we use at the ports. For this we need to configure the new external programming tool as specified in Video 2.

    These two steps are very important and it will not be possible to write the code to the AVR Microcontroller properly without getting these configurations right. Refer the given links properly and if you have any doubts you can ask on the Electronics Club Gitter Rooms.

    Installation for Linux

    You need to install three packages, gcc-avr , avr-libc and avrdude for compiling and burning to AVR microcontrollers

    On ubuntu you can run the command

    After that we have prepared a Makefile to compile and burn AVR code on linux. You can download the Makefile here.

    Copy this Makefile into your project folder and open it in a text editor. You need to edit the first line of the file to be PROJECT = <filename> . For eg. if the name of your main C file is test.c , your first line should be

    to compile the code and generate HEX file. Then run

    to burn HEX file to AVR after connecting USBasp.

    Basics of AVR

    Confronting the Pin Diagram of ATMega16 at this stage can be a little dangerous for your enthusiasm, so please proceed slowly.

    Apart from the Power pins, all the pins on AVR can be configured as Input or Output. These pins are present in four groups, or “Ports”, namely PortA, PortB, PortC, PortD. Every pin is given a name, like PA0,PB5 etc associated with its port. Besides every pin, its special function is mentioned in brackets. For example, all pins of PORTA can be used for ADC purpose apart from regular digital input/output. In this way each pin has a special function. So, we have 8×4=32 normal I/O pins, and 8 different pins meant for power supply, ADC voltage reference, reset etc.

    Pinout for ATmega16

    image

    Registers

    The microcontrollers(uC) use Registers to store the data describing the state(or mode) of certain operations(in most of our cases). For example, there is a register to store the “state/mode” of pins in every port, whether they are input or output pins. The Timer/Counter Control Registers(TCCR1A/B) store information regarding timers and counters(certain parameters etc). Similarly, there are many registers and they store bytes that control most of the functions of the microcontroller, so, the High/Low states of bits of those registers enable/disable interrupts, ADC etc.

    The first register we will see is the one I just described. It is called the Data Direction Register(DDR). Hence DDRA is the register(8-bits of data) showing Input/output states of the 8 pins in port A.

    Using the Datasheet

    Though very intimidating to look at, the datasheet can provide you with just the right information if you know how to use it, and if you know that you have to use ‘IT’.

    It is not at all necessary to read the complete datasheet, but there are portions in it which are at our level of understanding and there is also useful information which we will certainly need on our way.

    It contains the code for every register, i.e. which bit of the register stores data for what function and lot of other information which we will use.

    So keep the datasheet handy!

    Controlling Input and Output

    As stated earlier, one of the registers called Data Direction Register is used to control whether the pin acts as an Input pin or an Output pin.

    Thus we have four 8-bit registers:

    DDRA/B/C/D for controlling 8 pins each, of Ports A/B/C/D.

    The convention for setting the input/output bit is:

    1 — Output pin i.e. Controlled by Microcontroller

    0 — Input pin i.e. Controlled by external circuit

    Controlling the Output

    Now, for the Output Pins, in order to set them to the value we wish, we use another register PORTA/B/C/D. Thus PORTA is a 8-bit register, which stores the 8 bits corresponding to each pin of Port A(effectively only the Output pins) for whether to give it a HIGH or LOW state.

    Let us convey all this through a code snippet.

    Note: The order of pins is 76543210, i.e. Most Significant Bit corresponds to pin 7

    This tells the microcontroller that:

    • Line 1: Pins 0,2,3 of Port A should be declared as output pins and rest as input.
    • Line 2: Pins 0,2 should should give HIGH(Vin) and 3 should give LOW(0) output.

    The bits corresponding to input pins of present in PORTA don’t matter, that is PORTA is an Output only Register

    Reading the input

    For the input values, there is a similar Input only Register, PINA/B/C/D.

    The values of inputs are stored onto this 8-bit register, and in the code, we use this register with the comparison operator.

    Checks if the inputs on pins 7,6,5,4 and 1 are High,High,Low,Low and High respectively.

    Bitwise Operations

    Bit masking refers to accessing specific bits in a data and modifying them according to our needs. Bit operations are a way to implement masking.

    Bitwise Operators available in C are: AND ( & ), OR ( | ), XOR ( ^ ) and NOT (

    ). There are also bit shift operators viz. Bit left shift ( << ) and Bit right shift ( >> ) operators.

    Bitwise operators are the ones that are defined on 2 bits and hold for large binary number through bit-by-bit binary operations and defined on 2 bits.

    Boolean Algebra

    Works like regular logical AND(A.B). So, for PORTA = 0b01101111 = 0x6f and PORTB = 0b10011001 = 0x99 ,

    ) work in the same way. They are same as their logical functions for 2 bit operations, and for larger numbers(many bits) they are executed bit by bit using binary model for each bit pair(as shown in bitwise AND example).

    Bit Shifting

    As the name suggests these operation are used to shift the position of a bit by some particular places. If you use << then the bits are shifted to the left, and if you use >> then the bits are shifted to the right and the bits are shifted by the number of places return besides these symbols.

    Binary Left Shift Operator

    This shifts left operand value to left by number of bits specified in the right operand. In other words, Binary left shift moves bits to a specified number of places to the left. The least significant bit is appended with 0 and most significant bit is dropped. The value of the variable gets multiplied by 2 for every left shift that occurs.

    Then PORTA << 3 = 01111000;

    Binary Right Shift Operator

    This shifts left operand value to right by number of bits specified by the right operand. The most significant bit is appended with 0 and least significant bit is dropped.The value of the variable gets divided by 2 for every right shift that occurs.

    Usage in AVR

    Bit Operations are used very often, wherever the logical operations are required.

    Bit Shifting is very useful in setting only specific bits of registers without worrying about everything else on the register.

    If you wanted to turn on the lowest bit on PORTA, then you can simply write a 1 to PORTA because a 1, in 8 bit binary, is really 00000001.

    However, if you wanted to turn on the second lowest bit on PORTA, then an easy way to do it is with a bit shift:

    Means the same as

    Bit Masking

    Bits in registers are given names. We will discuss TCCR1B later here, but for the time being assume that a register has a bit named CS10. The usefulness comes out of the fact that you can set the CS10 bit High just by executing:

    That is, “CS10” acts as its numeric location on the register! Bit Masking is used to carry out operations on only specific bits from a number of many bits.

    Instead of TCCR1B = 1<<CS10 | 1<<CS11 , It is better to write: TCCR1B |= 1<<CS10 | 1<<CS11 . It lets the other bits stay as they are(OR with 0) and only sets the selected bits high(from low).

    Timers and Counters

    The operations in any microcontroller are “sequential” at heart, and so they all rely on clock-pulses. Hence the microcontrollers have internal clocks that keep ticking at the given rate, irrespective of anything else happening around them. They can also use external clocks for this same purpose.

    The timer and counter functions in the microcontroller simply count in sync with the microcontroller clock. But the counter has limitations due to its bit-capacity, i.e. a 8-bit counter can count only up to 256(or 0 to 255). So generally there is a 16-bit counter(65536 counts). The counts are stored in the most important Timer/Counter Register, TCNT1 (16-bit, by default).

    Pre-scaling

    Now compare the maximum count of a counter and the clock-ticks of a microcontroller. Standard AVR Microcontrollers generally operate at 1 Mhz, that is 1,000,000 ticks per second, which is much more than 65536!

    Hence, we need “prescaling” to increase the time-range of one cycle of the counter(they start all over again after attaining the max value) to a time comparable to our physical time domain(seconds). Prescaling is a way for the counter to skip some clock ticks.

    AVR Microcontrollers allow prescaling of: 8, 64, 256 and 1024.

    So, by setting a “Prescaler” of 8, the counter counts only once for every 8 ticks of the microcontroller clock, i.e. it runs at F_CPU/8 ( F_CPU = Frequency of uC).

    Registers for controlling timers/counters

    The register TCCR1A and TCCR1B (Timer/Counter Control Registers) are used for this. Please refer the datasheet for the description of the registers.

    image

    As you can see, all the 8-bits in the register are named.

    (No need of knowing the function of all the 8 bits at this stage, the relevant ones will be discussed next)

    Let us understand this through our first code on ATMEL Studio.

    First code: LED Blink

    Using the concepts learnt till now, we will write a program to toggle an LED 7 times a second.

    We will proceed in a way in which you will have to, when you are doing it yourself. That is, we will use the Datasheet for reference instead of direct steps given to you.

    How to choose the correct prescaler?

    The uC ticks 1,000,000 times a second. We want to toggle the LED 7 times a second. So, we want the LED to toggle on every 142857th clock pulse. Now, since 65536 (highest value of count) is smaller than 142857, we want to set a prescaler such that “the highest count comes well after the time when the original uC clock reaches 142857” (Read this line twice :p). 8, 64 are suitable prescalers. Let us take 64.

    Okay. I got the prescaler. Now how do I set that?

    Search “prescaler” and after some experience you will know where to look, among the numerous results you get for “prescaler” :p.

    image

    In the relevant table you will find the bit combination of CS12 / 11 / 10 required to set the prescaler we want. In our case: CS12 / 11 / 10 = 0 / 1 / 1 respectively. So we set the bits accordingly, using concepts of bit shifting and bit masking as discussed earlier.

    (I told you about TCCR1A / B earlier, but ideally you first discover CS12 / 11 / 10 and then find out that these bits are present on TCCR1B , going by the datasheet approach :p)

    When to toggle the LED?

    On every 142857th pulse of the uC clock. That is, when TCNT1 is at the 142857/64 = 2232 th count (for prescaler=64).

    After this background have a look at the actual code required for this.

    Theory of Interrupts

    Interrupts are events that have the highest priority for the microcontroller(it pays immediate attention to them). That is, when an interrupt event occurs, the microcontroller Pauses its current task and attends to the interrupt. This is done by executing a routine called Interrupt Service Routine(ISR). At the end of the ISR, the microcontroller returns to the task it had paused and continues normally. So ISR or Interrupt Handler is the piece of code that must be executed when an interrupt is triggered.

    Now, for enabling the execution of interrupts, we need to give appropriate values to certain bits, in certain specific registers. One compulsory bit is the Global Interrupt Enable bit. That is, when an interrupt flag is raised, the global interrupt bit must be High, in order to forward that interrupt request. So it is like an And-filter: “Request an interrupt if that specific interrupt flag is raised AND the global interrupt is enabled.”

    A “flag” is like the abstract-physical representation of a bit for an event :p

    Apart from the global interrupt enable bit, we have interrupt enabling bits for all the ways in which interrupts can be triggered. They can be triggered through the following ways:

    • ADC
    • Timer matching a given count
    • Pin being High/Low
    • Serial Communication

    image

    Timer triggered interrupt

    Now let us apply our theory in writing a code for triggering an interrupt when the timer reaches a certain count.

    We still need to know about the specific bits to be set for triggering an interrupt by comparison with timer. This is done by Clear Timer on Compare Mode.

    image

    See option 4. This mode clears(resets) the timer on matching with a given value.

    We also need to enable the time-match-triggered interrupt.

    image

    We will set OCIE1A bit High, thus enabling it. So, when the timer reaches the value specified(stored) in OCR1A , timer will be cleared (“Clear on Compare”) and the Output Compare Match Interrupt Enable becomes high (Interrupt flag raised).

    Once the and interrupt is requested(global interrupt must be enabled), uC will go into the ISR, so we will specify the code for the ISR also.

    Analogue-Digital Conversion

    Microcontrollers are capable of detecting binary signals i.e is the button pressed or not?.

    It interprets five volts as 1 and zero volts as 0. The world however is not so simple and likes to use shades of gray. What if the signal is 2.72V? A 5V analog sensor may output 0.01V or 4.99V or anything inbetween. Microcontrollers have a device built into them that allows us to convert these voltages into values that we can use in a program to make a decision.

    The ADC reports a ratiometric value. This means that if the ADC is a 10 bit ADC then it assumes 5V is 1023 and anything less than 5V will be a ratio between 5V and 1023. Hence we can see analog to digital conversions are dependant on the the reference voltage(which is by default the system voltage).

    In microcontrollers we have the flexibility of setting the reference analog voltage for the ADC.There’s a pin available on the microcontroller called as AREF which can be set to desired values and you can have your customized ADC. For example in a 10 bit ADC if the input voltage is equal to AREF then the ADC output is 1023. If the input voltage is less than AREF voltage then the ADC output is somewhere between 0 — 1023.

    As you know, we need to set certain bits in some registers in order to use ADC.

    • ADC Multiplexer Selection Register ( ADMUX ): For selecting the reference voltage and the input channel.
    • ADC Control and Status Register A ( ADCSRA ): As the name says it has the status of ADC and is also used for controlling it.
    • ADC Data Register ( ADCL and ADCH ): The final result of conversion is here.

    Here’s the logic flow for algorithm for using ADC:

    • Enable global interrupts
    • Selecting the correct clock frequency for maximum resolution ( 50 – 200 KHz)
    • Selecting the input pin
    • Set the ADC Interrupt Enable
    • Enabling the ADC
    • Start the ADC conversion

    The descriptions of these registers, and the relevant tables for deciding the bit combinations as given in the datasheet are shown below.

    Based on the tables that follow, which bits are set to what value for achieving what setting is mentioned in the code comments.

Похожие публикации