8-900-374-94-44
[email protected]
Slide Image
Меню

Микроконтроллеры avr для начинающих: Микроконтроллеры AVR для начинающих — 1

Содержание

Как я научился работать с микроконтроллерами — опыт новичка / Хабр

Всем привет. В этой статье хотел рассказать о том, как я научился работать с микроконтроллерами
(далее по тексту — МК) и на какие подводные камни налетел. Сразу скажу — статья не претендует на эксклюзивность, так как любой человек работающий с МК проходил через то, что прошёл я. Прошу строго не судить, а прочитать как историю.



Вместо вступления


Впервые интерес к МК у меня возник, когда я учился в 10 классе. На тот момент был 2009 год. Я умел немного программировать на ПК в QBasic и Visual Basic — школьная программа, но так сложилась жизнь, что я особо не разбирался в программировании, да и отсутствие знающих людей по части электроники и МК рядом сделали своё дело — для меня это была новая ниша. Хотя я с детства ковырялся с платами и микросхемами найденными на помойках, но как оно работало я толком не понимал — толком никто не мог объяснить. Как работает транзистор нормально я узнал только спустя пару лет после описанных событий.
Когда я выбирал первый МК то смотрел характеристики на сайте ЧИП-ДИП. Скажу честно — для меня это было как иероглифы. Так что не стоит этого бояться. И да, про Arduino тогда никто понятия не имел.

Как всё началось


Начал ковыряться в яндексах и гуглах. Понимал, что сам контроллер — половина дела, нужна ещё и программа. А как сказано во вступлении — с программированием у меня было не очень. В конце концов попал на какой-то сайт. Как стало позднее ясно, я с этим сайтом реально «попал». Создатель сайта написал ещё и учебник по программированию, я на радостях скачал учебник и первое что там увидел — «В качестве образца для работы я использовал PIC16F84A ». Собственно так я и выбрал свой первый МК. Теперь вопрос — почему я именно «попал». А попал я из-за того, что создатель этого учебника и сайта предлагал программировать МК на АССЕМБЛЕРЕ. Его не все практикующие проггеры то знают, а тут новичок… Контроллер я уже заказал, и только потом начал читать учебник, к сожалению.

Как я выходил из положения


После того, как я понял, что ничего не понял, я забросил МК на пару лет, но параллельно всё-таки шарился на форумах типа Схем. нет и прочих, и ко мне постепенно приходило понимание вопроса. Решил учиться кстати на модели PIC16F877A.

Итак, что нужно знать новичку:
Микроконтроллер — это маленький компьютер, в нём есть и Арифметико-логическое устройство — процессор по сути дела, и оперативная память и некое подобие жесткого диска — память программ и данных, но выполнено это всё в одной микросхеме. Соответственно в зависимости от модели и производителя у него следующие характеристики (ориентировочно):
  • Рабочие частоты от единиц до ~100 Мгц, я лично использую в своих устройствах как правило частоты 20 Мгц, именно МЕГАгерц, а не ГИГАгерц. Частота задаётся внешним источником тактирования — кварцевым или керамическим резонатором.

  • Объём ОЗУ — единицы и десятки Килобайт
  • Объём памяти под данные и программу — до нескольких десятков Килобайт. При желании можно расширить память для данных с помощью микросхем памяти. Для того чтобы использовать эти микросхемы для расширения памяти под программу — новичку стоит забыть, не всякий профессионал может это правильно сделать, да и не каждый микроконтроллер позволяет изменять свою прошивку во время работы.
  • Рабочее напряжение от 1 до 5 вольт в зависимости от модели и производителя.

Микроконтроллер рассчитан на работу на плате, скажем так, в конкретной «железке», на плате, в устройстве. Так что не стоит думать, что на нём можно поиграть в CS 🙂

Языки программирования


Начал выбирать язык программирования и среду в которой можно программировать. Так как я хоть как-то знал Basic, то и задумался, что было бы хорошо прогать на нём. Да, он не очень совершенный и ещё куча недостатков, но для начала подходил как нельзя кстати. Мне повезло, оказалось, что есть язык PIC-Basic. По нему есть учебник, автор Чак Хелибайк и переведённое на русский руководство, собственно до всего доходил дальше по учебнику и руководству. Среда работает из-под ДОС, но можно прикрутить CodeStudio и всё будет работать из-под Windows.

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


Следующая проблема, стоявшая у меня на пути — чем записать программу в чип. Понятное дело, что нужен программатор, я решил экономить, попробовал собрать несколько схем из этих ваших интернетов. Одной схемы недостаточно, нужна ещё программа которая используя программатор (саму железку) занесёт код в память. Все мои опыты окончились неудачами, по причине малого опыта. Решил я больше не смотреть на то, как от чипов идёт дым и заказал PICKit3, после этого не знал проблем, поигрался пару дней с ним и всё заработало.

  • В настоящее время есть адаптированные языки программирования для МК, тот же Бэйсик, СИ и прочие.
  • После написания программы она компилируется в машинный код — файлик с расширением HEX, его-то и надо прошивать в память МК.
  • Для того, чтобы «прошить МК» — записать в него выполняемый код нужно две вещи:

    1) плата-программатор, которая является промежуточным устройством между разъёмом компьютера и самим чипом
    2) Программа-программатор, которая будет знать как работать с программатором, собранным по конкретной схеме.
    То есть нужно чтобы программа на ПК знала какая схема подключена к ПК чтоб правильно прошить чип. В моём случае это заводское решение — вместе с программатором PicKit идет диск с нужными программами.

  • Памяти в МК ограниченное количество, это надо учитывать, иногда приходится выкраивать каждый байт прошивки, лишь бы влезть в объём памяти чипа. Так же следует понимать, что в МК нет никакой операционной системы, и Ваша прошивка — единственные данные которые знает МК.

