Site Loader

Всё о микроконтроллерах 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

&nbsp

&nbsp

&nbsp

Урок 1

 

 

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

Почему именно с этой линейки?

Ну, может кто знает, может кто-то не знает, микроконтроллер AVR – это продукт компании Atmel.

Ну почему же всё-таки именно с линейки AVR?

Во-первых, микроконтроллеры AVR – они повсеместно доступны, они есть в любых магазинах, цена их невысока.

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

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

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

Поэтому, будем программировать мы именно под микроконтроллеры AVR.

Начнём мы с такого представителя этой линейки, как микроконтроллер Atmega 8.

ATMEGA 8A

image002

Почему именно с него, с 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.

image004

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

 

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

 

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

 

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

 

Post Views: 17 227

Что такое микроконтроллер, семейства и корпуса AVR микроконтроллеров

Попробуем разобраться что же представляет из себя AVR микроконтроллер, что это такое и из чего состоит. Узнаем какие есть семейства микроконтроллеров от фирмы ATMEL и в каких корпусах выпускаются микро-чипы от данного производителя. Сделаем выбор корпуса микросхемы, наиболее пригодного для знакомства с AVR микроконтроллерами.

Содержание:

  1. Контроллеры и микроконтроллеры
  2. Что такое AVR микроконтроллер
  3. Корпуса для AVR микросхем
  4. Заключение

Контроллеры и микроконтроллеры

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

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

Работа микроконтроллера и его периферии осуществляется по программе, которая записывается во внутреннюю память и способна храниться в такой памяти достаточно длительный срок(несколько десятков лет).

Что такое AVR микроконтроллер

AVR микроконтроллеры, производимые фирмой ATMEL — это семейство 8-битных и более новых 32-битных микроконтроллеров с архитектурой RISC, которые совмещают в себе вычислительное ядро, Flash-память и разнообразную периферию (аналоговые и цифровые входы и выходы, интерфейсы и т.п.) на одном кристале. Это маленькие и очень универсальные по функционалу микросхемки, которые могут выполнять контроль и управлять различными устройствами, взаимодействовать между собою потребляя при этом очень мало энергии.

что такое ATMEL AVR микросхема

Данное RISC-ядро было разработано двумя студентами из города Тронхейма (третий по населению город Норвегии, расположен в устье реки Нидельвы) — Альф Боген (Alf-Egil Bogen) и Вегард Воллен (Vegard Wollen). В 1995м году данные персоны сделали предложение корпорации ATMEL на выпуск новых 8-битных микроконтроллеров, с тех пор AVR микроконтроллеры заполучили большую популярность и широкое применение.

Что обозначает аббревиатура AVR? — здесь наиболее вероятны два варианта:

  1. Advanced Virtual RISC;
  2. Alf Egil Bogen Vegard Wollan RISC, в честь создателей — Альфа и Вегарда .

Весь класс микроконтроллеров поделен на семейства:

  • tinyAVR (например:ATtiny13, ATtiny88б ATtiny167) — начальный класс, миниатюрные чипы, мало памяти и портов, базовая периферия;
  • megaAVR (например: ATmega8, ATmega48, ATmega2561) — средний класс, больше памяти и портов, более разнообразная периферия;
  • XMEGA AVR (например: ATxmega256A3U, ATxmega256A3B) — старший класс, много ресурсов, хорошая производительность, поддержка USB, улучшенная безопасность;
  • 32-bit AVR UC3 (например: AT32UC3L016, ATUC256L4U) — новые высокопроизводительные 32-битные микроконтроллеры поддерживающие много технологий и интерфейсов среди которых USB, Ethernet MAC, SDRAM, NAND Flash и другие.

Микроконтроллеры AVR имеют обширную систему команд, которая насчитывает от 90 до 133 команд в зависимости от модели микроконтроллера. Для сравнения: PIC-микроконтроллеры содержат от 35 до 83 команд, в зависимости от семейства.

Большинство команд хорошо оптимизированы и выполняется за один такт, что позволяет получить хорошую производительность при небольших затратах ресурсов и энергии.

Корпуса для AVR микросхем

Микроконтроллеры AVR выпускаются в корпусах DIP, SOIC, TQFP, PLCC, MLF, CBGA и других. Примеры некоторых корпусов приведены на рисунке ниже.

Корпуса микроконтроллеров AVR

Рис. 1. Корпуса микросхем для микроконтроллеров AVR — DIP, SOIC, TQFP, PLCC.

Как видим, корпуса для AVR микроконтроллеров есть на любой вкус и потребности. Можно выбрать недорогой чип в корпусе DIP8 и смастерить миниатюрную игрушку или же какое-то простое устройство, а можно купить более функциональный и дорогой микроконтроллер в корпусе TQFP64 и подключить к нему разнообразные датчики, индикаторы и исполнительные устройства для выполнения более серьезных задач.

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

AVR микроконтроллер на макетной панели 

Рис. 2. AVR микроконтроллеры ATmega8 и ATtiny13 в корпусе DIP на макетной панели (Breadboard).

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

Заключение

В следующей статье рассмотрим варианты применения AVR микроконтроллеров, где они уже используются и для чего. Постараюсь дать ответ на вопрос «зачем мне изучать программирование AVR микроконтроллеров?».

Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.

Знакомство с AVR | Практическая электроника

Микроконтроллеры (далее по тексту просто МК) ворвались в нашу жизнь и очень сильно ее облегчили. Они используются абсолютно везде, начиная с вашей стиральной машины и заканчивая смартфоном. Сами по себе МК ничего не могут делать,  но занимают главную “должность” в электронной аппаратуре. Они УПРАВЛЯЮТ  процессом работы всех отдельных узлов радиоэлектронной аппаратуры и КОНТРОЛИРУЮТ ситуацию, чтобы та не вышла за рамки дозволенности). Эта их основная функция ;-). Вот и все!

Приступая к изучению микроконтроллеров с нуля, даже опытные электронщики порой заходят в тупик, не знают с чего начать и как понять все это. Гора информации кажется неподъемной и настолько страшной и не понятной, что порой на  первых попытках изучения МК все и заканчивается.

 

Что такое МК и с чем его едят?

