1) плата-программатор, которая является промежуточным устройством между разъёмом компьютера и самим чипом
2) Программа-программатор, которая будет знать как работать с программатором, собранным по конкретной схеме.
То есть нужно чтобы программа на ПК знала какая схема подключена к ПК чтоб правильно прошить чип. В моём случае это заводское решение — вместе с программатором PicKit идет диск с нужными программами.
Например у PIC16F877А их 40 штук, причем 7 штук вылетают сразу, т.к. используются для подачи питания, подключения резонатора и управления аварийным сбросом. Так же надо внимательно смотреть документацию на чип. Например тот же АЦП — в PIC16F877А он может измерять напряжение только на 8 конкретных ножках чипа, на других он это делать не может. То есть под каждую встроенную функцию отводятся конкретные выводы и поменять их нельзя.
 
 
 
Урок 1
Сегодня я решил поделиться с вами некоторыми своими знаниями в области программирования микроконтроллеров AVR. И неплохо, я думаю, начать изучение программирования микроконтроллеров именно с линейки AVR.
Почему именно с этой линейки?
Ну, может кто знает, может кто-то не знает, микроконтроллер AVR – это продукт компании Atmel.
Ну почему же всё-таки именно с линейки AVR?
Во-первых, микроконтроллеры AVR – они повсеместно доступны, они есть в любых магазинах, цена их невысока.
Во-вторых, из-за наличия многочисленного программного обеспечения для их программирования и прошивки, что тоже в наше время немаловажно.
То есть, при написании программ вы не будете нарушать ни чьих авторских прав.
В-третьих, ещё то, что именно потому, что по программированию именно данной линейки я имею в наличии больше всего знаний в своей голове и навыков.
Поэтому, будем программировать мы именно под микроконтроллеры AVR.
Начнём мы с такого представителя этой линейки, как микроконтроллер Atmega 8.
ATMEGA 8A
Почему именно с него, с Atmega 8?
Потому что, во-первых, он вполне себе такой полноправный микроконтроллер и недорогой.
Имеет на своём борту три порта ввода-вывода. Мы не будем здесь вдаваться в подробности, что такое порты. Вкратце, порты – это такие шины данных, которые работают в двух направлениях – и на вывод, и на ввод.
Порт B.
У порта B, он у нас неполный, имеет 6 ножек.
0, 1 ножка, 2, 3, 4 и 5. То есть, 6 ножечек.
Порт C также у нас неполный, от нулевой до шестой ножки.
Вот эту вот программку мы скачиваем, устанавливаем. Впоследствии мы будем создавать в ней свои проекты. А как создавать проекты, как писать код, мы с вами познакомимся на следующих занятиях. Так что пока, скачивайте, устанавливайте.
Программирование МК AVR Следующий урок
Смотреть ВИДЕОУРОК
Post Views: 22 200
Этот раздел посвящен микроконтроллерам семейства AVR: общие понятия, структура, основы программирования и так далее.
Здесь мы постараемся разобраться с принципом работы микроконтроллеров, его отдельными блоками, периферийными устройствами, прерываниями, памятью, таймерами, портами ввода-вывода и так далее…
Возможно что по-началу все эти вышеперечисленные понятия и покажутся вам «китайской грамотой», но при детальном изучении на самом деле все это довольно просто, и мы постараемся все это наглядно пояснить.
Итак, материалы раздела:
Введение
Общие сведения о AVR микроконтроллерах
Архитектура AVR микроконтроллера
Строение и характеристики AVR микроконтроллеров
Дребезг контактов. Что это такое и как с ним бороться
Функция RESET в AVR микроконтроллерах
Что такое фьюзы AVR микроконтроллеров
Что такое протоколы в AVR микроконтроллерах
Что такое прерывания в AVR микроконтроллерах
Порты ввода-вывода AVR микроконтроллера
Отладочная плата для микроконтроллера Attiy13
Программирование для начинающих. часть1
Программирование для начинающих. часть 2
Программирование для начинающих. часть3
Видеокурс по программированию AVR микроконтроллеров для начинающих
Простые проекты на AVR микроконтроллерах
Простые проекты на AVR микроконтроллерах. продолжение
Программа CodeVisionAVR
Программа UniProf
ISIS Proteus 7.7 SP2
Микроконтроллеры AVR семейства Tiny и Mega фирмы ATMEL
Применение микроконтроллеров AVR
Самоучитель разработчика устройств на микроконтроллерах AVR
Микроконтроллер AVR вводный курс
Микроконтроллер это просто
Микроконтроллеры AVR для начинающих
1) получить основные навыки работы с симулятором МК AVR — VMLAB
2) ознакомиться со способом текстового описания схемы симулируемого устройства — обвязки, обвески МК — значит того что к нему подключено. Внешние компоненты, подключенные к выводам МК описываются текстом на SPICE подомном языке.
3) проверить работу файла «прошивки»
z1.hex полученного в Задаче
01 — на соответствие тому, что мы
ожидали при написании исходного текста
программы на языке Си.
— Установленный в директорию по умолчанию (C:\VMLAB) программный эмулятор электроники, симулятор МК AVR — VMLAB — Visual Micro Lab
— предварительно нужно изучить-попробовать 6 примеров (step01_06) из папки C:\VMLAB\tutorial - запустить симулятор и открыть: «проект -> открыть проект» — файлы .prj
Посмотрите как происходит эмуляция работы электронного устройства содержащего МК. (Я очень подробно и с картинками рассмотрел симуляцию программы в VMLAB в задаче 3.)
— желательно иметь распечатанный постатейно Help симулятора (или хотя бы скомпилированный в один файл) — это очень облегчит его освоение.
— Файлы полученные в Задаче 01
— свободное время и желание.
Файл проекта в эмуляторе Visual Micro Lab — это обычный тестовый файл но с расширением .prj - поэтому можно создать его в любом текстовом редакторе не запуская пока сам симулятор.
1) Откройте текстовый редактор — Windows’овский notepad например — и кликните меню
«файл» -> «сохранить как» -> перейдите в папку C:\CVAVR\z1 в которой мы работали в Задаче 01 -> наберите осмысленное имя файла: z2_vm -> нажмите «Сохранить»
2) Теперь мы
должны наполнить этот файл содержанием.
Содержание буду писать на бледно желтом
фоне:
; Пожалуйста комментируйте свои
проекты ! ; Вот пример заголовочного комментария: ; Файл-проект для симуляции по задаче 2 ; МК как бы «прошит» файлом — z1.hex
.POWER VDD=5 VSS=0 ; Питание +5 вольт .CLOCK 4meg ; частота кварца 4 МГц
; нам достаточно описать пункт ж) ; 8 светодиодов подключаются «черточками» ; остальные пункты схемы считаются ; === Первый светодиод R1 D1_NODE PA0 560 ; ========================================= D2 VDD D2_NODE D3 VDD D3_NODE D4 VDD D4_NODE D5 VDD D5_NODE D6 VDD D6_NODE D7 VDD D7_NODE D8 VDD D8_NODE ; ========================================= |
3) Теперь скопируйте текст с желтого фона и вставьте в открытый текстовый файл и сохраните результат:
«файл» -> «сохранить»
Опять откройте меню
«файл» -> «сохранить как» ->
Вы увидите что наш файл z2_vm имеет расширение .txt — измените его на .prj
Всё ! Теперь у нас есть файл описания проекта для VMLAB — он в папке
C:\CVAVR\z1\z2_vm.prj
4) Запустите VMLAB и откройте созданный проект:
Project > Open Project
Перейдите в папку задачи 1
C:\CVAVR\z1\
и выберите файл z2_vm. prj проекта для VMLAB
5) Через меню View — откройте два
компонента:
SCOPE — это виртуальный запоминающий осциллограф симулятора
Control Panel — это
панель на которой содержатся нужные нам
светодиоды и
многое другое но пока
нам не нужное.
Через меню Window — откройте (обычно оно открывается сразу при открытии проекта) окно Code - в этом окне вы увидите текст симулируемой программы.
В нашем случае — в окне Code будет полный текст нашей программы на Си.
Вы сможете видеть как программа движется по исходному коду на Си по ходу симуляции ! Это исключительно удобно. Такую возможность нам дало включение в проект ссылок на файлы .cof и .c в VMLAB вы можете симулировать и ассемблерные программы и просто прошивки — файлы .hex (см. в примерах симулятора) Симуляция прошивки может пригодится когда вы хотите проверить прежде чем повторить чье-то устройство — а исходники программы не публикуются автором — выложена лишь прошивка. |
||
Обратите внимание на окно Messages — в нем появляются служебные сообщения симулятора по ходу работы — сделайте его небольшим и разместите где-то внизу экрана. Сворачивать его совсем бесполезно — так как каждое служебное сообщение будет разворачивать его на весь экран!
6) В меню Project запустите Re-Build all
…
В окне Messages должно появиться сообщение об успехе и что все готово к запуску. Кроме того на панели инструментов загорится зеленый светофор — это кнопка которой можно запускать симуляцию.
Нажатие зеленого светофора эквивалентно подаче «1» на вывод RESET МК при включенном питании, но еще не выполнявшем программу.
В окне Scope появились три графика для сигналов которые мы будем наблюдать. Установите масштаб по вертикали 2 вольта на деление, а по горизонтали 50 мС
В окне Сode появилось серое поле слева и зеленые квадратики напротив исполняемых строк кода программы на Си - кликнув по такому квадратику мы можем поставить точку останова программы. подробнее см. задачу 8.
Разместите
3 окна и
Control Panel на экране
компьютера так чтобы видеть их все.
7) Нажмите «светофор« для запуска симуляции программы.
Программа запустится и остановиться — в окне Messages появится сообщение.
Это симулятор сообщает свое мнение «как бы сделал он делал» — плюем на него и опять нажимаем на «светофор»
Симулятор опять останавливается и сообщает что произошел сброс от «сторожевого таймера МК» — мы не указали симулятору что не используем его вот он и сечет…
Опять нажимаем на «светофор« — теперь программа будет работать непрерывно, пока мы ее не остановим.
Пусть
программа симулирует а вы понаблюдайте
за
тем что происходит в указанных выше
окнах.
Во первых не горит светодиод D1 (это ножка МК PA0), а остальные светодиоды горят — т.е. как я и говорил практически мы видим счет от 1.
Ноль мы не увидим, так как он существует очень короткое время в начале программы, ведь в нашей программе мы делаем паузу ПОСЛЕ инкремента PORTA.
Но запоминающий осциллограф — SCOPE — позволяет нам остановить программу и посмотреть каковы были напряжения в начале ее работы !
8) Остановите симуляцию - щелкнув красный восьмиугольник
Перезапустите МК — кликнув по кнопке с круговой темно-синей стрелкой. Вы как бы отключаете и затем снова подаете питание на МК но создаете «0» на ножке RESET МК — значит программа не стартует!
Снова запустите симуляцию, кликнув светофор и затем кликнув еще 2 раза, дайте поработать 100 — 150 мС. И опять остановите щелкнув красный восьмиугольник
Теперь разверните окно SCOPE и установите разрешение по времени — 1 мкС
Затем движком горизонтальной прокрутки переместитесь к началу осциллограмм сигналов на ножках PA0_3 и в момент соответствующий 2.1 мС от начала симуляции вы сможете увидеть что все три сигнала имели уровень лог. «0»
Т.е. в точности по нашему алгоритму был момент когда все светодиоды горели и счет НЕгорящими светодиодами начался именно с НУЛЯ !
Давайте измерим как долго был этот «ноль».
Для измерения временного промежутка в окне SCOPE симулятора VMLAB нужно установить вертикальные курсоры 1 и 2 на границах измеряемого интервала и в поле Cursor delta time появится значение времени между двумя курсорами. Знайте ! Данные графиков симуляции в VMLAB между вертикальными метками вы можете сохранить в цифровом виде в файл, кнопкой «Export». Т.е. вы можете в другой программе сделать детальный анализ данных симуляции или построить графики в нужном масштабе. |
||
Я
ставлю 100 нС шаг по времени и затем
кликаю в кружочке курсора 1 и ставлю
вертикальный курсор на спаде сигнала на
PA0. Далее кликаю в кружке курсора 2 и
ставлю его правее, на фронте (переход
из «0» в «1») сигнала.
Как и было обещано в окне Cursor delta time показалось время:
2.2 мкС — вот столько горели все светодиоды после старта программы МК.
9) Восстановите прежний размер окна SCOPE и установите шаг по времени 20 мС нажмите снова «светофор« для продолжения симуляции программы.
Понаблюдайте за
окнами SCOPE и Code и за светодиодами.
Видите
…
В окне Code при симуляции возникают и растут желтые полосы подсвечивающие строки исполняемой программы. Длины этих подсветок пропорциональны времени которое программа выполняет код этих строк. |
||
Светодиоды переключаются себе не спеша …
А в окне SCOPE мы
видим осциллограммы сигналов соответствующие светодиодам D1_3
Напоминаю:
сигнал «0» — светодиод ГОРИТ
сигнал «1» — светодиод не ГОРИТ.
Естественно наиболее часто меняется сигнал на ноге PA0 — это ж младший бит в регистре PORTA — вот он инвертируется при каждом инкременте значения в порте_А.
Логично по времени между изменениями PA0 определить реальную величину паузы отрабатываемой нашей программой зашитой в МК.
Как измерить время я описал чуть выше!
Делайте так же.
Удобно поставить курсоры предварительно при существующем масштабе времени. Затем с помощью клика по Zoom in увеличить максимально место установки курсора 2 и поставить его точней. Опять вернуться к прежнему масштабу и с помощью Zoom in увеличить максимально место установки курсора 1 и откорректировать его положение. При измерении коротких повторяющихся интервалов можно мерить время сразу нескольких, а результат поделить затем на число таких интервалов между измерительными курсорами. |
||
Я
измерил время 4 промежутков между
изменениями
сигнала на PA0 — оно составило 262.1 мС
После деления на 4 получаем что уровень на PA0 меняется каждые 65525 мкС — это очень близко к рассчитанному нами в задаче 1 и ожидаемому периоду 65,536 мС.
Как точно подогнать временные промежутки отрабатываемые МК читайте в задаче 6
Думаю
мы вправе сделать вывод что
МК работает в
соответствии с ТЗ, алгоритмом и с исходной программой
на Си.
Цель
задачи достигнута !
Пожалуйста не ленитесь —
выполните:
Задание по Задачам 01 и 02
Измените программу на Си так, чтобы двоичный код показывали горящие светодиоды, а видимый счет начинался с нуля — т.е. при запуске программы все светодиоды были бы выключены 65 мс.
поверьте, это не сложно но полезно сделать!
Для
изменения Си кода программы просто
запустите компилятор CodeVisionAVR
(VMLAB
выключать не нужно!) Затем перейдите в VMLAB сделайте глубокий рестарт и затем ReBuid all Все! Изменения внесены и все опять готово к симуляции. Таким образом компилятор и симулятор работают одновременно в одной папке проекта и не мешают а помогают друг другу. |
||
Если не получается, подумай:
1. Можешь ли ты нарисовать на бумаге
схему, как подключены
светодиоды к МК (это
текстом описано выше).
2. Если да, то понял ли ты что нужно чтобы светодиод загорелся?
3. Понял ли ты как происходит изменение: светодиод горит — не горит?
4. Подумай что надо сделать МК, что бы горящий светодиод потух?
5. Если понял, то как программно это можно сделать для одного св.диода ?
Посмотри в руководстве Си
для МК какие
операции
помогут это сделать.
Выпиши на бумагу подходящие — нужно точно понимать что они делают.
6. Теперь подумай как это сделать для всех св. диодов сразу.
Решений может быть несколько, а
достаточно и
одного — оно поразительно просто!
Файлы
проекта к задаче 2 вы можете
скачать одним архивом z2.rar
Дальше -> Задача 3
Краткий курс — AVR на примерах.
Цель курса
показать на практике — как
быстро начать Даже с абсолютного нуля знаний о микропроцессорах. Рассказать
вам кратко ключевые моменты
устройства МК,
Объяснить что конкретно нужно сделать чтобы МК Курс подробно рассказывает как сделать самые первые шаги, — Как сделать нужное вам электронное устройство, печатную плату — Как написать первую, простейшую программу для МК — Как запустить эту программу в
программе-симуляторе МК и увидеть
как — Как загрузить программу в реальный МК — Как
отладить реальное устройство — т.е. найти причины
не правильной работы
Содержание. Краткий курс — самоучитель Микроконтроллеры AVR начинающим. на заглавной странице - avr123.nm.ru
стр. 2. Что такое МК и AVR в частности. Как работает МК. стр.
3. Возможности МК. Что и как подключать к
МК. Регистры и стр. 4. Компиляторы и Симуляторы для МК AVR. стр. 5. Си для МК — очень малая часть языка достаточна для работы с МК. стр.
6. Задачи-упражнения
по курсу — это практические занятия по
работе стр. 7. Как и чем прошить (прожечь, загрузить) программу в МК AVR, ATmega стр. 8. Дополнительные, полезные материалы стр. 9. О великолепных МК серии PIC12, PIC16, PIC18 от компании MicroChip
ПРОДОЛЖЕНИЕ КУРСА
НА AVR123.nm.ru
Пожалуйста перейдите туда !
Шаг 1. Скачайте всего две программы — компилятор CodeVisionAVR (2 Мб FREE - он бесплатный) — симулятор AVR и электроники VMLAB (4,2 Мб FREE) Установите эти программы по-умолчанию.
От
интерактивного помошника для
создания начального кода, До
написания
и отладки полной программы с постоянным контролем её
Шаг 2. Посмотрите как всё просто ! Лучше один раз увидеть чем сто раз услышать.
2. Запустите VMLAB и
через меню Project -> open project
откройте проект 3.
Сверните мешающее окно vmlab.prj и подправьте «мышкой» остальные окна
4. Теперь в меню «Project» кликните «Re-build all» — проект нужно перекомпилировать при открытии и внесении каких либо изменений. В окне «Messages» появится сообщение «Success! All ready to run»
Это значит ошибок
нет и все готово к моделированию микроконтроллера
Можно запускать симуляцию …
ПРОДОЛЖЕНИЕ КУРСА
НА AVR123.nm.ru
Пожалуйста перейдите туда !
Вы не покупали МК ATmega16 — у вас его нет ! Вы ни чего не паяли и не подключали ! Но вы увидели как работает МК и программы. Получили осциллограммы работающего устройства. Могли записать в файл то что передавал МК.
К вашим услугам ссылки на дополнительные материалы : — FAQ
— ответы на вопросы по AVR и по электронике — Проекты на AVR студентов Корнельского университета — великолепные
—
Проекты очень
интересный талантливого человека Элм-Чена
— Книги по AVR и
электронике вообще <-
ЧИТАТЬ !!!
— GOOGLE находит всё ! Вводите интересующие вас ключевые слова. — Translate.ru переведет то что вы нашли на корявый русский язык.
© 2004-2010 by Termo
В «подвале» есть интересное !
|
AVR |
Микроконтроллер — микросхема, предназначенная для управления электронными устройствами.
AVR – это название популярного семейства микроконтроллеров, которое выпускает компания Atmel. Кроме АВР под этим брендом выпускаются микроконтроллеры и других архитектур, например, ARM и i8051.
Какими бывают AVR микроконтроллеры?
Существует три вида микроконтроллеров:
Самым популярным уже более десятка лет является именно 8-битное семейство микроконтроллеров. Многие радиолюбители начинали изучать микроконтроллеры с него. Почти все они познавали мир программируемых контроллеров делая свои простые поделки, вроде светодиодных мигалок, термометров, часов, а также простой автоматики, типа управления освещением и нагревательными приборами.
Микроконтроллеры AVR 8-bit в свою очередь делятся на два популярных семейства:
Самым мощным подсемейством микроконтроллеров является xMega – эти микроконтроллеры выпускаются в корпусах с огромным количеством пинов, от 44 до 100. Столько необходимо для проектов с большим количеством датчиков и исполнительных механизмов. Кроме того, увеличенный объем памяти и скорость работы позволяют получить высокое быстродействие.
Расшифровка: Пин (англ. pin – иголка, булавка) – это вывод микроконтроллера или как говорят в народе – ножка. Отсюда же слово «распиновка» — т.е. информация о назначении каждой из ножек.
Для чего нужны и на что способны микроконтроллеры?
Микроконтроллеры применяются почти везде! Практически каждое устройство в 21 веке работает на микроконтроллере: измерительные приборы, инструменты, бытовая техника, часы, игрушки, музыкальные шкатулки и открытки, а также многое другое; одно лишь перечисление займет несколько страниц текста.
Разработчик может использовать аналоговый сигнал подовая его на вход микроконтроллера и манипулировать с данными о его значении. Эту работу выполняет аналогово-цифровой преобразователь (АЦП). Данная функция позволяет общаться пользователю с микроконтроллером, а также воспринимать различные параметры окружающего мира с помощью датчиков.
В распространенных AVR-микроконтроллерах, например, Atmega328, который на 2017 году является сердцем многих плат Arduino, но о них позже. Используется 8 канальный АЦП, с разрядностью 10 бит. Это значит вы сможете считать значение с 8 аналоговых датчиков. А к цифровым выводам подключаются цифровые датчики, что может быть очевидным. Однако цифровой сигнал может являться только 1 (единицей) или 0 (нулем), в то время как аналоговый может принимать бесконечное множество значений.
Пояснение:
Разрядность – это величина, которая характеризует качество, точность и чувствительность аналогового входа. Звучит не совсем понятно. Немного практики: 10 битный АЦП, записать аналоговую информацию с порта в 10 битах памяти, иначе говоря плавно изменяющийся цифровой сигнал микроконтроллером распознается как числовое значение от 0 до 1024.
12 битный АЦП видит тот же сигнал, но с более высокой точностью – в виде от 0 до 4096, а это значит, что измеренные значения входного сигнала будут в 4 раза точнее. Чтобы понять откуда взялись 1024 и 4096, просто возведите 2 в степени равную разрядности АЦП (2 в степени 10, для 10 разрядного и т.д.)
Чтобы управлять мощностью нагрузки к вашему распоряжению есть ШИМ-каналы, их можно задействовать, например, для регулировки яркости, температуры, или оборотов двигателя. В том же 328 контроллере их 6.
В общем структура AVR микроконтроллера изображена на схеме:
Все узлы подписаны, но всё же некоторые названия могут быть не столь очевидными. Давайте рассмотрим их обозначения.
Выходы микроконтроллера довольно слабые, имеется в виду то, что ток через них обычно до 20-40 миллиампер, чего хватит для розжига светодиода и LED-индикаторов. Для более мощной нагрузки – необходимы усилители тока или напряжения, например, те же транзисторы.
Что нужно чтобы начать изучение микроконтроллеров?
Для начала нужно приобрести сам микроконтроллер. В роли первого микроконтроллера может быть любой Attiny2313, Attiny85, Atmega328 и другие. Лучше выбирать ту модель, которая описана в уроках, по которым вы будете заниматься.
Следующее что Вам нужно – программатор. Он нужен для загрузки прошивки в память МК, самым дешевым и популярным считается USBASP.
Немногим дороже, но не менее распространенный программатор AVRISP MKII, который можно сделать своими руками – из обычной платы Arduino
Другой вариант – прошивать их через USB-UART переходник, который обычно делается на одном из преобразователей: FT232RL, Ch440, PL2303 и CP2102.
В некоторых случаях для такого преобразователя используют микроконтроллеры AVR с аппаратной поддержкой USB, таких моделей не слишком много. Вот некоторые:
Одно лишь «но» – в память микроконтроллера предварительно нужно загрузить UART бутлоадер. Разумеется, для этого все равно нужен программатор для AVR-микроконтроллеров.
Интересно: Bootloader – это обычная программа для микроконтроллера, только с необычной задачей – после его запуска (подключения к питания) он ожидает какое-то время, что в него могут загрузить прошивку. Преимуществом такого метода – можно прошить любым USB-UART переходником, а они очень дешевы. Недостаток – долго загружается прошивка.
Для работы UART (RS-232) интерфейса в микроконтроллерах AVR выделен целый регистр UDR (UART data register). UCSRA (настройки битов приемопередатчика RX, TX), UCSRB и UCSRС – набор регистров отвечающие за настройки интерфейса в целом.
В чем можно писать программы?
Кроме программатора для написания и загрузки программы нужно IDE – среда для разработки. Можно конечно же писать код в блокноте, пропускать через компиляторы и т.д. Зачем это нужно, когда есть отличные готовые варианты. Пожалуй, один из наиболее сильных – это IAR, однако он платный.
Официальным IDE от Atmel является AVR Studio, которая на 6 версии была переименована в Atmel studio. Она поддерживает все микроконтроллеры AVR (8, 32, xMega), автоматически определяет команды и помогает ввести, подсвечивает правильный синтаксис и многое другое. С её же помощью можно прошивать МК.
Наиболее распространённым является — C AVR, поэтому найдите самоучитель по нему, есть масса русскоязычных вариантов, а один из них — Хартов В.Я. «Микроконтроллеры AVR. Практикум для начинающих».
Самый простой способ изучить AVR
Купите или сделайте своими руками плату Arduino. Проект ардуино разработан специально для учебных целей. Он насчитывает десятки плат различных формами и количеством контактов. Самое главное в ардуино – это то что вы покупаете не просто микроконтроллера, а полноценную отладочную плату, распаянную на качественной текстолитовой печатной плате, покрытой маской и смонтированными SMD компонентами.
Самые распространенные – это Arduino Nano и Arduino UNO, они по сути своей идентичны, разве что «Нано» меньше примерно в 3 раза чем «Уно».
Несколько фактов:
Выводы
Микроконтроллеры станут отличным подспорьем в вашей радиолюбительской практике, что позволит вам открыть для себя мир цифровой электроники, конструировать свои измерительные приборы и средства бытовой автоматики.
Ранее ЭлектроВести писали, что в аэропорту «Борисполь» запустили первое электрозарядное устройство на два паркоместа. Об этом сообщил на своей странице в Facebook заместитель гендиректора аэропорта Георгий Зубко.
По материалам: electrik.info.
Приведен и подробно разобран пример простой программы для AVR микроконтроллера на языке Ассемблер (Assembler). Собираем простую схему на микроконтроллере для мигания светодиодами, компилируем программу и прошиваем ее в микроконтроллер под ОС GNU Linux.
Содержание:
Итак, у нас уже есть настроенный и подключенный к микроконтроллеру программатор, также мы разобрались с программой avrdude, изучили ее настройки и примеры использования. Пришло время разработать свою первую программу, которая будет выполнять какие-то реальные действия с AVR микроконтроллером (МК).
Писать программу мы будем на языке программирования Ассемблер (Assembler, Asm). Основной ее задачей будет заставить поочередно и с установленной задержкой мигать два разноцветных светодиода (красный и синий), имитируя таким образом полицейскую мигалку.
В результате у вас получится простая электронная схема, которую можно вмонтировать в какой-то пластмассовый макет полицейского автомобиля и подарить ребенку для забавы.
Понятное дело что подобную мигалку можно реализовать на основе простого мультивибратора на двух транзисторах с конденсаторами. Микроконтроллер же вам предоставляет намного больше возможностей.
Используя один чип можно оживить полицейскую мигалку + заставить раз в несколько секунд мигать модель авто фарами, добавить различные звуковые эффекты, научить модельку ездить реагируя на препятствия и многое другое.
Первый инструмент, который нам понадобится — редактор исходного кода, здесь можно использовать любой текстовый редактор. В одной из прошлых статей мы рассматривали настройку среды разработки программ Geany для программирования AVR микроконтроллеров с использованием языков Ассемблера и Си.
В принципе там уже все готово, останется написать код программы и поочередным нажатием двух кнопок (Compile-Flash) скомпилировать и прошить программу в микроконтроллер.
Несмотря на то что у вас уже может быть настроена среда Geany, я приведу все консольные команды которые необходимы для компиляции и прошивки нашей программы в МК.
Для понимания того что из себя представляет наша конструкция, для которой мы будем писать программу, приведу ниже принципиальную схему устройства.
Рис. 1. Принципиальная схема мигалки на светодиодах и микроконтроллере ATmega8.
Примечание: принципиальная схема нарисована за несколько минут в программе Eeschema, которая входит в комплекс программ EDA(Electronic Design Automation) KiCAD (для Linux, FreeBSD, Solaris, Windows). Очень мощный профессиональный инструмент, и что не мало важно — свободный!
Схема устройства состоит из микроконтроллера ATmega8 и двух светодиодов, которые подключены через гасящие резисторы. К микроконтроллеру подключен ISP-коннектор для осуществления программирования через программатор. Также предусмотрены клеммы для подключения внешнего источника питания напряжением 5В.
То как выглядит данная схема в сборе на макетной баспаечной панели (BreadBoard) можно посмотреть на рисунке ниже:
Рис. 2. Конструкция светодиодной мигалки на микроконтроллере ATmega8.
К микроконтроллеру подключен программатор USBAsp, используя ISP интерфейс, от него же и будет питаться наша экспериментальная конструкция. Если нужно запитать конструкцию от внешнего источника питания напряжением 5В то достаточно его подключить к + и — линиям питания панели.
Разработанная нами программа будет попеременно зажигать и гасить два светодиода. Светодиоды подключены к двум пинам PD0 и PD1 микроконтроллера.
Ниже приведен исходный код программы на Ассебмлере(Assembler, Asm) для микроконтроллера ATmega8. Сохраните этот код в файл под названием leds_blinking.asm для последующей работы.
; Светодиодная мигалка на микроконтроллере ATmega8
; https://ph0en1x.net
.INCLUDEPATH "/usr/share/avra/" ; путь для подгрузки INC файлов
.INCLUDE "m8def.inc" ; загрузка предопределений для ATmega8
.LIST ; включить генерацию листинга
.CSEG ; начало сегмента кода
.ORG 0x0000 ; начальное значение для адресации
; -- инициализация стека --
LDI R16, Low(RAMEND) ; младший байт конечного адреса ОЗУ в R16
OUT SPL, R16 ; установка младшего байта указателя стека
LDI R16, High(RAMEND) ; старший байт конечного адреса ОЗУ в R16
OUT SPH, R16 ; установка старшего байта указателя стека
.equ Delay = 5 ; установка константы времени задержки
; -- устанавливаем пины PD0 и PD1 порта PORTD (PD) на вывод --
LDI R16, 0b00000011 ; поместим в регистр R16 число 3 (0x3)
OUT DDRD, R16 ; загрузим значение из регистра R16 в порт DDRD
; -- основной цикл программы --
Start:
SBI PORTD, PORTD0 ; подача на пин PD0 высокого уровня
CBI PORTD, PORTD1 ; подача на пин PD1 низкого уровня
RCALL Wait ; вызываем подпрограмму задержки по времени
SBI PORTD, PORTD1 ; подача на пин PD1 высокого уровня
CBI PORTD, PORTD0
RCALL Wait
RJMP Start ; возврат к метке Start, повторяем все в цикле
; -- подпрограмма задержки по времени --
Wait:
LDI R17, Delay ; загрузка константы для задержки в регистр R17
WLoop0:
LDI R18, 50 ; загружаем число 50 (0x32) в регистр R18
WLoop1:
LDI R19, 0xC8 ; загружаем число 200 (0xC8, $C8) в регистр R19
WLoop2:
DEC R19 ; уменьшаем значение в регистре R19 на 1
BRNE WLoop2 ; возврат к WLoop2 если значение в R19 не равно 0
DEC R18 ; уменьшаем значение в регистре R18 на 1
BRNE WLoop1 ; возврат к WLoop1 если значение в R18 не равно 0
DEC R17 ; уменьшаем значение в регистре R17 на 1
BRNE WLoop0 ; возврат к WLoop0 если значение в R17 не равно 0
RET ; возврат из подпрограммы Wait
Program_name: .DB "Simple LEDs blinking program"
Кратко рассмотрим приведенный выше код и построчно разберем его структуру. Выполнение программы происходит по порядку — с верху кода и к низу, учитывая при этом метки, переходы с возвратами и условия.
Все строки и части строк, которые начинаются с символа «;» — это комментарии. При компиляции и выполнении программы такие строчки игнорируются, они служат для документирования и примечаний.
При помощи директивы «.INCLUDEPATH» мы указываем путь «/usr/share/avra/», по которому компилятору нужно искать файлы для включения их в текущий файл с использованием директив «.INCLUDE«. В нашем примере подключается файл, полный путь к которому будет выглядеть вот так: «/usr/share/avra/m8def.inc».
Директива «.LIST» указывает компилятору о необходимости генерирования листинга с текущего места в коде, отключить генерирование можно директивой «.NOLIST». Листинг представляет собой файл в котором содержится комбинация ассемблерного кода, адресов и кодов операций. Используется для отладки и других полезных нужд.
Директива «.CSEG» (CodeSEGment) определяет начало программного сегмента (код программы что записан во флешь-память) — сегмента кода. Соответственно все что размещено ниже этой директивы относится к программному коду.
Для определения сегмента данных (RAM, оперативная память) или памяти EEPROM используются директивы «.DSEG» и «.ESEG» соответственно. Таким образом выполняется распределение памяти по сегментам.
Каждый из сегментов может использоваться в программном коде только раз, по умолчанию если не указана ни одна из директив используется сегмент кода (CSEG).
При помощи директивы «.ORG» компилятору указывается начальный адрес «0x0000» сегмента, в данном случае мы указали начальный адрес сегмента кода. В данной программе эту директиву можно было бы и не использовать, поскольку по умолчанию адрес программного кода всегда 0x0000.
Дальше в коде происходит инициализация стека. Стек (Stack) — это область памяти (как правило у всех AVR чипов размещается в SRAM), которая используется микропроцессором для хранения и последующего считывания адресов возврата из подпрограмм, а также для других пользовательских нужд.
При вызове подпрограммы flhtc nt записывается в стек и начинается выполнение кода подпрограммы. По завершению подпрограммы (директива RET)
Стек работает по принципу LIFO (Last In — First Out, последним пришёл — первым вышел). Для адресации вершины стека используется указатель стека — SP (Stack Pointer), это может быть однобайтовое или двухбайтовое значение в зависимости от доступного количества SRAM памяти в МК.
При помощи инструкции «LDI» мы загружаем в регистр R16 значение младшего байта конечного адреса ОЗУ «Low(RAMEND)» (предопределенная константа в файле m8def.inc что содержит адрес последней ячейки SRAM), а потом при помощи инструкции OUT выполняем загрузку данного значения из регистра R16 в порт SPL (Stack Pointer Low). Таким же образом производится инициализация старшего байта адреса в указателе стека SPH.
Инструкция LDI используется для загрузки старшего и младшего значений из константы в регистр общего назначения. А инструкция OUT позволяет выполнить операцию загрузки с немного иной спецификой — из регистра общего назначения в регистр периферийного устройства МК, порт ввода-вывода и т.п.
Если не произвести инициализацию стека то возврат из подпрограмм станет невозможным, к примеру в приведенном коде после выполнения инструкции перехода к подпрограмме «RCALL Wait» возврат не будет выполнен и программа не будет работать как нужно.
Директива «.equ» выполняет присвоение указанному символьному имени «Delay» числового значения «5», по сути мы объявили константу. Имя константы должно быть уникальным, а присвоенное значение не может быть изменено в процессе работы программы.
Дальше мы устанавливает два канала (пины PD0, PD1) порта DDRD (PortD) на вывод, делается это загрузкой двоичного значения 0b00000011 (0x3, число 3) в регистр R16 с последующим выводом этого значения из него в порт DDRD при помощи команды OUT.
По умолчанию все каналы (пины) порта настроены на ввод. При помощи двоичного числа 0b00000011, где последние биты установлены в 1, мы переводим каналы PD0 и PD1 в режим вывода.
Начиная с метки «Start:» начинается основной рабочий цикл нашей программы, эта метка послужит нам для обозначения начального адреса основного цикла и позже будет использована для возврата.
При помощи инструкции «SBI» выполняем установку бита PORTD0 (предопределен в файле m8def.inc) в порте PORTD чем установим на пине PD0 высокий уровень. Используя инструкцию «CBI» выполняется очистка указанного (PORTD1) бита в порте PORTD и тем самым устанавливается низкий уровень на пине PD1.
Дальше с помощью инструкции RCALL выполняем относительный вызов подпрограммы которая начинается с метки «Wait:«. Здесь для запоминания адреса возврата уже используется стек, который мы инициализировали в начале программы.
После завершения подпрограммы (в нашем случае ее функция — задержка по времени) программа вернется к позиции где был выполнен вызов подпрограммы (адрес возврата будет получен из стека) и с этого места продолжится выполнение последующих операторов.
После вызова подпрограммы задержки «Wait» следуют вызовы инструкций SBI и CBI в которых выполняется установка битов порта PORTD таким образом, что теперь на пине PD0 у нас будет низкий уровень, а на пине PD1 — высокий.
По завершению этих инструкций следует еще один вызов подпрограммы задержки «Wait», а дальше следует инструкция «RJMP» которая выполнит относительный переход к указанной метке — «Start», после чего программа снова начнет установку битов в порте с задержками по времени.
Таким образом выполняется реализация бесконечного цикла в котором будут «дергаться» пины порта PORTD микроконтроллера и поочередно зажигаться/гаснуть светодиоды которые подключены к каналам данного порта (пины PD0, PD1).
После основного цикла программы следует наша подпрограмма задержки по времени. Принцип ее работы заключается в выполнении трех вложенных циклов, в каждом из которых происходит вычитание (DEC) единички из числа которое хранится в отдельном регистре, и так до тех пор пока значение не достигнет нуля. Инструкция «DEC» декрементирует значение указанного регистра и требует для этого 1 рабочий такт процессора.
При помощи инструкций «BRNE» (условный переход) выполняется анализ нулевого бита статусных флагов процессора (Zero Flag, ZF). Переход на указанную в инструкции метку будет выполнен если после выполнения предыдущей команды нулевой флаг был установлен. В данном случае проверяется значение нулевого флага после выполнения команд «DEC» над значениями которые хранится в регистрах общего назначения (R17, R18, R19). Инструкция «BRNE» требует 1/2 такта процессора.
Таким образом, использовав несколько вложенных циклов, ми заберем у ЦПУ некоторое количество тактов и реализуем нужную задержку по времени, которая будет зависеть от количества итераций в каждом цикле и от установленной частоты микропроцессора.
По умолчанию, без установки фьюзов что задают источник и частоту тактового генератора, в микроконтроллере ATmega8 используется откалиброванный внутренний RC-генератор с частотой 1МГц. Если же мы изменим частоту МК на 4Мгц то наши светодиоды начнут мигать в 4 раза быстрее, поскольку на каждую операцию вычитания и сравнения будет тратиться в 4 раза меньше времени.
Завершается подпрограмма инструкцией «RET«, которая выполняет возврат из подпрограммы и продолжение выполнения инструкций с того места, с которого эта подпрограмма была вызвана (на основе сохраненного адреса возвращения, который сохранился в стеке при вызове инструкции «RCALL»).
При помощи директивы «.DB» в памяти программ (флешь) резервируется цепочка из байтов под строчку данных «Simple LEDs blinking program», эти данные являются статичными и их нельзя изменять в ходе работы программы. Для резервирования слов (Double Word) нужно использовать директиву «.DW».
В данном случае, у нас во FLASH-память вместе с программным кодом будет записана строка «Simple LEDs blinking program«, которая содержит название программы. Данные из этой строчки нигде в программе не используются и приведены в качестве примера.
При каждом резервировании данных с использованием директивы «.DB» или «.DW» должна предшествовать уникальная метка, которая пригодится нам когда нужно будет получить адрес размещаемых данных в памяти для дальнейшего их использования, в нашем случае это «Program_name:«.
При построении программы важно чтобы счетчик выполняемых команд не добрался до адреса с зарезервированными данными, иначе процессор начнет выполнять эти строчки как программный код (поскольку они размещены в сегменте кода). В примере моей программы байты под название программы зарезервированы в конце сегмента кода и за пределами рабочих циклов программы, так что все ОК.
Эти данные можно разместить и в начале кода, использовав операторы перехода для изоляции этих байтов от выполнения:
RJMP DataEnd
Program_name: .DB "Simple LEDs blinking program"
DataEnd:
Разобраться с основами языка программирования Ассемблер в пределах одной статьи достаточно сложно, без практики здесь никак, но тем не менее на начальном этапе и для нашего эксперимента приведенных знаний вполне достаточно. У вас уже будет базовое представление что такое программа на Ассемблере и как используются директивы и инструкции.
Процесс дальнейшего изучения Ассемблера для AVR микроконтроллеров полностью в ваших руках. Есть достаточно много полезных ресурсов в интернете, книг и материалов с примерами и пояснениями.
Приведу несколько полезных документов, которые вы можете скачать и использовать для справки при разработке программ на AVR ASM.
Справка по Ассемблеру для Atmel AVR (перевод Руслана Шимкевича): atmel-avr-assembler-quick-doc-ru.zip (16Кб, HTML, RU).
Справка по инструкциям Atmel Assembler: atmel-avr-instruction-set-manual-en.pdf.zip (700Кб, PDF, EN, 2015).
В коде программы для загрузки значений в регистры используются числа и в скобках приведены их значения в шестнадцатеричной системе счисления, например: «50 (0x32, )». В двоичной системе счисления числа указываются в формате «0b00000011». Для удобной переконвертации чисел из шестнадцатеричной системы счисления в десятичную, двоичную и наоборот отлично подходит программный калькулятор из среды рабочего окружения KDE — KCalc.
Рис. 3. KCalc — простое и эффективное решение для пересчета между разными системами счисления.
В настройках (Settings) нужно выбрать режим (Numeral System Mode), после чего программа приобретет вид что на рисунке выше. Переключаться между системами счисления можно устанавливая флажки в полях «Dec», «Hex», «Bin». Для примера: переключаемся в Hex и набираем «FF», потом переключаемся в Dec и видим число в десятичной системе счисления — 255, просто и удобно.
В операционной системе GNU Linux с рабочей средой GNOME (например Ubuntu) также есть подобный калькулятор, это программа — galculator.
Итак, у нас уже есть полный код программы, который мы сохранили в файл с именем «leds_blinking.asm». Теперь самое время скомпилировать его, делается это нажатием кнопки «Compile» в предварительно настроенной среде Geany или же отдельной командой в консоли:
avra --includepath /usr/share/avra/ leds_blinking.asm
Если результат выполнения будет без ошибок то мы получим файл прошивки в формате Intel HEX — «leds_blinking.hex», который уже можно прошивать во флешь-память микроконтроллера.
Примечание: опцию «—includepath /usr/share/avra/» можно и не указывать, поскольку в файле с исходным кодом уже была указана директива «.INCLUDEPATH» для поиска файлов с предопределениями для разных моделей МК.
Осталось прошить микроконтроллер используя полученный файл «leds_blinking.hex». В примере я использую программатор USBAsp и микроконтроллер ATmega8, вот так выглядит команда для записи получившегося файла во флешь-память МК:
avrdude -p m8 -c usbasp -P usb -U flash:w:leds_blinking.hex
Примечание: в команде используется относительный путь к файлу leds_blinking.hex, поэтому для успешного выполнения команды нужно перейти в терминале(консоли) в директорию где находится данный файл.
Сразу же после прошивки флешь-памяти на микроконтроллер поступит команда сброса (RESET) и программа начнет выполняться, об єтом будут свидетельствовать два попеременно мелькающих светодиода.
Если же светодиоды не подают признаков жизни, значит что-то пошло не так. Посмотрите внимательно вывод команды для компиляции и прошивки МК, возможно что там увидите сообщения об ошибках которые нужно исправить.
Увеличив значение константы «Delay» можно уменьшить частоту мерцания светодиодов, а уменьшив — увеличить частоту. Также можете попробовать добавить несколько светодиодов к свободным каналам порта (PD2-PD7) и модифицировать программу таким образом чтобы получить бегущий огонь из светодиодов.
В заключение приведу краткое видео работы рассмотренной схемы на двух светодиодах:
В следующей статье мы разберем программу с похожим функционалом, используя тот-же макет, только выполним ее на языке программирования Си.
Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.
Микроконтроллер
Это первое из длинной серии руководств, предназначенных для начинающих. и учебное пособие, основанное на микроконтроллере Atmel AVR Atmega32. Я покажу тебе, на примерах и проектах, как программировать и предоставлять функции для этого микроконтроллера и каковы способы использования и приложения.
Что касается микроконтроллеров в целом, хорошо знать, что эти маленькие микросхемы нашел везде. Вы можете найти их в микроволновых печах, новых устройствах, автомобилях, телевизоры и т. д. Эти микроконтроллеры управляют и воспринимают окружающую электронику. и окружающая среда. Например, микроконтроллеры могут выводить данные на дисплей, двигатель, светодиоды и т. д., считывающие окружающую среду, например, наклон с помощью акселерометра, свет, угловая скорость с помощью гироскопа MEMS (Microelectromechanical System), звук, энкодеры движения, температуры и ввод с клавиатуры или кнопки.
Чтобы дать вам общее представление о микроконтроллере, микроконтроллер AVR Atmega32 считается компьютером на микросхеме. Микроконтроллер умеет выполнять набор инструкций в виде программы. Язык программы, который я буду в этих проектах используется C ++. Чтобы предоставить пользователям этого сайта лучшую возможность Чтобы узнать, программы C ++ будут объяснены очень подробно.
В микроконтроллерах действительно здорово то, что вы можете контролировать все булавки.Новичку может быть сложно понять эту концепцию, особенно не имея опыта работы с электроникой. Не волнуйтесь, я проведу вас через каждый крошечная деталь. Каждый вывод имеет особое назначение или может использоваться как вход или выход. особенность, за некоторыми исключениями, контакты питания.
На левой стороне микросхемы, если смотреть на нее, образуются вершина и маленький треугольник. находится вверху слева, 20 контактов (это 40-контактный микроконтроллер).Первое начиная с верхнего левого угла — контакты PB0-7. Это всего 8 контактов, так как индекс этих контактов и почти все в программе начинается с индекса 0. Этот набор контактов называется «Порт B», а еще 3 порта помечены от A до D. Эти порты могут быть настроены для приема информации и называются INPUT и они могут быть настроены на отправку напряжения в некоторой форме, называемой ВЫХОДОМ. Общие выводы питания чтобы получить питание для чипа, называемого VCC и GND.Все, кроме одного контакта порта D (PD0-6) также находится на левой стороне (нижняя часть). PD7 (контакт 7 порта D) в одиночку запускает правую часть микроконтроллера.
Продолжая движение по правой стороне и в конце порта D, порт C продолжался от нижний угол вверх. С этого момента, пусть любимые контакты продолжатся, от аналогового к цифровому булавки. Эти штыри могут определять окружающую среду с помощью компонентов. которые подают на эти контакты аналоговое напряжение.Не беспокойтесь о непонимании аналоговый или даже цифровой на этом этапе, это будет объяснено более подробно позже. Эти выводы аналогово-цифрового преобразователя составляют порт A.
Одним из примеров использования аналогового преобразования в цифровую форму может быть, скажем, зондирование температура. Вы можете подключить компонент, который преобразует температуру в уровень напряжения, называемого термистором, на один из контактов порта A и микроконтроллер преобразует это напряжение в число от 0 до 255 (8-битное число — более высокое разрешение возможно при 10 битах).Программа, которая написана и хранится в микроконтроллере. можно использовать эту температуру и реагировать определенным образом. Например, если у вас есть термистор против кипящего котла, микроконтроллер может реагировать и обеспечивать выход на другой контакт, который издает звуковой сигнал или мигает светом.
Другие особенности этого и других микроконтроллеров, кроме самого программирования это пространство программирования (где программа хранится в микросхеме и сколько места у вас есть), память или пространство для данных и переменных, которые программа будет использовать, и наконец, в микросхему встроены часы, которые считают.Подсчет может быть в много разных скоростей в зависимости от скорости чипа и делителя, который выбран по скорости. Это начинает усложняться, поэтому я вернусь. Подсчет может производиться в секундах, миллисекундах, микросекундах или в любом другом формате. для выбранной программы и приложения.
Поскольку эта серия руководств основана на примерах, я предоставлю много деталей. Конечно, детали для введения были бы невозможны, и если вы очень авантюрный, вы можете взглянуть на техническое описание и руководство для этого микропроцессора, но не позволяйте этому огромному документу отбить у вас желание изучить этот невероятнейший технология.Как только вы научитесь, приложение будет без ограничений, от крошечных роботов, к невероятно масштабным архитектурным чудесам, которые движутся и испускают впечатляющие световые эффекты, иногда взаимодействующие с окружающей средой.
Учебные пособия по микроконтроллеруРуководства по микроконтроллерам AVR: В этой статье мы собираемся представить полный список руководств по микроконтроллерам AVR. Прочитав эту статью, вы получите полное представление о микроконтроллерах avr.Этот список содержит более 20 руководств по микроконтроллерам AVR. мы полностью узнаем о микроконтроллере AVR и взаимодействии с другим компонентом с помощью микроконтроллера AVR. Итак, мы обсудили здесь некоторое введение и некоторые важные особенности микроконтроллера AVR. Полный список руководств по микроконтроллерам avr приведен ниже:
Характеристики микроконтроллера AVR
Эта серия руководств разработана специально для начинающих. Если вы новичок и хотите поиграть с классными электронными вещами, то это будет вам очень полезно.Эта серия руководств по AVR для начинающих охватывает всю информацию о микроконтроллерах. Я также сосредоточусь на проектах, и вместе мы будем делать различные проекты, используя концепции. Также я постараюсь рассказать о различных типах проблем, с которыми в целом сталкиваются, когда вы новичок. Просто оставайся и получай удовольствие.
Программное обеспечение, необходимое для обучения AVR для начинающих Требуемый компонентХотя эти компоненты могут не понадобиться какое-то время, я бы рекомендовал купить хотя бы эти компоненты как можно скорее.Все ссылки прямые на Amazon.in.
AVR Development Board
16 × 2 LCD
USB ASP Programmer
Atme 9017 Перемычка
Поскольку большинство микроконтроллеров программируются на языке C, я бы посоветовал вам иметь некоторые базовые знания языка программирования C.Если вы понятия не имеете о языке C, выучите его до Loop, а затем возвращайтесь. Кроме того, я бы порекомендовал изучить базовое преобразование чисел (из шестнадцатеричного-десятичного-двоичного) для лучшего понимания статей.
AVR Microcontroller-an ВведениеЧтобы дать общее представление о микроконтроллере, микроконтроллер рассматривается как КОМПЬЮТЕР НА ЧИПЕ . Это означает, что все периферийные устройства и микропроцессор интегрированы в сам чип.Эти устройства включают в себя память, таймер / счетчик, порты ввода-вывода, аналого-цифровой преобразователь. Микроконтроллеры обычно предназначены только для решения конкретной задачи. Возможности и применение микроконтроллеров невообразимы. Вы можете найти их в микроволновых печах, автомобилях, телевизорах и т. Д. Как и компьютер, микроконтроллер может выполнять набор инструкций в форме программы. Я буду использовать язык программирования C.
16-контактная схема Atmega
AVR Микроконтроллер Atmega 16 потребляет мало энергии и является высокопроизводительным микроконтроллером.Atmega 16 может работать на максимальной частоте 16 МГц. с использованием внешнего кварцевого генератора. Максимальная внутренняя частота составляет 8 МГц. Он имеет 16 КБ флеш-памяти, поэтому он называется Atmega 16. Интересно, сколько памяти должно быть у Atmega 32? Atmega 16 — это 40-контактный микроконтроллер. 32 различных линии ввода / вывода разделены на 4 разных порта, а именно порт A, порт B, порт C и порт D. Некоторые выводы мультиплексированы и могут выполнять более одной функции. Например, PD2 (вывод 16) вместе с выводом ввода-вывода также является выводом прерывания.Я расскажу о функциях каждой булавки в следующем уроке. На данный момент контакт 10 предназначен для Vcc, контакт 11 — для заземления, контакты 12 и 13 — для внешнего кварцевого генератора, а контакт 9 используется для сброса микроконтроллера Atmega 16. Еще один небольшой факт о микроконтроллере AVR — это положение заземления и Vcc. Если кто-то по ошибке подключит эту микросхему не так, как предполагалось, положение Vcc и заземления останется прежним, и из-за этого микроконтроллер AVR не будет поврежден (я знаю — это круто).
Различие между AVR и ATMEGA 16AVR — это семейство микроконтроллеров, разработанное Atmel в начале 1996 года, под которым выпускается множество микроконтроллеров. У них схожая внутренняя архитектура, и из-за схожей архитектуры у них также есть похожие программы. Atmega 16 — это микроконтроллер, входящий в семейство AVR. Некоторые другие микроконтроллеры включают Atmega 32, Atmega 328, Atmega 8 и т. Д.
Почему все это важно знать?Это важно, потому что в следующей серии — руководстве по AVR для начинающих я покажу вам, как контролировать и использовать каждый вывод.Все это важно знать для взаимодействия различных датчиков, устройств ввода-вывода, последовательных устройств и т. Д. Из следующего руководства я бы порекомендовал вам установить программное обеспечение — Atmel Studio 6.0 (среда, которую мы собираемся программировать) , Proteus (тренажер).
Сопутствующие товары23 | Руководство AB для начинающих по AVR
R
obotics
I
интерес
G
roup
M
лаборатория электроники и робототехники
National Institute of Technology Calicut
9000 самый простой в настройке модуль, доступный в ATmega 16.Интересно, правда? Итак,, что это за прерывание? В предыдущем разделе, когда мы создавали функции для отправки и приема данных
, я упоминал, что выполнение цикла в цикле while до тех пор, пока не будет выполнено определенное условие
, не является хорошей идеей. Нам нужно найти альтернативу опросу, и ответ
— прерывания.
Когда происходит прерывание, микроконтроллер приостанавливает нормальный поток кода, и
переходит в специальную функцию, которая содержит некоторый специальный код, который необходимо запустить
при возникновении прерывания.Как только эта специальная функция будет полностью запущена, нормальный поток
кода возобновится. То есть нам больше не нужно ждать опроса. Вместо этого мы можем каким-то образом разрешить прерывание
, чтобы оборудование запускало выполнение требуемого набора кода
на себе, когда условие удовлетворяется.
Давайте посмотрим на это под другим углом, чтобы сделать использование прерываний более очевидным для вас.
. Микроконтроллер выполняет инструкции в той последовательности, в которой написана программа
.Но иногда может потребоваться обработка событий с высоким приоритетом, например, сбой источника питания
. В этом случае нам нужно принять меры, чтобы убедиться, что все несохраненные данные
сохранены в памяти. Прерывание может помочь нам обнаружить сбой источника питания
. Это прервет нормальное выполнение программы и выполнит специальную функцию
. Эта функция известна как процедура обслуживания прерывания. Таким образом, программа обслуживания прерывания
(ISR) позаботится о том, чтобы данные были сохранены, а затем возобновится нормальное выполнение программы
с того места, где программа была прервана.
Прерывания в ATmega можно разделить в основном на две группы:
1) Внутренние прерывания
2) Внешние прерывания
Внутренние прерывания — это те прерывания, которые генерируются некоторыми модулями
внутри микроконтроллера. Например, модуль UART можно настроить на прерывание
при получении нового байта данных. Или он может быть настроен на прерывание, когда
текущая передача закончена и передатчик готов к приему новых данных для связи
.Как и модуль UART, большинство других модулей имеют прерывания. Эти прерывания
называются внутренними прерываниями и заботятся о состояниях внутри микроконтроллера
, о которых нам нужно часто заботиться. А что, если нам нужно проверить конкретное условие
, которое является внешним по отношению к микроконтроллеру. Скажем, сбой блока питания
, который мы рассмотрели в примере выше. Нам нужно принять вход, который
указывает на наличие источника питания, и сгенерировать вход, когда он исчезнет.
Здесь нам на помощь приходят внешние прерывания. На микроконтроллере
имеется четыре контакта, которые можно использовать для обнаружения внешних прерываний, а именно RESET, INT0, INT1 и INT2.
СБРОС считается прерыванием, даже если программа не возобновляется после сброса.
Мы разработали полное руководство по изучению микроконтроллера AVR — учебное пособие, в котором рассказывается об архитектуре, схеме контактов, о том, как программировать микроконтроллер avr, как работать с АЦП от avr, как работать с SPI от avr, сопрягая ЖК-дисплей с avr , библиотека avr gcc, как работать с внешними прерываниями, как установить связь USART и т. д.Мы также разработали простой проект, который стоит попробовать — схема частотомера, построенная на Avr Atmega8. Целую серию статей для этого урока разработал наш молодой автор Ракеш Буте . Мы должны ему миллион благодарностей за неоценимые усилия, которые он вложил в разработку этого полного руководства по изучению микроконтроллеров Avr.
Глава 1: — Микроконтроллер AVR — Введение в Atmega32
В этой главе вы познакомитесь с микроконтроллерами Avr.Atmega32 — это 8-битный контроллер серии avr, производимый корпорацией Atmel. В этой главе вы узнаете о схеме выводов atmega32, конфигурациях выводов, номерах выводов, архитектуре atmega32, выводах цифрового ввода / вывода, внутреннем АЦП avr, 3 таймерах avr. Кроме того, доступна ссылка на техническое описание atmega32 для дальнейшего использования.
Глава 2: — Как работать с Avr Studio? Компилятор и IDE для микроконтроллеров серии Avr
В этой главе дается введение в компилятор и IDE для микроконтроллеров серии Avr.Вы можете узнать о Avr Studio 4 и Avr Studio 5. Вы также узнаете о микроконтроллерах, поддерживаемых Avr Studio 4 и 5. Кроме того, вы можете получить некоторую информацию о написании программ на языке ассемблера, встроенном C и т. Д.
Глава 3: — Как записать свои программы на контроллер Avr Atmega 32? Сделайте свой собственный системный программист
Чтобы микроконтроллер работал так, как вы хотите, вы должны сначала написать для него программу (вот почему вы узнали о компиляторах и IDE в главе 2).Затем вы должны загрузить программу в свой контроллер. Вы можете сделать это с помощью вашего ПК, записывающего оборудования (называемого схемой программатора) и специального программного обеспечения, которое облегчает обмен данными между вашим ПК и вашим записывающим оборудованием. В этой главе вы узнаете все об этом — как записать программу на свой контроллер Avr, как сделать ISP (In System Programmer) для вашего Avr Atmega32, как использовать программное обеспечение ponyprog для загрузки программ с вашего ПК на контроллер Avr. пр.
Глава 4: — Обзор библиотеки AVR GCC
В главе 2 вы узнаете о компиляторе для микроконтроллера Avr Avr Studio.В этой главе вы узнаете о важных файлах заголовков, которые можно использовать в Avr Studio. Компилятор Avr Studio оптимизирован почти по стандартам ANSI C. Это упрощает программирование для Avr для любого, кто хорошо владеет языком C и (Embedded C).
Глава 5: — Знакомство с Atmega8
Atmega8 — еще один микроконтроллер из семейства Avr, который очень похож на Atmega32 по функциям, но стоит дешево. В этой главе вы можете узнать о схемах выводов, аналогичных функциях Atmega32 и Atmega8, внутренней архитектуре, выводах ввода / вывода, прерываниях, таймерах, методах связи и т. Д.
Глава 6: — Как работать с цифровым вводом / выводом (I / O) в контроллерах Avr
Цифровой ввод / вывод (ввод / вывод) — это самая основная вещь любого микроконтроллера. В этой главе вы узнаете об использовании цифрового ввода / вывода в микроконтроллерах Avr. Это объясняется с помощью базовой схемы, которая может светить парой светодиодов. Вы найдете 4 базовые программы, написанные на встроенном C , который использует цифровой ввод / вывод в контроллерах Avr. Итак, в этой главе вы найдете программу для мигания светодиода (с задержкой), программу для включения светодиода с помощью кнопочного переключателя, программу для генерации последовательности для приведения в действие шагового двигателя и программу для считывания нажатия клавиши (дребезг клавиш).
Глава 7: — Как подключить ЖК-дисплей к микроконтроллеру Avr
В этой главе вы научитесь сопрягать ЖК-дисплей с микроконтроллером Avr. Автор привел принципиальные схемы для подключения ЖК-дисплея к контроллерам Atmega8 и Atmega32. Программы, необходимые для сопряжения ЖК-дисплея с Avr, разработаны с использованием встроенного C . Ближе к концу этой главы вы увидите несколько реальных изображений «сопряжения ЖК-дисплея с Avr». Вы также можете найти ссылку на статью о ЖК-дисплеях .Это примечание по ЖК-дисплеям научит вас глубже познать символьные ЖК-дисплеи.
Глава 8: — Стандартная библиотека и форматирование строк в Avr
Эта глава больше похожа на продолжение главы 4 ( Обзор библиотеки Avr Gcc ). В этой главе вы узнаете о стандартных библиотечных функциях, таких как printf, scanf и т. Д. Для объяснения концепций здесь используется та же программа сопряжения с ЖК-дисплеями. Итак, вы должны следовать главе 7, чтобы получить представление об этой главе.
Глава 9: — Как работать с кристаллом 32K и микроконтроллером Avr
В некоторых случаях может потребоваться добавить внешний кристалл к микроконтроллеру, особенно для приложений, требующих точной синхронизации. В этой главе вы научитесь добавлять внешний кристалл 32K к контроллеру Atmega8. Вы можете посмотреть видео схемы, реализованной на практике.
Глава 10: — Как работать с последовательным периферийным интерфейсом (SPI) в микроконтроллерах Avr
В этой главе рассказывается, как использовать SPI (последовательный периферийный интерфейс) в контроллерах Avr для облегчения последовательной связи между устройствами.В этой главе вы можете узнать о том, как настроить передающую и принимающую систему и как эффективно установить связь между системами. Показан пример с принципиальной схемой и программой, в которых строка символов отправляется на ЖК-дисплей для отображения.
Глава 11: — Как установить связь между ПК и контроллерами Avr с помощью USART
В этой главе вы узнаете об установлении связи между вашим персональным компьютером и Avr Atmega8 с помощью модуля USART.USART является аббревиатурой универсального синхронного асинхронного передатчика и приемника и является одним из ранее разработанных протоколов связи.
Глава 12: — Как работать с внешними прерываниями в микроконтроллере Avr
В этой главе вы узнаете о «внешних прерываниях» и о том, как работать с ними в Avr. Вы научитесь писать ISR (процедуры обслуживания прерывания) для определенного типа событий прерывания, как писать программу на языке C и т. Д.
Глава 13: — Как работать с блоком АЦП в микроконтроллерах Avr
Контроллеры Avr, которые мы использовали в этих руководствах, Atmega8 и Atmega32 поставляются со встроенным АЦП. В этой главе вы узнаете, как работать с внутренним АЦП контроллеров Avr.
Итак, на этом мы заканчиваем руководство по микроконтроллеру Avr в главах 13 . Мы знаем, что это не полный учебник. Но мы будем работать над улучшением всех этих статей, добавляя более релевантную информацию и эксперименты.Поэтому, пожалуйста, продолжайте обращаться к этому руководству в будущем. Мы добавляем простой проект с использованием контроллеров Avr, в котором вы можете применить знания, полученные из этих руководств.
Простой проект с использованием AvrСхема частотомера с использованием контроллера Avr Atmega8
В этом проекте вы можете создать устройство / систему подсчета частоты. Мы разработали это с использованием микроконтроллера Avr Atmega8. Мы предоставили полную принципиальную схему, программные коды и другую необходимую информацию, чтобы этот проект стал реальностью.
Учебное пособие по микроконтроллерамВсе вышеперечисленное является уважительными причинами для записи на этот курс.
Обучение программированию микроконтроллера — это, по сути, научиться указывать микроконтроллеру, что ему делать. В наши дни микроконтроллеры встречаются практически повсюду. От умных часов, которые вы носите, которые подсчитывают калории на вашем шаге, до стиральной машины, которая чистит и сушит вашу одежду.Холодильник и кондиционер, которые регулируют температуру вашей еды и вашей комнаты, соответственно смартфону в кармане, что позволяет вам оставаться на связи. В настоящее время вся электроника имеет какой-то контроллер.
Двигаясь вперед, наша бытовая техника и гаджеты станут намного умнее благодаря развитию искусственного интеллекта и машинного обучения и их внедрению в нашу повседневную жизнь (Alexa, Google Assistant). Таким образом, для выпускников инженерных специальностей и энтузиастов этой области становится все более важным укрепить свои фундаментальные знания, прежде чем переходить к более сложным вещам.
Atmel и Microchip — два крупнейших производителя микросхем в отрасли. Они производят одни из самых популярных чипов и имеют самое большое сообщество. У них обоих отличные 8-битные чипы, подходящие для новичков. Microchip имеет семейство микроконтроллеров PIC, а Atmel — AVR. В сообществе много споров о том, что лучше. Но, на мой взгляд, обе архитектуры имеют свои достоинства.
Примечание: В январе 2016 года Microchip приобрела Atmel за колоссальные 3 доллара.56 миллиардов.
Для этого курса я выбрал AVR по разным причинам. Atmel создает микросхемы в семействе AVR, в которое входят ATmega168 и ATmega328. Эти и другие микросхемы серии AVR также используются для питания широко популярных плат Arduino. Таким образом, в общем, намного проще и дешевле получить микроконтроллер серии AVR, чем PIC. Широкая доступность, рентабельность и большой пул ресурсов и сообщества в Интернете — вот несколько причин для моего выбора.
В конце этого курса я стремлюсь вселить в вас уверенность, чтобы начать создавать свои проекты в области электроники и встраиваемых систем с использованием микроконтроллеров серии AVR. По крайней мере, я хотел бы вызвать у вас интерес, чтобы вы могли рассматривать Embedded System как карьеру или хобби. В этом постоянно растущем и быстро растущем ландшафте можно многому научиться, испытать и поделиться.
Пока мы видели, что означает микроконтроллер ? А на что способны ? Но теперь вопрос в том, как заставить микроконтроллер что-то делать, и ответ — программированием.Итак, давайте изучим программирование микроконтроллера AVR и разберемся с основными принципами этого процесса. Есть несколько вещей, которые пользователь должен сделать для программирования микроконтроллера,
.Микроконтроллер AVR имеет большое количество поклонников благодаря доступным бесплатным и недорогим инструментам разработки, включая недорогую плату для разработки и бесплатные инструменты разработки.В следующей части мы узнаем о программном обеспечении (компилятор) и аппаратном обеспечении (программатор) и о том, как их можно использовать для разработки приложений на основе микроконтроллеров. Я рекомендую вам придерживаться статьи и следовать по порядку, чтобы лучше понять процесс.
Программирование микроконтроллера AVRдостаточно мощны, чтобы эффективно поддерживать язык программирования высокого уровня, такой как C. Чтобы написать программу на C для AVR или любого другого микроконтроллера, нам понадобится компилятор C для этого конкретного MCU.Есть несколько компиляторов c, которые поддерживают микроконтроллеры AVR, и на самом деле большинство из них бесплатны для студентов и новичков. Они перечислены ниже,
Вы можете выбрать любую IDE из списка для написания ваших программ. Здесь, в нашем руководстве, мы рассмотрим Atmel Studio 6. Пожалуйста, просмотрите видео, которое продемонстрирует вам, как установить и настроить среду, чтобы начать писать свою первую программу.
AVR USB ProgrammerЧасть оборудования, подключенная к компьютеру, который программирует микроконтроллер AVR, называется программатором AVR. После того, как вы закончите писать и скомпилировать свое программное приложение в AVR C. Вам необходимо загрузить этот выходной файл, который представляет собой шестнадцатеричный файл, в микроконтроллер, и это роль программиста. На рынке доступны, например, несколько типов программаторов: USB-программатор AVR (USBasp), карманный программатор AVR (USB Tiny ISP), AVR ISP mkII, AVR ISP mkIII… ..и т. Д. И так далее…
Если вы такой же, как я, то вас может заинтересовать AVR USB Programmer на основе прошивки USBasp с открытым исходным кодом, и даже вы можете сделать свой собственный, если хотите.
Пожалуйста, просмотрите видео, представленное ниже, которое проведет вас через все детали процедуры, чтобы заставить все работать.
Я надеюсь, что этот пост окажется для вас познавательным и интересным.