Несколько слов про периферию


Для связи с внешним миром и удобства работы и разработки в МК встраивают различные периферийные схемы, например АЦП — аналогово-цифровой преобразователь, так что можно без лишней обвязки измерять напряжение подаваемое на вывод МК, но оно должно быть не выше чем напряжение питания, иначе чип сгорит. Используя делитель напряжения можно сделать вольтметр, например. Периферия, количество встроенных функций и их характеристики тоже зависят от модели, как правило чем дороже модель — тем богаче комплектация. Так же следует не забывать, что у контроллера ограниченное число ножек, к которым можно подключиться.

Например у PIC16F877А их 40 штук, причем 7 штук вылетают сразу, т.к. используются для подачи питания, подключения резонатора и управления аварийным сбросом. Так же надо внимательно смотреть документацию на чип. Например тот же АЦП — в PIC16F877А он может измерять напряжение только на 8 конкретных ножках чипа, на других он это делать не может. То есть под каждую встроенную функцию отводятся конкретные выводы и поменять их нельзя.

Суть сей басни такова


Освоить МК реально даже самому и с нуля, но есть места где не очень понятно. Если с программированием никогда не сталкивались, то сначала выучите хотя-бы азы программирования и напишите «Hello World» на компьютере. После этого будет проще. Если не хотите особо заморачиваться — Arduino Ваше всё. МК расчитаны на использование в «железках» — блоки управления, платы, контроллеры итд итп, это не полноценный компьютер, а контроллер. И ожидать от него следует соответственно. Благо сейчас полно примеров на ютубе, и я надеюсь, что мой опыт начинания с нуля будет не таким горьким и моя статья кому-нибудь, да поможет.

AVR Знакомство с семейством AVR

&nbsp

&nbsp

&nbsp

Урок 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 также у нас неполный, от нулевой до шестой ножки.

А вот порт D у нас полноправный порт, имеет все 8 ног, т.е. байт данных от 0 до 7.
Питается микроконтроллер от 5 вольт. Можно питать его также от 3,3 вольта, он также будет отлично работать. Но единственное, частота тактирования может быть выставлена только 8 мегагерц максимально. 16 мы не можем выставить при трёх вольтах, можем только при пяти вольтах. Подается питание на 7 ножку. Общий провод – восьмая.
Ну теперь давайте посмотрим, откуда мы можем взять программное обеспечение для программирования.
У компании Atmel имеется свой сайт www.atmel.com. На главной страничке, далеко ходить не нужно, в правой части страницы под главным баннером находится вот Download Atmel Studio.

Вот эту вот программку мы скачиваем, устанавливаем. Впоследствии мы будем создавать в ней свои проекты. А как создавать проекты, как писать код, мы с вами познакомимся на следующих занятиях. Так что пока, скачивайте, устанавливайте.

Прошивать контроллер мы поначалу будем вот в такой вот программе – avrdude.
Ссылка на скачивание avrdode 3.3    avrdudeprog33
Ну, на этом, с вашего позволения, я пока закончу Продолжение будет в следующих уроках.

 

Программирование МК AVR  Следующий урок

 

Смотреть ВИДЕОУРОК

 

 

Post Views: 22 200

мир электроники — Начинающим о AVR микроконтроллерах

Общие понятия и основы программирования

Этот раздел посвящен микроконтроллерам семейства AVR: общие понятия, структура, основы программирования и так далее.

Здесь мы постараемся разобраться с принципом работы микроконтроллеров, его отдельными блоками, периферийными устройствами, прерываниями, памятью, таймерами, портами ввода-вывода и так далее…

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

Итак, материалы раздела:

Введение

Общие сведения о AVR микроконтроллерах
Архитектура AVR микроконтроллера
Строение и характеристики AVR микроконтроллеров
Дребезг контактов. Что это такое и как с ним бороться
Функция RESET в AVR микроконтроллерах
Что такое фьюзы AVR микроконтроллеров
Что такое протоколы в AVR микроконтроллерах
Что такое прерывания в AVR микроконтроллерах
Порты ввода-вывода AVR микроконтроллера
Отладочная плата для микроконтроллера Attiy13

Программирование AVR микроконтроллеров для начинающих

Программирование для начинающих. часть1
Программирование для начинающих. часть 2
Программирование для начинающих. часть3
Видеокурс по программированию AVR микроконтроллеров для начинающих
Простые проекты на AVR микроконтроллерах
Простые проекты на AVR микроконтроллерах. продолжение