В настоящее время видов МК очень много. Самые знаменитые из них это микроконтроллеры PIC фирмы Microchip Technology, в народе “пики”;  а также микроконтроллеры AVR фирмы Atmel, в народе называемые “авээрки”. Самые продвинутые электронщики уже юзают микроконтроллеры STM фирмы STMicroelectronics. Думаю, до них нам еще далеко.

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

Микроконтроллер представляет из себя пластмаску с железными ножками в различных корпусах. Ниже на рисунке корпуса микроконтроллеров  AVR:

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

 Давайте рассмотрим МК AVR Atmega8 в DIP корпусе:

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

Для того, чтобы узнать, как у нее идет нумерация ножек (распиновка), надо простой найти выемку на микросхеме, и от нее уже начинать счет 😉

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

А вот так идет счет, против часовой стрелки:

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

Теперь давайте рассмотрим схемотехническое обозначение МК AVR Atmega8:

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

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

 

Как же это все работает?

Внутри микроконтроллера функционирует программа. Эта программа способна выполнять ТОЛЬКО ТРИ ДЕЙСТВИЯ, она может на любую из ножек ПОДАТЬ ПИТАНИЕ в 5 Вольт (включить логическую единицу), ВЫКЛЮЧИТЬ ПИТАНИЕ (логический ноль), ПРОЧИТАТЬ, подаем мы на ногу питание со стороны или нет. Вот и все, другого не дано, программа ни на что более не способна. Это, на самом деле, сильно упрощает программирование.  Подробнее про  основы цифровой электроники можно прочитать зде сь.

Например, мы хотим помигать светодиодиком.

В основном, с этой программы начинают изучение микроконтроллеров. Как поступим в этом случае?

Для начала мы прицепим, скажем, на ножку “2” микроконтроллера светодиод (LED-RED). Пусть он будет прицеплен  анодом, а катод светодиода будет сидеть на земле (GND или, грубо говоря, минус питания). Схема будет выглядеть следующим образом:

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

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

Итак, на ноге PD0 второго вывода микросхемы сидит светодиод с токоограничительным резистором. Резистор здесь просто ограничивает проходящий ток через светодиод, чтобы светодиод не сгорел.

Что же дальше?

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

А дальше программа внутри микроконтроллера должна делать следующее:

  1. Подать питание на ногу PD0 (светодиодик загорается)
  2. Подождать сколько нужно (продолжает гореть)
  3. Выключить питание на ноге PD0 (светодиодик тухнет)
  4. Подождать сколько нужно ( все еще не горит)
  5. Перейти к шагу 1 (светодиодик загорается)

Вот и все, больше ничего программа делать не будет, только тупо моргать светодиодиком 😉

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

Думаю нет необходимости выкидывать шаги 1 и 3, очевидно, что без них светодиод либо никогда не загорится, либо будет всегда выключен.

Что если убрать шаг 2? Тогда получится следующее: Питание включено, диод горит, далее через не ощутимое человеком мгновение светодиод погас, идет задержка. Светодиод включается на столь малое время, что нам кажется, будто он постоянно выключен.

Аналогично будет, если убрать задержку под номером 3, светодиод будет выключаться на столь малое время, что будет казаться нам постоянно включен.

Вот что примерно представляет из себя микроконтроллер.

Arduino или AVR. Что лучше?

Arduino или AVR? Что лучше использовать в своих разработках?

Думаю, не ошибусь, если скажу, что каждый начинающий радиолюбитель, еще не имеющий опыта работы ни с одной платформой для разработки электронных устройств, затрудняется в своем выборе. Новички советуют одно, профи – другое. На форумах мнения разделяются. Так сложилось, что мы начали развитие темы прикладного программирования с создания устройств на AVR микроконтроллерах.  И если для более опытных электронщиков изучение AVR не становится проблемой, то у начинающих появляется море вопросов.

Переход к созданию своих устройств на практике бывает затруднен. Но решение есть. Оно довольно простое и не очень затратное.  Многие, думаю, слышали о такой платформе под названием “Arduino”.

Arduino или AVR. Что лучше?

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

Блок-схема платы Arduino до боли проста:

Периферийными устройствами в данном случае являются разные датчики контроля, а также исполняемые устройства. Всем этим винегретом заправляет МК AVR, который установлен посередине платы 😉

Вот некоторые из периферийных устройств.

Arduino или AVR. Что лучше?

В процессе изучения мы будем знакомиться с ними поближе

Виды Arduino

Существуют несколько разных моделей Arduino. Некоторые дешевле, а некоторые дороже. Как вы поняли, дешевые модели резко ограничены по функционалу, а также по количеству выводов. Устаревшие модели мы рассматривать не будем, а рассмотрим только те, которые можно недорого приобрести у наших друзей китайцев на сайте Алиэкспресс:

Arduino Mega

Arduino или AVR. Что лучше?

Сама приставка “мега” говорит уже сама за себя. Самый мощный конструктор.

Arduino Uno

Arduino или AVR. Что лучше?

Урезанная версия модели Arduino Mega, у которой, как видите, уже меньше выводов для подключения периферийных устройств. Если будете брать, то лучше брать сразу кит-набор. При большом желании можете глянуть на Али по этой ссылке.

Также на плате Arduino UNO и Mega распаян стабилизатор питания, позволяющий питать плату от батареи Крона, либо через переходник от китайского адаптера – блока питания. Оптимальное напряжение питания 9-12 Вольт

Arduino или AVR. Что лучше?

Arduino Nano

Arduino или AVR. Что лучше?

Думаю, проще уже некуда. На али выбор этой модели огромный.

Все эти три модели  – Mega, Uno, Nano – имеют в своем составе составе конвертер USB-Serial и разъем USB. Это означает, что для заливки программы (на языке Arduino – скетча), нам нет необходимости покупать программатор.

Arduino Pro Mini

Arduino или AVR. Что лучше?

Для Pro Mini уже необходим программатор. Но это не обычный программатор, типа USBasp, с помощью которого мы шили микроконтроллеры AVR. Здесь уже требуется программатор USB-Serial, который уже встроен в Uno, Nano  и Mega, но не имеется в Mini. Стоимость его в среднем чуть меньше 1$.  Вот вам ссылка на Али на саму модель Pro Mini, а вот ссылка на программатор.

Какой Arduino лучше?