Софт для программирования микроконтроллеров

Программа CodeVisionAVR
Программа UniProf
ISIS Proteus 7.7 SP2

Литература по микроконтроллерам

Микроконтроллеры AVR семейства Tiny и Mega фирмы ATMEL
Применение микроконтроллеров AVR
Самоучитель разработчика устройств на микроконтроллерах AVR
Микроконтроллер AVR вводный курс
Микроконтроллер это просто
Микроконтроллеры AVR для начинающих

Краткий Курс — Самоучитель — Программирование микроконтроллеров AVR — быстрый старт с нуля

Задача - упражнение  2

Цель задачи:

  • 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) Теперь мы должны наполнить этот файл содержанием. Содержание буду писать на бледно желтом фоне:

 


; Комментарии в VMLAB пишутся ТОЛЬКО в одну 
; строчку после точки с запятой.

; Пожалуйста комментируйте свои проекты !
; Не ленитесь. потом спасибо скажете…

; Вот пример заголовочного комментария:

; Файл-проект для симуляции по задаче 2

; МК как бы «прошит» файлом — z1.hex
; полученным в задаче 1
; z1.htm
;
; После включения МК — НЕгорящие
; светодиоды показывают в двоичном
; виде числа от 0 до 255. 
; (практически начиная с «1»), и далее
; опять с нуля и так по кругу. ..
;
; светодиоды подключены к порту_А МК


.MICRO «ATmega16» ; симулируемый МК
.TOOLCHAIN «GENERIC»
.TARGET «z1.hex» ; что «прошито» в МК
.COFF «z1.cof» ; смотри задачу 1
.SOURCE «z1__.c» ; смотри задачу 1

.POWER VDD=5 VSS=0 ; Питание +5 вольт
; VSS это GND МК — «общий» провод схемы
; относительно него измеряются напряжения.

.CLOCK 4meg ; частота кварца 4 МГц
; точнее это частот тактирования МК


; //////  ===================  ///////
;  Ввод схемы устройства по задаче 1

; нам достаточно описать пункт ж) 

; 8 светодиодов подключаются «черточками»
; на изображении диодов на схемах 
; к ножкам МК с 33 до 40.  

; остальные пункты схемы считаются 
; симулятором существующими.

; === Первый светодиод 
D1 VDD D1_NODE 
; Св. диод D1 подключить к VDD (это +5 в) 
; и к узлу D1_NODE (я дал произвольное 
; но осмысленное название) 

R1 D1_NODE PA0 560 
; резистор R1 подключить к узлу D1_NODE 
; и к выводу PA0 МК
; номинал резистора 560 Ом 

; =========================================
; остальные 7 светодиодов подкл. аналогично

D2 VDD D2_NODE 
R2 D2_NODE PA1 560 

D3 VDD D3_NODE 
R3 D3_NODE PA2 560

D4 VDD D4_NODE 
R4 D4_NODE PA3 560

D5 VDD D5_NODE 
R5 D5_NODE PA4 560

D6 VDD D6_NODE 
R6 D6_NODE PA5 560 

D7 VDD D7_NODE 
R7 D7_NODE PA6 560

D8 VDD D8_NODE 
R8 D8_NODE PA7 560

; =========================================
; Сигналы на ножках PA0 PA1 PA2
; будем наблюдать
; в окне виртуального 
; осцилографа — «Scope»

. PLOT V(PA0) V(PA1) V(PA2)
; Рисовать графики напряжения
; в перечисленных узлах схемы

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  

Краткий курс — Самоучитель — avr123.nm.ru

 
 

Краткий Курс — Самоучитель

Микроконтроллеры AVR ,  ATmega
и ATtiny для начинающих с нуля ! 

Быстрый и уверенный старт —
                самые первые шаги …

Чайникам от такого же чайника !


Предлагаю вам учится на моём примере.

Маленькие шажки …       ( кино «А как же Боб !» )

Конечно  с  картинками !
 


 

 

ключевые слова: программирование микроконтроллеров, микроконтроллеры, обучение программированию микроконтроллеров, микроконтроллеры AVR, микроконтроллеры PIC, микроконтроллеры ARM, микроконтроллеры msp430, микроконтроллеры 8051, микроконтроллеры AVR, микроконтроллеры at89s52, микроконтроллеры SILABS, микроконтроллеры MOTOROLA, микроконтроллеры AVR, как написать программу для микроконтроллера, обучение программированию микроконтроллеров, микроконтроллеры atmega128, как запрограммировать микроконтроллер, как прошить микроконтроллер, отладка программы для AVR, моделирование работы электронных схем, электронные проекты, хобби, язык си для микроконтроллеров, язык программирования Cи, основы программирования (кнопочки, светодиоды) работа с портами, регистры AVR, прерывания и таймеры, что такое ШИМ, программная и аппаратная реализация. Сервоприводы. Работа с АЦП Настройка и программирование UART Работа с I2C Связь (UART, I2C, SPI) 
AT76C712 , AT76C713 , AT90CAN128 , AT90CAN128 Automotive , AT90CAN32 , AT90CAN64 , AT90PWM2 , AT90PWM3 , AT90S1200 , AT90S2313 , AT90S2323 , AT90S2343 , AT90S4433 , AT90S8515 , AT90S8535 , ATmega128 , ATmega1280 , ATmega1281 , ATmega16 , ATmega161 , ATmega162 , ATmega163 , ATmega164 , ATmega165 , ATmega168 , ATmega168 Automotive , ATmega169 , ATmega2560 , ATmega2561 , ATmega32 , ATmega323 , ATmega324 , ATmega325 , ATmega3250 , ATmega329 , ATmega3290 , ATmega406 , ATmega48 , ATmega48 Automotive , ATmega64 , ATmega640 , ATmega644 , ATmega645 , ATmega6450 , ATmega649 , ATmega6490 , ATmega8 , ATmega8515 , ATmega8535 , ATmega88 , ATmega88 Automotive , ATtiny11 , ATtiny12 , ATtiny13 , ATtiny15L , ATtiny2313 , ATtiny25 , ATtiny26 , ATtiny28L , ATtiny45 , ATtiny85

 

 