Какой из Ардуино лучше для начала осваивания работы? Мое мнение – это Arduino Uno. Mega будет стоить дороже, да и зачем новичку такой супер-конструктор? Uno удобнее всего подключать к ПК и для него не требуется  паять штырьки, для того чтобы вставить в макетную плату, так как они уже есть. Он полностью готов к работе. Nano и Pro Mini требуют предварительного впаивания гребенки штырьков:

Arduino или AVR. Что лучше?

Но если вы уже  с паяльником на “ты” и хотите немного сэкономить, то можете приобрести Arduino Nano. Если же вы отладили какое-либо устройство и хотите уже использовать его многие годы, тут как нельзя кстати подойет Pro Mini. Маленький, удобный, а главное – дешевый.

На всех четырех перечисленных моделях Arduino размещены кварцевые резонаторы, используемые для тактирования МК. Также имеется индикация в виде мигания светодиодов при заливке прошивки. Цена Nano и Mini существенно ниже, чем Uno, и приблизительно равна стоимости среднего по функционалу микроконтроллера AVR.

Сравнение плат Arduino – довольно важная вещь. Новичку, не имеющему опыта работы с ней, легко растеряться в многообразии плат и выбрать неподходящую модель. Конечно, выбор той или иной платы зависит от проекта, однако в общем разъяснить новичкам об особенностях каждой платы не помешает:
– Arduino Mega
Одна из самых мощных плат в линейке Arduino. Имеет память аж 256 Кб, которой хватит на 99,9% проектов, 54 цифровых входов/выходов и 16 аналоговых входов.
– Arduino Uno
Наиболее распространённая ардуинка, имеет память 32 Кб, 14 цифровых входов/выходов и 6 аналоговых входов. Немного, по сравнению с Mega, но для многих проектов хватает.
– Arduino Nano
Вопреки ожиданиям от слова “нано” она даже мощнее Uno. Имеет 14 цифровых входов/выходов и 8 аналоговых входов и память тоже 32 Кб, так, как построена на том же МК ATMega328, что и Uno.
– Arduino Pro Mini
Самая слабая плата. Имеет память 16 Кб, 14 цифровых входов/выходов и 4 аналоговых входа. К тому же, обвязка платы настолько ограничена, что она отличается от простого МК лишь кнопкой перезагрузки reset и стабилизатором питания.

Какую же выбрать новичку? Nano отлично подходит для готовых проектов, а Uno – для освоения Arduino, на ней удобнее учиться. Nano очень компактное и дешевле Uno, а Uno удобнее питать и подключать. Pro Mini не оправдывает своей стоимости, да и к ней надо покупать программатор, к тому же её очень неудобно питать.

Программа Arduino IDE

Для написания программ используется собственная среда разработки Arduino. Те, кто пытались освоить работу с Atmel Studio 6, помнят, какое там количество настроек. Сходу разобраться нереально. Здесь же наоборот, мы видим простой интерфейс и только все самое необходимое. Скачать ее можно здесь. Есть также версии посвежее, но это не влияет на работоспособность программы.

Arduino или AVR. Что лучше?

Arduino является открытой платформой. Именно это принесло ей такую большую популярность. Для нее было выпущено много клонов под разные версии. Кстати если вы начнете работать именно с китайским клоном, а не с оригинальным Arduino, что скорее всего и произойдет, то вам потребуется установить драйвер под китайский адаптер Usb-Serial, распаянный на плате. Как отличить китайский Ардуино от оригинала? Если присмотреться к модулю, то можно увидеть вот такую микросхему:

Если она имеется, то ардуино китайский. Для него драйвер устанавливается вручную через “Диспетчер устройств”. Никаких проблем при установке замечено не было. Скачать драйвер можно  здесь.

Далее нам надо выбрать нужную нам модель Arduino из списка

Arduino или AVR. Что лучше?

Ну а потом выбираем COM-порт в системе, к которой у нас подключена Arduino.

Arduino или AVR. Что лучше?

Ну вот и все! Совсем ничего сложного 😉

Вывод

Итак, вернемся к теме нашей статьи. Что же все-таки лучше изучать? Голые МК AVR или взять набор Arduino?

Для новичков часто бывает проблемой выставление фьюзов у МК AVR. Этого минуса лишены все Ардуино. Там просто нет такой функции при подключении через USB кабель. Также при небрежном выставлении фьюзов можно залочить дорогой МК AVR, который не всегда просто реанимировать. В Ардуино залочить МК нереально. При прошивке программатором ISP USBASP, мы  можем прошить МК Ардуино, как и любой другой МК AVR.

Также одним важным отличием Ардуино от МК AVR – это наличие худшей оптимизации размера кода. То есть программа, которая выполняет одни и те же действия на МК и Arduino будет иметь разный вес. На Arduino она будет весить больше. И может даже случиться так, что просто не войдет в память. Микроконтроллеры AVR имеют более широкие возможности в создании электронных устройств, но есть у них и свои минусы –  это необходимость наличия программатора, источника питания, а также мощного компьютера для комфортной работы в Atmel Studio 6.

Этой публикацией мы начинаем цикл статей, посвященных конструированию электронных устройств на платформе Arduino. Оставайтесь с нами и мы поэтапно, следуя от простого к сложному, разберем самостоятельную сборку электронных устройств. Будут рассмотрены разные модели Arduino, программатор Usb – Serial и её периферия. Вы научитесь самостоятельно писать скетчи в среде разработки и обязательно соберете все то, что давно хотели собрать, но затруднялись в создании на практике.

Устройство и работа портов ввода-вывода микроконтроллеров AVR. Часть 1 / ХабрРабота портов ввода/вывода

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

Пример будем рассматривать на микроконтроллере ATMega8.

Программу писать будем в Atmel Studio 6.0.

Эмулировать схему будем в Proteus 7 Professional.

С внешним миром микроконтроллер общается через порты ввода вывода. Схема порта ввода вывода указана в даташите:

Но новичку разобраться довольно со схемой довольно сложно. Поэтому схему упростим:

Pxn – имя ножки порта микроконтроллера, где x буква порта (A, B, C или D), n номер разряда порта (7… 0).
Cpin — паразитная емкость порта.
VCC — напряжение питания.
Rpu — отключаемый нагрузочный верхний резистор (pull-up).
PORTxn — бит n регистра PORTx.
PINxn — бит n регистра PINx.
DDRxn — бит n регистра DDRx.