Краткий курс — AVR на примерах.

 

Цель курса показать на практике — как быстро начать  
использовать микроконтроллеры семейства   AVR !  

Даже с абсолютного нуля  знаний о микропроцессорах. 

Рассказать вам кратко ключевые моменты устройства МК, 
показать на практике
как МК взаимодействует с окружающими 
его в электронном устройстве компонентами  и с ПК. 

Объяснить что конкретно нужно сделать чтобы МК 
«ожил» сам
и оживил ваше электронное устройство.

Курс подробно рассказывает как сделать самые первые шаги
с чего начать не вообще,  а  конкретно — ПО ПУНКТАМ … 

— Как сделать нужное вам электронное устройство, печатную плату

— Как написать первую, простейшую программу для МК

— Как запустить эту программу в программе-симуляторе МК и увидеть как 
она работает не покупая МК и радиодеталей, а значит без риска 
спалить что-то или испортить порт вашего ПК !

— Как загрузить программу в реальный МК 

— Как отладить реальное устройство — т.е. найти причины не правильной работы
и  добиться его функционирования  в  соответствии с поставленной задачей.

 

 

Содержание. 

Краткий курс — самоучитель

Микроконтроллеры AVR начинающим.

на заглавной странице  -  avr123.nm.ru


стр. 1. Ключевая страница курса — ИЗУЧИТЕ  ЕЁ  !  она ГЛАВНАЯ в курсе

стр. 2. Что такое МК и AVR в частности. Как работает МК. 

стр. 3. Возможности МК. Что и как подключать к МК. Регистры и
                   программа. Прерывания в AVR. 

стр. 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)

Установите эти программы по-умолчанию.


Теперь у вас есть качественное и удобное программное
обеспечение для ПОЛНОГО цикла разработки устройств
на МК (микроконтроллерах) AVR !

От интерактивного помошника для создания начального кода,
скелета программы — инструмент бесценен для начинающего !

До написания и отладки полной программы с постоянным контролем её
работы на всех этапах ее создания на компьютерной модели  нужного
вам микроконтроллера AVR совместно с популярными электронными
компонентами подключенными к нему виртуально.

 

 
 

Вам не нужно будет тратить деньги и время
на поиски и покупку радио деталей и микроконтроллеров
пока вы не убедитесь в работоспособности устройства
которое вы делаете !

Вы не сожжете по неопытности что либо !

Не попадете в спешке, в азарте отладки
устройства под высокое напряжение !
 

Это очень важно для начинающего электронщика

техника безопасности — ТБ !
 

 


CodeVisionAVR  — имеет встроенный программатор для
загрузки готовой программы в реальный микроконтроллер.

 


 

Шаг 2.   Посмотрите как всё просто !

Лучше один раз увидеть чем сто раз услышать.

 


1. Загрузите файлы  к задаче упражнению 8  (это всего 14 Кб) в созданную
    папку - c:\VMLAB\z8   и распакуйте файлы архива в эту же папку.

2. Запустите VMLAB  и через меню Project -> open project откройте проект    
    c:\vmlab\z8\vmlab.prj

3. Сверните мешающее окно vmlab.prj и подправьте «мышкой» остальные окна
    чтобы получить такую картинку : 


Вы видите

— 8 светодиодов,
— 3 переменных резистора,
— клавиатуру на 16 кнопок которые можно
  использовать и раздельно,
— виртуальный ЗАПОМИНАЮЩИЙ осциллограф
— виртуальный терминал с записью данных

Весь богатейший набор компонентов VMLAB будет рассмотрен позже и конечно описан в его HELP.

Полная картинка экрана тут ! 
 

 

 

4. Теперь в меню «Project» кликните «Re-build all» — проект нужно перекомпилировать при открытии и внесении каких либо изменений. В окне «Messages» появится сообщение «Success! All ready to run»

 

Это значит ошибок нет и все готово к моделированию микроконтроллера
ATmega16. Вверху загорелся зеленый свет светофор. 

Можно запускать симуляцию … 

 

 

 

ПРОДОЛЖЕНИЕ  КУРСА

 

НА    AVR123.nm.ru

 