Рассмотрим, что же представляет собой вывод микроконтроллера. На входе микроконтроллера стоит небольшая защита из двух диодов (см.1), она предназначенная для защиты ввода микроконтроллера от кратковременных импульсов напряжения, превышающих напряжение питания. Если напряжение будет выше питания, то верхний диод откроется и это напряжение будет стравлено на шину питания, где с ним будет уже бороться источник питания и его фильтры. Если на ввод попадет отрицательное (ниже нулевого уровня) напряжение, то оно будет нейтрализовано через нижний диод и погасится на землю. Впрочем, диоды там хилые и защита эта помогает только от микроскопических импульсов и помех. Если же на ножку микроконтроллера подать вольт 6-7 при 5 вольтах питания, то внутренние диоды его не спасут.

Конденсатор (см.2) — это паразитная емкость вывода. Хоть она и крошечная, но присутствует. Обычно ее не учитывают, но она есть. Не забивай голову, просто знай это.

Дальше идут ключи управления (см.3,4). Каждый ключ подчинен логическому условию, которые нарисованы на рисунке. Когда условие выполняется — ключ замыкается.

Каждый порт микроконтроллера AVR (обычно имеют имена A, B и иногда C или даже D) имеет 8 разрядов, каждый из которых привязан к определенной ножке корпуса. Каждый порт имеет три специальных регистра DDRx, PORTx и PINx (где x соответствует букве порта A, B, C или D). Назначение регистров:

DDRx – Настройка разрядов порта x на вход или выход.

PORTx – Управление состоянием выходов порта x (если соответствующий разряд настроен как выход), или подключением внутреннего pull-up резистора (если соответствующий разряд настроен как вход).

PINx –Чтение логических уровней разрядов порта x.

PINхn – это регистр чтения. Из него можно только читать. В регистре PINxn содержится информация о реальном текущем логическом уровне на выводах порта. Вне зависимости от настроек порта. Так что если хотим узнать что у нас на входе — читаем соответствующий бит регистра PINxn. Причем существует две границы: граница гарантированного нуля и граница гарантированной единицы — пороги за которыми мы можем однозначно четко определить текущий логический уровень. Для пятивольтового питания это 1.4 и 1.8 вольт соответственно. То есть при снижении напряжения от максимума до минимума бит в регистре PINx переключится с 1 на 0 только при снижении напряжение ниже 1.4 вольт, а вот когда напряжение нарастает от минимума до максимума переключение бита с 0 на 1 будет только по достижении напряжения в 1.8 вольта. То есть возникает гистерезис переключения с 0 на 1, что исключает хаотичные переключения под действием помех и наводок, а также исключает ошибочное считывание логического уровня между порогами переключения.

При снижении напряжения питания разумеется эти пороги также снижаются.

DDRxn – это регистр направления порта. Порт в конкретный момент времени может быть либо входом либо выходом (но для состояния битов PINxn это значения не имеет. Читать из PINxn реальное значение можно всегда).

DDRxy = 0 – вывод работает как ВХОД.

DDRxy = 1 – вывод работает на ВЫХОД.

PORTxn – режим управления состоянием вывода. Когда мы настраиваем вывод на вход, то от PORTх зависит тип входа (Hi-Z или PullUp, об этом чуть ниже).

Когда ножка настроена на выход, то значение соответствующего бита в регистре PORTx определяет состояние вывода. Если PORTxn=1 то на выводе лог.1, если PORTxn=0 то на выводе лог.0.

Когда ножка настроена на вход, то если PORTxn=0, то вывод в режиме Hi-Z. Если PORTxn=1 то вывод в режиме PullUpс подтяжкой резистором в 100к до питания.

Таблица. Конфигурация выводов портов.

DDRxn PORTxn I/O Comment
0 0 I (Input) Вход Высокоимпендансный вход. (Не рекомендую использовать, так как могут наводится наводки от питания)
0 1 I (Input) Вход Подтянуто внутренне сопротивление.
1 0 O (Output) Выход На выходе низкий уровень.
1 1 O (Output) Выход На выходе высокий уровень.

Общая картина работы порта показана на рисунках:

Рис. DDRxn=0 PORTxn=0 – Режим: HI-Z – высоко импендансный вход.

Рис. DDRxn=0 PORTxn=1 – Режим: PullUp – вход с подтяжкой до лог.1.

Рис. DDRxn=1 PORTxn=0 – Режим: Выход – на выходе лог.0. (почти GND)

Рис. DDRxn=1 PORTxn=1 – Режим: Выход – на выходе лог.1. (почти VCC)

Вход Hi-Z — режим высокоимпендансного входа.
Этот режим включен по умолчанию. Все ключи разомкнуты, а сопротивление порта очень велико. В принципе, по сравнению с другими режимами, можно его считать бесконечностью. То есть электрически вывод как бы вообще никуда не подключен и ни на что не влияет. Но! При этом он постоянно считывает свое состояние в регистр PINn и мы всегда можем узнать что у нас на входе — единица или ноль. Этот режим хорош для прослушивания какой либо шины данных, т.к. он не оказывает на шину никакого влияния. А что будет если вход висит в воздухе? А в этом случае напряжение будет на нем скакать в зависимости от внешних наводок, электромагнитных помех и вообще от фазы луны и погоды на Марсе (идеальный способ нарубить случайных чисел!). Очень часто на порту в этом случае нестабильный синус 50Гц — наводка от сети 220В, а в регистре PINn будет меняться 0 и 1 с частотой около 50Гц

Вход PullUp — вход с подтяжкой.
При DDRxn=0 и PORTxn=1 замыкается ключ подтяжки и к линии подключается резистор в 100кОм, что моментально приводит не подключенную никуда линию в состояние лог.1. Цель подтяжки очевидна — не допустить хаотичного изменения состояния на входе под действием наводок. Но если на входе появится логический ноль (замыкание линии на землю кнопкой или другим микроконтроллером/микросхемой), то слабый 100кОмный резистор не сможет удерживать напряжение на линии на уровне лог.1 и на входе будет лог.0.

Режим выхода.
Тут, думаю, все понятно — если нам надо выдать в порт лог.1, мы включаем порт на выход (DDRxn=1) и выдаем лог.1 (PORTxn=1) — при этом замыкается верхний ключ и на выводе появляется напряжение, близкое к питанию. А если надо лог.0, то включаем порт на выход (DDRxn=1) и выдаем лог.0 (PORTxn=1) — при этом открывается уже нижний вентиль, что дает на выводе около нуля вольт.