Пожалуйста перейдите туда !

 

 

 

 

 

 
 

Моделировать работу МК можно на компьютере не имея самого
МК и электронной схемы вокруг него. При этом видеть не только
то что происходит на ножках МК но и то что происходит внутри
МК  !!!
с помощью нижних частей меню View и Window
симулятора VMLAB.  

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

 

 

Вы не покупали МК ATmega16 — у вас его нет !

Вы ни чего не паяли и не подключали !

Но вы увидели как работает МК и программы.

Получили осциллограммы работающего устройства.

Могли записать в файл то что передавал МК.

 

 

 
 

Найдите время и обязательно выполните
примеры  симулятора VMLAB.

Это позволит вам лучше понять
его возможности.

Дополнительные важные примеры в папке C:\VMLAB\tutorial


Вот скриншот работы МК в VMLAB 
 


 



 

 
 

    Вы уже запустили МК  и  увидели как
он работает !   Вы видите что это просто, 
доступно, не дорого  и безопасно ! 
 

 


 
Демо версия имеет ограничение на максимальный размер кода программы в 2 Кб
это довольно много для начинающего, но если вам этого мало вы можете найти
полную версию программы CodeVisionAVR 1.24.8b Professional  в Интернете.

 
Google.com нашел по запросу CodeVisionAVR:


Ссылки на основном сайте курса  avr123.nm.ru

 

К вашим услугам ссылки на дополнительные материалы : 

— FAQ — ответы на вопросы по AVR и по электронике

— Проекты — это различные устройства на МК на русском языке

— Проекты на AVR студентов Корнельского университета — великолепные

— Проекты очень интересный талантливого человека Элм-Чена

— Конференция русскоязычная по МК спрашивайте — вам ответят быстро !

— Книги по AVR и электронике вообще    <-   ЧИТАТЬ !!!   
                                      … ну хотя бы список КНИГ сохраните у себя на ПК !

 

— GOOGLE  находит всё !   Вводите интересующие вас  ключевые слова. 

— Translate.ru  переведет то что вы нашли на корявый русский язык.   

 

Присылайте отзывы, пожелания
замечания и дополнения !

 

 


Читать курс дальше  ->  на 1-ю страницу

 

 

© 2004-2010 by Termo   

 

                 

В  «подвале»  есть интересное !

 

 

 
 

Краткий Курс  Самоучитель    

PROTEUS                     

Симулятор электронных устройств ПРОТЕУС, поддерживает микроконтроллеры   AVR , 8051, 
PIC10, PIC16, PIC18, ARM7, Motorola MC68HC11 

Полная система проектирования !

От идеи до результатов работы устройства 
и файлов для изготовления платы.

Быстрый старт, самые первые шаги …

Конечно с картинками !

          

AVR

Всё о микроконтроллерах AVR

Микроконтроллер — микросхема, предназначенная для управления электронными устройствами.

AVR – это название популярного семейства микроконтроллеров, которое выпускает компания Atmel. Кроме АВР под этим брендом выпускаются микроконтроллеры и других архитектур, например, ARM и i8051.

Какими бывают AVR микроконтроллеры?

Существует три вида микроконтроллеров:

  1. AVR 8-bit.
  2. AVR 32-bit.
  3. AVR xMega

Самым популярным уже более десятка лет является именно 8-битное семейство микроконтроллеров. Многие радиолюбители начинали изучать микроконтроллеры с него. Почти все они познавали мир программируемых контроллеров делая свои простые поделки, вроде светодиодных мигалок, термометров, часов, а также простой автоматики, типа управления освещением и нагревательными приборами.

Микроконтроллеры AVR 8-bit в свою очередь делятся на два популярных семейства:

  • Attiny – из названия видно, что младшее (tiny – юный, молодой, младший), в основном имеют от 8 пинов и более. Объём их памяти и функционал обычно скромнее, чем в следующем;
  • Atmega – более продвинутые микроконтроллеры, имеют большее количество памяти, выводов и различных функциональных узлов;

Самым мощным подсемейством микроконтроллеров является 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 микроконтроллера изображена на схеме:

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

  • АЛУ – арифметико-логическое устройство. Нужно для выполнения вычислении.
  • Регистры общего назначения (РОН) – регистры которые могут принимать данные и хранить их в то время пока микроконтроллер подключен к питанию, после перезагрузки стираются. Служат как временные ячейки для операций с данными.
  • Прерывания – что-то вроде события которое возникает по внутренним или внешним воздействиям на микроконтроллер – переполнение таймера, внешнее прерывание с пина МК и т.д.
  • JTAG – интерфейс для внутрисхемного программирования без снятия микроконтроллера с платы.
  • Flash, ОЗУ, EEPROM – виды памяти – программ, временных рабочих данных, долгосрочного хранения независимая от подачи питания к микроконтроллеру соответственно порядку в названиях.
  • Таймеры и счетчики – важнейшие узлы в микроконтроллере, в некоторых моделях их количество может быть до десятка. Нужны для того, чтобы отчитывать количество тактов, соответственно временные отрезки, а счетчики увеличивают свое значение по какому-либо из событий. Их работа и её режим зависят от программы, однако выполняются эти действия аппаратно, т.е. параллельно основному тексту программы, могут вызвать прерывание (по переполнению таймера, как вариант) на любом этапе выполнения кода, на любой его строке.
  • A/D (Analog/Digital) – АЦП, его назначение мы уже описали ранее.
  • WatchDogTime (Сторожевой таймер) – независимый от микроконтроллера и даже его тактового генератора RC-генератор, который отсчитывает определенный промежуток времени и формирует сигнал сброса МК, если тот работал, и пробуждения – если тот был в режиме сна (энергосбережния). Его работу можно запретить, установив бит WDTE в 0.

Выходы микроконтроллера довольно слабые, имеется в виду то, что ток через них обычно до 20-40 миллиампер, чего хватит для розжига светодиода и LED-индикаторов. Для более мощной нагрузки – необходимы усилители тока или напряжения, например, те же транзисторы.

Что нужно чтобы начать изучение микроконтроллеров? 

Для начала нужно приобрести сам микроконтроллер. В роли первого микроконтроллера может быть любой Attiny2313, Attiny85, Atmega328 и другие. Лучше выбирать ту модель, которая описана в уроках, по которым вы будете заниматься.

Следующее что Вам нужно – программатор. Он нужен для загрузки прошивки в память МК, самым дешевым и популярным считается USBASP.

Немногим дороже, но не менее распространенный программатор AVRISP MKII, который можно сделать своими руками – из обычной платы Arduino

Другой вариант – прошивать их через USB-UART переходник, который обычно делается на одном из преобразователей: FT232RL, Ch440, PL2303 и CP2102.

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

  • ATmega8U2;
  • ATmega16U2;
  • ATmega32U2.

Одно лишь «но» – в память микроконтроллера предварительно нужно загрузить 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 раза чем «Уно».

Несколько фактов:

  • Ардуино может программироваться стандартным языком – «C AVR»;
  • своим собственным – wiring;
  • стандартная среда для разработки – Arduino IDE;
  • для соединения с компьютером достаточно лишь подключить USB шнур к гнезду micro-USB на плате ардуино нано, установить драйвера (скорее всего это произойдет автоматически, кроме случаев, когда преобразователь на Ch440, у меня на Win 8.1 драйвера не стали, пришлось скачивать, но это не заняло много времени.) после чего можно заливать ваши «скетчи»;
  • «Скетчи» – это название программ для ардуино.

Выводы

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

Ранее ЭлектроВести писали, что в аэропорту «Борисполь» запустили первое электрозарядное устройство на два паркоместа. Об этом сообщил на своей странице в Facebook заместитель гендиректора аэропорта Георгий Зубко.

По материалам: electrik.info.

Первая программа для AVR микроконтроллера на Ассемблере

Приведен и подробно разобран пример простой программы для AVR микроконтроллера на языке Ассемблер (Assembler). Собираем простую схему на микроконтроллере для мигания светодиодами, компилируем программу и прошиваем ее в микроконтроллер под ОС GNU Linux.

Содержание:

  1. Подготовка
  2. Принципиальная схема и макет
  3. Исходный код программы на Ассемблере
  4. Документация по Ассемблеру
  5. Работа с числами в Hex, Bin и Dec
  6. Компиляция и прошивка программы в МК
  7. Заключение

Подготовка

Итак, у нас уже есть настроенный и подключенный к микроконтроллеру программатор, также мы разобрались с программой 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).

Работа с числами в Hex, Bin и Dec

В коде программы для загрузки значений в регистры используются числа и в скобках приведены их значения в шестнадцатеричной системе счисления, например: «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

Микроконтроллер — Руководство для начинающих — Введение

Это первое из длинной серии руководств, предназначенных для начинающих. и учебное пособие, основанное на микроконтроллере 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. Прочитав эту статью, вы получите полное представление о микроконтроллерах avr.Этот список содержит более 20 руководств по микроконтроллерам AVR. мы полностью узнаем о микроконтроллере AVR и взаимодействии с другим компонентом с помощью микроконтроллера AVR. Итак, мы обсудили здесь некоторое введение и некоторые важные особенности микроконтроллера AVR. Полный список руководств по микроконтроллерам avr приведен ниже:

  • Начало работы с микроконтроллером AVR : В этом руководстве мы обсудили микроконтроллер AVR, поэтому сначала мы знаем, что такое микроконтроллер? Микроконтроллер AVR был впервые разработан компанией Atmel в 1996 году.Это усовершенствованная версия миникомпьютера, интегрированная в небольшой чип с процессором, памятью и программируемыми периферийными устройствами ввода-вывода. AVR доступны от 8 до 100 контактов; Совсем недавно использовались 40-контактные ATmega16 или ATmega32.