Почему бы я не рекомендовал Atmel или о непонимании успеха Arduino / ХабрХочу немного поделиться негативным опытом использования микроконтроллеров Atmel в промышленной разработке.

Atmel как целевую платформу выбрал заказчик, хотя мы его и отговаривали (еще даже не зная, что нам предстоит — интуиция, что ли?). Ну что же, «заказчик всегда прав».

В продукте было два контроллера — 32-битный UC3A3 и 8-битный ATMega164. В качестве дебаггера выбрали AVR One!, в качестве среды разработки — AVR Studio 5.0 (последняя версия на момент старта).

И началось!

У двух из трех купленных AVR One! в течении первого же месяца отвалились JTAG-коннекторы. У одного из них пропадал контакт питания. Каждый дебаггер, к слову, стоит около 600 евро!

При первом подключении дебаггера к компу с установленной AVR Studio 5.0 последняя захотела обновить ему прошивку. И не просто захотела, а отказывалась работать без этого. Процедура обновления прошивки благополучно зациклилась в «обновление — ожидание готовности устройства — обновление завершено неуспешно — обновление…», произвести ее удалось только после долгих танцев с бубнами.

На начальной стадии работа ведется на Evaluation платах. Были такие и у Атмела. Вот только на «готовых» эвалкитах к большинству пинов процессора банально не было доступа! А универсальный пакет STK600, позволяющий «воткнуть» в него практически любой контроллер при помощи переходника (решение реально супер, если бы не одно но), имел маленький недостаток — его схема была недоступна ни в открытом доступе, ни за деньги! Блин, вот реально — тулкит, предназначенный для экспериментов с платформой, поставлялся без схемы! И схема его охранялась очень и очень тщательно, судя по многочисленным веткам на AVR freaks. Поскольку мы не могли представить себе, как же можно работать без наличия схемы, мы разумно отказались от покупки этого тулкита (который ни разу не дешевый, к слову!).

Еще веселее стало, когда приступили собственно к написанию и отладке кода.

Самым веселым оказалось то, что пошаговая отладка оказалась в принципе невозможной. Дело в том, что поставив где-нибудь в коде брейкпоинт, дождавшись остановки программы в этом месте и выполнив «шаг вперед», ты оказывался… в обработчике прерывания! (Естественно, в прерывании при этом никаких брейкпоинтов не было!). А поскольку прерывания в системе были всегда (таймеры и т.п.), процесс отладки выглядел следующим образом: приходилось ставить следующий брейкпоинт на следующей строке и нажимать Run вместо Step Over. Особенно весело это было, когда надо было отследить if или switch. Или же выполнить Step Into, а не Step Over…

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

Третьим радостным моментом оказалось, например, вот что: код

int a[4];

a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;

категорически отказывался работать на ATMega! Элемент a[1] после этого кода оставался равным 0!

И особенно порадовал ответ техподдержки Atmel «Да, данный процессор имеет указанную проблему, попробуйте заменить его на другой!». Ага, а ничего, что уже как бы плата с ним произведена? Следующим ответом техподдержки было «Попробуйте заменить в AVR Studio родной AVR toolchain на open source WinAVR. Это, как ни странно, помогло, массив стал инициализироваться как надо. Правда, заголовочные файлы этого toolchain представляли из себя местами кашу, и часть заголовков пришлось брать от „родного“…

Плюс вся система работала крайне нестабильно. Дебаггер мог просто перестать видеть контроллер. Студия могла перестать видеть дебаггер. Или перестать запускать код на выполнение.

К счастью, на AVR freaks часть проблем была описана и решения найдены. Например, вместо 600-евровых AVR One! были куплены 50-евровые AVR Dragon, работающие гораздо стабильнее — с ними разработка стала в принципе возможной. (Из серии „Зачем, блин, платить больше?“).

И пришлось перейти с AVR Studio 5.0 на более старую AVRStudio32, поскольку первая была настолько глючно-сырой, что работать в ней было невозможно. Интерфейс, конечно, у пятой студии был удобным, ничего не скажешь, но когда удобная в использовании среда банально не работает — удобство оказывается бессмысленным, увы.

AVRStudio32 c точки зрения интерфейса оказалась очень специфической штукой. То ли Eclipse-based сыграло свою роль, то ли Atmel внес свою лепту… Приведу лишь один пример.

Нам понадобилось изменить точку запуска, которая по умолчанию выставлена в среде разработки на начало flash контроллера. В AVRStudio32 за это отвечает так называемая „конфигурация запуска“ (найти которую, кстати, отнюдь не очевидная задача). Так мало того, что параметры конфигурации запуска не сохраняются в проекте (а это означает, что изменения должен был вносить каждый разработчик „ручками“ и их нельзя было коммитить в репозиторий), так кроме этого студия могла в какой-то из моментов по своему желанию создать новую конфигурацию, с параметрами по умолчанию, сделав ее текущей. Нет, когда это все уже знаешь, то исправить это не вопрос. Но вот когда не знаешь, а выглядит все так, что после очередного изменения вдруг все перестало работать, то становится очень даже невесело…

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

Еще одной такой досадной мелочью был прикол с тем, что Atmel называет Fuses — специальные биты, управляющие поведением микроконтроллера, доступные при помощи специальных команд. Неосторожное движение или ошибка — и процессор оказывался непригодным к дальнейшему использованию без очень сложных телодвижений. Можно было, например, переключить его с использования внутренней тактовой частоты на внешнюю. Поскольку внешней, конечно же, в наличии не было, процессор переставал работать. Вернуть этот бит без подачи внешней синхронизации было невозможно в принципе. А еще можно было, например, „выключить“ JTAG — после чего к контроллеру невозможно было подключиться дебаггером.

Вполне естественно, что во время разработки возникают ошибки. Но когда такая ошибка приводит к остановке процесса на непонятно сколько времени — мягко говоря, совсем невесело.

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

Немного доп. информации: каждый контроллер от Atmel имеет так называемый Device Code, однозначно идентифицирующий семейство. Есть спец. команда, чтобы этот код прочитать. Дебаггер и студия как раз его и используют для идентификации того, что подключено. По идее, значение это read only, и нигде в спецификации не указано обратное. Оказалось, что это не так.

Цитата из Errata:

Signature may be Erased in Serial Programming Mode
If the signature bytes are read before a chiperase command is completed, the signature may be erased causing the device ID and calibration bytes to disappear. This is critical, especially, if the part is running on internal RC oscillator.

Особенно же впечатлило решение проблемы:

Problem Fix / Workaround:
Ensure that the chiperase command has exceeded before applying the next command.

То есть, если Device ID уже оказался стертым, записать его назад возможности не предоставляется. Хуже всего то, что вместе с ним стирается еще и калибровка внутренней частоты, которая также невосстановима, насколько я понял из доступной информации.

Должен сказать, что после команды Chip Erase в коде стояла задержка в два раза больше, чем того требовала спецификация. Однако Device ID волшебным образом стирался по непонятной причине…

Что же, негативный опыт — тоже опыт. Вряд ли я по доброй воле выберу теперь Atmel для чего-либо.

А что касается Arduino — понятно, конечно, что те, кто решает с ней поиграться, с большинством проблем банально не столкнутся, но — после всего описанного выше я все же не понимаю столь высокой ее популярности.

И кстати, выбор заказчиком платформы, похоже, как раз и был обусловлен популярностью Ардуино…

UPD: Вот, кстати, из последних глюков: на ATMega164 есть три группы фьюзов: fuse, fuse_high, fuse_ext. Так вот, по неизвестной причине изменить fuse_high не получается. При этом изменить fuse — получается, и что самое интересное — после любого изменения fuse (даже ничего не значащего, например, включение-выключение вывода тактовой частоты наружу на пин, который висит в воздухе) начинает работать и изменение fuse_ext.

AVR ASM ВВЕДЕНИЕ


Руководство MORON по запуску в AVR ASSEMBLER v1.3
от [email protected]

СОДЕРЖАНИЕ:
  • ВВЕДЕНИЕ
  • ОСНОВНАЯ АРХИТЕКТУРА AVR
  • РЕГИСТРАЦИЯ
  • ОПРЕДЕЛЕНИЯ РЕГИСТРА 9009
  • КОНСТАНТ 9009
  • ВКЛЮЧИТЬ ФАЙЛ ДИРЕКТИВ
  • УСТАНОВКА МОНТАЖА
  • BEEP: НАША ПЕРВАЯ ПРОГРАММА
  • A BUTTERFLY BEEP
  • АДАПТАЦИЯ ДЛЯ ДРУГИХ ЧИПОВ AVR
  • ОРИГИНАЛЬНЫЙ ДИРЕКТИВ
  • ЭТИКЕТКА
  • НИЗКИЕ И ВЫСОКИЕ ВЫРАЖЕНИЯ
  • указатель стека
  • РЕГИСТРАЦИЯ НАПРАВЛЕНИЯ ДАННЫХ
  • КОМАНДЫ CLR & SER
  • АКТИВАЦИЯ СПИКЕРА
  • СУБРУТИНОВ И КОМАНД RCALL & RETURN
  • ADD & SUBTRACT COMMANDS
  • Прыжки и разветвления
  • РЕЗЕРВНАЯ ПАУЗА
  • NOP ИНСТРУКЦИЯ
  • И ИНСТРУКЦИЯ
  • ИЛИ ИНСТРУКЦИЯ
  • EOR ИНСТРУКЦИЯ
  • ОБРАТНАЯ ИЛИ «НЕ» ОПЕРАЦИЯ
  • ИНСТРУКЦИИ SBI & CBI
  • СТЕК
  • ИНСТРУКЦИИ PUSH & POP
  • ВКЛЮЧИТЬ ФАЙЛ ДИРЕКТИВ
  • УСТАНОВКА МОНТАЖА
  • BEEP: НАША ПЕРВАЯ ПРОГРАММА
  • A BUTTERFLY BEEP
  • АДАПТАЦИЯ ДЛЯ ДРУГИХ ЧИПОВ AVR
  • ОРИГИНАЛЬНЫЙ ДИРЕКТИВ
  • ЭТИКЕТКА
  • НИЗКИЕ И ВЫСОКИЕ ВЫРАЖЕНИЯ
  • указатель стека
  • РЕГИСТРАЦИЯ НАПРАВЛЕНИЯ ДАННЫХ
  • КОМАНДЫ CLR & SER
  • АКТИВАЦИЯ СПИКЕРА
  • СУБРУТИНОВ И КОМАНД RCALL & RETURN
  • ADD & SUBTRACT COMMANDS
  • Прыжки и разветвления
  • РЕЗЕРВНАЯ ПАУЗА
  • NOP ИНСТРУКЦИЯ
  • И ИНСТРУКЦИЯ
  • ИЛИ ИНСТРУКЦИЯ
  • EOR ИНСТРУКЦИЯ
  • ОБРАТНАЯ ИЛИ «НЕ» ОПЕРАЦИЯ
  • ИНСТРУКЦИИ SBI & CBI
  • СТЕК
  • ИНСТРУКЦИИ PUSH & POP

ВВЕДЕНИЕ:

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

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

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

Сборка

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

ОСНОВНАЯ АРХИТЕКТУРА AVR:

В простейшем виде AVR состоят из регистров, портов и оперативной памяти:

 [РЕГИСТРАЦИЯ]
     [ПОРТ]
     [ОЗУ]
 

Имеется 32 регистра, которые могут иметь такую ​​же быструю оперативную память, поэтому именно там выполняется большая часть работы.Как я упоминал ранее, большая часть Assembly перемещает данные в эти регистры и что-то с ними делает.

RAM — это место, где мы храним наши программы и данные.

Порты — это то, как мы общаемся с внешним миром, но они представляются MCU в качестве дополнительных регистров.

Регистры:

Регистры — один байт каждый (восемь битов) и являются внутренними

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

Когда дело доходит до выбора микроконтроллера, это действительно запутанная задача, поскольку на рынке доступны различные микроконтроллеры с одинаковыми характеристиками. Таким образом, каждый параметр становится важным, когда дело доходит до выбора микроконтроллера. Здесь мы сравниваем два наиболее часто используемых микроконтроллера — микроконтроллер PIC и микроконтроллер AVR. Здесь они сравниваются на разных уровнях, что будет полезно при выборе микроконтроллера для вашего проекта.