Характеристики микроконтроллера AVR

  • Многофункциональный
  • Несколько внутренних генераторов
  • Флэш-память до 256 КБ
  • Внутренние данные EEPROM до 4 КБ
  • InternalSRAM до 16 КБ
  • Два таймера 8-битные и один 16-битный
  • Микроконтроллер ATmega16: В этом руководстве мы полностью узнали о микроконтроллере Atmega16, а также о его контактах. It — это 8-битный микроконтроллер Atmel’s. Он основан на улучшенной архитектуре RISC. ATmega16 — это 40-контактный микроконтроллер. Имеется 32 линии ввода / вывода (ввода / вывода), которые разделены на четыре 8-битных порта, обозначенных как PORTA, PORTB, PORTC и PORTD.
  • Учебное пособие по VMLAB для начинающих: В этом разделе мы обсудили «Лаборатория Visual Micro». Это специальный инструмент, который предоставляет виртуальную среду для мягкого моделирования и написания программного обеспечения. Также он используется для компиляции программы микроконтроллера AVR.
  • Учебник PonyProg для начинающих: В этом уроке мы узнали, как программировать микроконтроллер для программирования микроконтроллера AVR, нам нужен мощный программист, которым является PonyProg. Это программное обеспечение для программирования последовательных устройств с удобным графическим интерфейсом, доступное для Windows95 / 98 / ME / NT / 2000 / XP и Intel Linux.
  • Atmel Studio 6 Пошаговое руководство: В этом руководстве мы узнаем об Atmel Studio 6. Как использовать Atmel Studio 6 и что такое Atmel Studio 6? Что такое Atmel Studio 6? Это IDE от Atmel для разработки и отладки микроконтроллера Atmel AVR.Он предоставляет среду для написания, сборки и отладки ваших приложений, написанных на C / C ++ или ассемблерном коде.
  • Начало работы с Atmel Studio 6: В этом проекте мы узнали, как использовать Atmel Studio 6 и как создать первый проект в Atmel Studio 6. Это очень простой в использовании, в котором мы можем построить любой тип применения согласно требованию. Для получения полных рекомендаций мы следуем этим шагам, чтобы начать работу с Atmel Studio 6;
  • Загрузить Atmel Studio 6 Веб-сайт: www.atmel.com
  • Откройте Atmel Studio
  • После установки. Процесс установки очень простой
  • Создать новый проект
  • Выбор устройства
  • Написать программу
  • Скомпилировать код
  • Выбрать программист
  • Программирование устройств
  • Светодиод мигает с использованием микроконтроллера AVR ATMEGA32: В этом руководстве мы узнали об AVR Atmega32 и его программировании, а также о том, как разработать код для мигания светодиода через Atmeg32.Сначала мы напишем код на языке C в Atmel Studio 6. Для программирования Atmega32 мы использовали два регистра DDR и PORT. DDR сообщает нам контакт входа или выхода Atmega32, а ПОРТ сообщает нам, являются ли контакты активным низким или активным высоким. Для кода и моделирования для этого проекта посетите
  • Как использовать кнопку с микроконтроллером ATMEGA32 AVR : Это руководство предназначено для новичков в области программирования Atmel AVR. Я надеюсь, что вы прочитали мой первый учебник «Мигание светодиода» с использованием Atmega32 и Atmel Studio.В этом разделе мы узнаем, что такое кнопка и как мы можем использовать кнопку с микроконтроллером AVR Atmega32. Что такое кнопка? Это небольшое управляющее устройство, которое приводится в действие электрическим устройством путем нажатия. Здесь кнопка используется для переключения с микроконтроллером. Код и моделирование этого проекта можно найти на сайте
  • .
  • Интерфейс ЖК-дисплея с микроконтроллером AVR ATMEGA32 : В этом руководстве мы обсудим ЖК-дисплей и взаимодействие с микроконтроллером AVR Atmega32.ЖК-дисплей 16 × 2 — это модуль, который используется для отображения персонажа. Это очень простой модуль, который обычно используется во многих электронных устройствах и проектах. Он может отображать 2 строки по 16 символов. ЖК-дисплей 16 × 2 может быть сопряжен с микроконтроллером в 8-битном или 4-битном режиме. Они отличаются тем, как данные и команды отправляются на ЖК-дисплей. В 8-битном режиме символьные данные (как 8-битный ASCII) и ЖК-команда отправляются по линиям данных с D0 по D7. То есть 8-битные данные отправляются за один раз, а строб данных выдается через E ЖК-дисплея.
  • Двигатель постоянного тока, взаимодействующий с Atmega32 и L293D: В этом руководстве мы узнали о двигателе постоянного тока, о том, как взаимодействовать с микроконтроллером AVR, а также узнали о драйвере двигателя L293D. Непосредственное подключение двигателя постоянного тока к микроконтроллеру нецелесообразно, потому что двигателю требуется больше тока, иначе микроконтроллер будет обеспечивать ток. Итак, чтобы решить эту проблему, мы используем драйвер двигателя для взаимодействия с микроконтроллером. Мы используем микросхемы типа L293D или L298.
  • Интерфейс DS18S20 с микроконтроллером PIC и AVR: В этом руководстве мы обсудим DS18S20 и способ взаимодействия с микроконтроллером PIC и Atmega32.DS18S20 — это 9-битный цифровой термометр, который используется для измерения температуры в градусах Цельсия. Он связывается с микроконтроллерами только одним проводом.
  • Оптопара, взаимодействующая с микроконтроллерами AVR PIC и 8051: В этом разделе мы узнаем об оптопаре, работе оптопары и о том, как взаимодействовать с микроконтроллерами AVR, PIC и 8051. Что такое оптопара? Он также известен как оптоизолятор. Это электрический компонент, который соединяется с двумя отдельными электрическими элементами, которые используются для передачи входного сигнала с помощью светочувствительного элемента.
  • Как использовать таймеры микроконтроллера AVR : В этой теме мы обсудили таймер AVR и способы использования таймеров AVR в различных проектах по мере необходимости. AVR ATmega32 состоит из трех таймеров Timer0, Timer1 и Timer2 соответственно. Два таймера — это 8-битные регистры, а один — 16-битный регистр.