Начните с требования проекта

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

  • Сбор информации о проекте, такой как размер проекта
  • Количество используемых периферийных устройств и датчиков
  • Требования к питанию
  • Бюджет проекта
  • Требования к интерфейсам (например, USB, SPI, I2C, UART и т. Д.),
  • Создание базовой аппаратной блок-схемы,)
  • Укажите, сколько нужно GPIO
  • Аналого-цифровые входы (АЦП)
  • ШИМ
  • Выберите правильную архитектуру, необходимую i.е. (8-бит, 16-бит, 32-бит)
  • Признать Требование к памяти проекта (RAM, Flash и т. Д.)

Посмотрите на рекомендуемые параметры

Когда вся информация собрана, то самое время выбрать микроконтроллер. В этой статье два конкурирующих микроконтроллера марки PIC и AVR будут сравниваться по ряду параметров. В зависимости от необходимости проекта сравнить их, посмотрите на следующие параметры, такие как,

  • Частота: Скорость, с которой микроконтроллер будет работать
  • Количество выводов ввода / вывода: Требуемые порты и выводы
  • RAM : все объявленные переменные и массивы (DATA) в большинстве MCU
  • Флэш-память: Независимо от того, какой код вы пишете, он попадает сюда после компиляции
  • Расширенные интерфейсы: Расширенные интерфейсы, такие как USB, CAN и Ethernet.
  • Рабочее напряжение: Рабочее напряжение MCU, например, 5 В, 3,3 В или Низкое напряжение.
  • Целевые разъемы: Разъемы для простоты конструкции и размера схемы.

Большинство параметров одинаковы как для PIC, так и для AVR, но есть некоторые параметры, которые, безусловно, отличаются при сравнении.

Рабочее напряжение

Благодаря большему количеству продуктов с батарейным питанием PIC и AVR удалось улучшить работу в условиях низкого напряжения. AVR более известны для работы при низком напряжении, чем более старые серии PIC , такие как PIC16F и PIC18F, потому что в этих сериях PIC использовался стертый метод, для работы которого требуется не менее 4,5 В, а программистам PIC ниже 4,5 В приходится использовать рядные Стереть алгоритм, который не может стереть заблокированное устройство. Однако это не так в AVR.

AVR усовершенствовал и выпустил последние версии P (pico-power), такие как ATmega328P, которые имеют чрезвычайно низкое энергопотребление. Кроме того, текущий ATtiny1634 улучшен и поставляется с режимами ожидания для снижения энергопотребления при отключении питания, что очень полезно в устройствах с батарейным питанием.

Вывод состоит в том, что AVR ранее были ориентированы на низкое напряжение, но теперь PIC был преобразован для работы с низким напряжением и выпустил некоторые продукты на основе picPower.

Целевые разъемы

Целевые разъемы очень важны, когда дело доходит до проектирования и разработки. В AVR определены 6- и 10-сторонние ISP-интерфейсы, что делает его легким в использовании, в то время как PIC его не имеет, поэтому программисты PIC поставляются с летающими выводами или разъемами RJ11, которые трудно встроить в схему.

Вывод заключается в том, что AVR упростили процесс проектирования и разработки с помощью целевых разъемов, в то время как PIC все еще нужно это исправить.

Расширенные интерфейсы

Что касается усовершенствованных интерфейсов, то PIC, безусловно, является опцией, поскольку он получил свои преимущества с такими расширенными функциями, как USB, CAN и Ethernet, чего нет в AVR. Однако можно использовать внешние микросхемы, такие как FTDI USB для последовательных микросхем, контроллеры Microchip Ethernet или микросхемы Philips CAN.

Заключение состоит в том, что PIC , несомненно, получил расширенные интерфейсы , чем AVR.

Среда разработки

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

  • Разработка IDE
  • C Компиляторы
  • Монтажники

Разработка IDE:

PIC и AVR поставляются с собственными средами разработки .Разработка PIC выполняется на MPLAB X , который, как известно, является стабильной и простой IDE по сравнению с AVR Atmel Studio7 , который имеет большой размер 750 МБ и немного неуклюжий с большим количеством дополнительных функций, что делает его трудным и сложным для новичок электронные любители.

Ateml Studio vs MPLABX

PIC можно программировать с помощью инструментов для микрочипов PicKit3 и MPLAB X . AVR программируется с помощью таких инструментов, как JTAGICE и AtmelStudio7.Однако пользователи переходят на более старые версии AVR Studio, такие как 4.18, с пакетом обновления 3, поскольку он работает намного быстрее и обладает базовыми возможностями для разработки.

Вывод таков: PIC MPLAB X немного быстрее и удобнее для пользователя, чем AtmelStudio7 .

C Составители:

PIC и AVR поставляются с компиляторами XC8 и WINAVR C соответственно. PIC выкупил Hi-tech и выпустил собственный компилятор XC8. Это полностью интегрировано в MPLAB X и хорошо работает.Но WINAVR — это ANSI C, основанный на компиляторе GCC, который позволяет легко переносить код и использовать стандартные библиотеки. Бесплатная ограниченная версия IAR C Compiler объемом 4 КБ дает представление о профессиональных компиляторах, которые стоят дорого. Поскольку AVR изначально был разработан для C, вывод кода небольшой и быстрый.

PIC имеет много функций, которые делают его хорошо по сравнению с AVR, но его код становится больше из-за структуры PIC. Платная версия доступна с большей оптимизацией, однако бесплатная версия плохо оптимизирована.

Вывод таков: WINAVR хорош и быстр с точки зрения компиляторов, чем PIC XC8.

Монтажники:

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

Также отсутствие инструкций ветвления, просто пропустить и GOTO, что приводит к запутанным структурам и немного запутанному коду. Серия PIC имеет некоторые серии микроконтроллеров гораздо быстрее, но опять же ограничена одним аккумулятором.

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

Цена и наличие

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

Другие особенности

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

Atmel Studio 7 добавила файлы производственного ELF, которые включают в себя EEPROM, Flash и данные плавких предохранителей в одном файле. Принимая во внимание, что AVR интегрировал данные плавких предохранителей в их шестнадцатеричный формат файла, поэтому плавкий предохранитель может быть установлен в коде. Это упрощает передачу проекта в производство для ПОС.

Заключение

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

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

,