AVR Tutorial for Beginners — Atmel AVR tutorial

Эта серия руководств разработана специально для начинающих. Если вы новичок и хотите поиграть с классными электронными вещами, то это будет вам очень полезно.Эта серия руководств по AVR для начинающих охватывает всю информацию о микроконтроллерах. Я также сосредоточусь на проектах, и вместе мы будем делать различные проекты, используя концепции. Также я постараюсь рассказать о различных типах проблем, с которыми в целом сталкиваются, когда вы новичок. Просто оставайся и получай удовольствие.

Программное обеспечение, необходимое для обучения AVR для начинающих

Требуемый компонент

Хотя эти компоненты могут не понадобиться какое-то время, я бы рекомендовал купить хотя бы эти компоненты как можно скорее.Все ссылки прямые на Amazon.in.

AVR Development Board

16 × 2 LCD

USB ASP Programmer

07

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 16

AVR — это семейство микроконтроллеров, разработанное Atmel в начале 1996 года, под которым выпускается множество микроконтроллеров. У них схожая внутренняя архитектура, и из-за схожей архитектуры у них также есть похожие программы. Atmega 16 — это микроконтроллер, входящий в семейство AVR. Некоторые другие микроконтроллеры включают Atmega 32, Atmega 328, Atmega 8 и т. Д.

Почему все это важно знать?

Это важно, потому что в следующей серии — руководстве по AVR для начинающих я покажу вам, как контролировать и использовать каждый вывод.Все это важно знать для взаимодействия различных датчиков, устройств ввода-вывода, последовательных устройств и т. Д. Из следующего руководства я бы порекомендовал вам установить программное обеспечение — Atmel Studio 6.0 (среда, которую мы собираемся программировать) , Proteus (тренажер).

Сопутствующие товары

(PDF) Руководство по AVR для начинающих

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 Microcontroller Tutorial — Learn to do AVR Project in 13 chapters

Мы разработали полное руководство по изучению микроконтроллера 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. Мы предоставили полную принципиальную схему, программные коды и другую необходимую информацию, чтобы этот проект стал реальностью.

Учебное пособие по микроконтроллерам

AVR для начинающих

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

Все вышеперечисленное является уважительными причинами для записи на этот курс.

Зачем вам изучать микроконтроллеры AVR?

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

Двигаясь вперед, наша бытовая техника и гаджеты станут намного умнее благодаря развитию искусственного интеллекта и машинного обучения и их внедрению в нашу повседневную жизнь (Alexa, Google Assistant). Таким образом, для выпускников инженерных специальностей и энтузиастов этой области становится все более важным укрепить свои фундаментальные знания, прежде чем переходить к более сложным вещам.

Почему микроконтроллеры AVR?

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 и разберемся с основными принципами этого процесса. Есть несколько вещей, которые пользователь должен сделать для программирования микроконтроллера,

.
  • Настройте свой компьютер для программирования в Windows или Linux (установите необходимый компилятор и флэш-инструмент)
  • Написать программу, которая сообщает микросхеме, что делать?
  • Скомпилировать программу в машинный код
  • Запрограммировать чип с помощью аппаратного программатора, который передает машинный код в микроконтроллер
  • Тестирование и отладка

Микроконтроллер AVR имеет большое количество поклонников благодаря доступным бесплатным и недорогим инструментам разработки, включая недорогую плату для разработки и бесплатные инструменты разработки.В следующей части мы узнаем о программном обеспечении (компилятор) и аппаратном обеспечении (программатор) и о том, как их можно использовать для разработки приложений на основе микроконтроллеров. Я рекомендую вам придерживаться статьи и следовать по порядку, чтобы лучше понять процесс.

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

Инструменты программирования

Микроконтроллеры AVR

достаточно мощны, чтобы эффективно поддерживать язык программирования высокого уровня, такой как C. Чтобы написать программу на C для AVR или любого другого микроконтроллера, нам понадобится компилятор C для этого конкретного MCU.Есть несколько компиляторов c, которые поддерживают микроконтроллеры AVR, и на самом деле большинство из них бесплатны для студентов и новичков. Они перечислены ниже,

  • Атмель Студия 6
  • Затмение
  • AVR-GCC (GNU) Linux
  • WinAVR
  • 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 с открытым исходным кодом, и даже вы можете сделать свой собственный, если хотите.

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

Я надеюсь, что этот пост окажется для вас познавательным и интересным.

Добавить комментарий

Ваш адрес email не будет опубликован.