AVR Программирование 01: Введение | Hackaday

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

Эта серия учебников направлена ​​на то, чтобы вам было удобно программировать микроконтроллеры Atmel AVR. Независимо от того, когда вы раньше не прикасались к микроконтроллеру, или порезали себе зубы с помощью десятков проектов Arduino, это поможет вам перейти к аппаратному обеспечению и даст вам уверенность в создании чего-либо.

Дорожная карта серии :

Необходимые знания

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

Что на самом деле делает микроконтроллер?

Это загруженный вопрос.Ради понимания приведу это к самому простому объяснению:

  1. Микроконтроллер принимает некоторый тип ввода
  2. Принимает решение на основании написанного вами программного обеспечения
  3. Выходные данные изменяются в соответствии с решением на шаге 2.

Микроконтроллер делает то, что вы программируете. Делает это быстро и надежно.

Как это работает?

В этой серии уроков я буду обсуждать цифровую логику.То есть все входные и выходные выводы будут оцениваться на основе напряжения ноль или 5В. Это производит наши цифровые 1 и 0, с 5 вольт как один, и ноль вольт как ноль.

Итак, если вы хотите зажечь светодиод, просто подключите цепь к выводу, сделайте этот вывод выводом и установите для него высокий логический уровень (5 вольт). Если вы хотите добавить кнопку, подключите ее к выводу, который установлен как вход, и запрограммируйте микросхему для измерения уровня напряжения этого вывода. Это действительно так просто, если вы научитесь писать правильные команды, чтобы чип понимал ваши пожелания.

Взгляд на сам чип

Я решил использовать микроконтроллер ATmega168. Это мощный чип, но начать его использование не сложнее, чем его младшие братья. Это оставит вам достаточно места для роста в ваших проектах, оставаясь при этом доступным (менее $ 4,50). Вот диаграмма этого:

Это часто называют распиновкой, поскольку показывает, что на самом деле делает каждый из 28 выводов на чипе. Все эти контакты имеют несколько функций, и поэтому рядом с каждым есть длинные строки текста, за исключением пяти, которые имеют только одно имя.Это контакты, имеющие отношение к напряжению и заземлению (VCC, GND, AVCC, AREF, AGND), что является важной проблемой для микроконтроллеров.

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

Еще раз взгляните на распиновку и найдите контакты, названия которых начинаются с PD. Всего их должно быть восемь, помеченных от PD0 до PD 7. Это фантастический пример 8-битной природы этих чипов. PD обозначает Порт D, один из входных и выходных регистров. Все в этих чипах сосредоточено на 8 битах. Это последовательность из восьми единиц или нулей в разных комбинациях. Если вы хотите включить или отключить определенные функции, вы изменяете один или несколько битов в 8-битном регистре.Каждый раз, когда вы хотите изменить один пин-код, вы должны указать все восемь в регистре. Об этом мы узнаем гораздо больше, но только до третьей части серии.

Программирование

ATmega168 — это программируемый микроконтроллер. Но еще лучше, это перепрограммируется. Фактически, когда вы работаете над проектом, вы, скорее всего, перепрограммируете его несколько раз в час.

Размер этой микросхемы ограничен 16 килобайтами. В наше современное время на iPod емкостью 64 гигабайта 16 килобайт могут показаться ничтожными.Но на самом деле это 16 килобайт машинного кода. С этим можно многое сделать … поверь мне.

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

сделай домашнее задание

Чтобы подготовиться к остальной части этого урока, мне нужно, чтобы вы собрали несколько инструментов. У вас должен быть какой-то тип компьютера, будь то компьютер под управлением Linux, Mac или Windows.Это запустит программное обеспечение, которое принимает наш код, компилирует его в то, что может использовать микроконтроллер, а затем сообщает программисту, как записать его в наш чип.

Компилятор

В конечном итоге мы собираемся написать собственный код для AVR, который использует архитектуру RISC. Но мы делаем это на компьютере с архитектурой x86. Инструмент, необходимый для этого, называется кросс-компилятором. Вероятно, это лучшая причина для выбора AVR для разработки, поскольку имеется отличная цепочка инструментов, которую можно легко установить на нескольких платформах.

  • для пользователей Mac: установите CrossPack
  • для пользователей Windows: установите WinAVR
  • пользователи Linux: пользователям Debian и Ubuntu следует установить пакет GCC-AVR, который включает в себя весь набор инструментов. Другие могут захотеть заглянуть на страницу цепочки инструментов AVR-libc для помощи в компиляции пакетов.

Это не единственный вариант. Многие пользователи Windows клянутся бесплатным программным обеспечением Atmel AVR Studio. Это единственный раз, когда я ссылаюсь на него, поскольку у меня нет компьютера с Windows, и я никогда не пробовал этот пакет.

Программное обеспечение для программирования

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

 avrdude -h 

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

Что ждет будущее

Это завершает вступительный взнос этой серии.

Часть 2: В следующей части этой серии статей мы рассмотрим несколько аппаратных компонентов, которые можно использовать для программирования микроконтроллера AVR. Я написал программу hello world и проведу вас через создание схемы на макете, подключение чипа к программатору и использование AVRdude для записи этой простой прошивки на устройство. Я не хочу, чтобы вы были слишком взволнованы, но для этого нужен мигающий светодиод.

Часть 3: Предварительно скомпилированный файл HEX использовался для программирования микроконтроллера AVR во второй части серии. В этой части мы рассмотрим исходный код языка Си, который составлял эту прошивку. Я также подробно расскажу о периферийных устройствах, доступных на чипе, и подробнее о том, как их использовать. Мы закончим, добавив функциональность в исходную программу, перекомпилируем ее и перепрограммируем чип в обновленной версии.

Часть 4: Теперь, когда вы приобрели навыки программирования AVR, я покажу вам, как начать создавать с ними классные вещи.

Следуй за мной:

@szczys

,

Как работают петли задержки BRNE AVR в сборе?

Переполнение стека
  1. Товары
  2. Клиенты
  3. Случаи использования
  1. Переполнение стека Публичные вопросы и ответы
  2. Команды Частные вопросы и ответы для вашей команды
  3. предприятие Частные вопросы и ответы для вашего предприятия
  4. работы Программирование и связанные с ним технические возможности карьерного роста
  5. Талант Нанимать технический талант
.

alexxlab

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *