Avr что это: Урок 1. Что такое 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 микроконтроллер, что это такое и из чего состоит. Узнаем какие есть семейства микроконтроллеров от фирмы 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. Учебный Курс. Конфигурация FUSE бит

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

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

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

Итак, главное:

В Atmel AVR принята следующая нотация: сброшенный в ноль fuse bit считается активным, т.е. включенным.
 

Пример Бит RSTDSBL, как можно догадаться из названия, это RESET DISABLE. Включил эту опцию и у тебя нога RESET превращается в порт ввода-вывода, но за это ты теряешь возможность перешить контроллер через ISP.
 

Так вот, чтобы выключить RESET (и получить большое западло с прошивкой в обмен на мелкую подачку в виде дополнительной ножки) в этот бит надо записать 0.
 

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

 

Однако контроллеры делают электронщики, а прошивающие программы — программисты. Как бы логично. И вот эти программисты взяли и заварили адскую путаницу с галочками. Нет бы им раз и навсегда принять за стандарт, что галочка это 1, а не ВКЛЮЧЕНО (что, напомню, является нулем). И поэтому в одних прошивающих программах галочка означает, что опция включена (в FUSE бит записывается 0),в других, обычно написанных электронщиками, галочка означает единицу. Т.е. с точностью до наоборот.
 

А что будет если перепутать? А будет ОЧЕНЬ плохо. Контроллер войдет в неправильный режим и может заблокируется наглухо. Т.е. раз прошил и все. Приехал.
 

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

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

Конфигурация тактового сигнала
По умолчанию все контроллеры AVR (кроме старых серий AT90S2313, AT90S8535 итд) сконфигурированы так, чтобы работать от внутреннего источника тактов. Т.е. стоить подать на них питание и они начинают работать. Ничего больше и не нужно.
 

За источник тактов отвечают биты CKSEL
Выставив их правильным образом можно выбрать частоту работы контроллера, а также источник тактового сигнала.
 

  • CKSEL3…0 = 0000 — Внешний источник сигнала.

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

Техническое отступление
В этот режим часто попадают, когда пытаются выставить контроллер на работу от внешнего кварца (CKSEL=1111), но либо путают нотацию, либо из-за прикола с обратной нотацией битов во всяких извратских прошивающих программах. Раз и кристалл заблокировался. Но, на самом деле, наглухо, с помощью CKSEL, заблокировать кристалл нельзя. Обычно все решается напайкой кварца и запуском от этого кварца. Худшее же что может случиться — потребуется внешний генератор тактов. Который бы оживил кристалл. Делается он за пять минут из любой микросхемы ТТЛ логики, например из К155ЛА3 — схем в инете навалом. Или на таймере 555, либо можно взять второй МК и на нем написать простую программку, дрыгающую ножкой. А если есть осциллограф, то с него можно поиметь сигнал контрольного генератора — его клемма должна быть на любом осциле. Землю осцила на землю контроллера, а выход генератора на XTAL1.
 

Но что делать если зуд нестерпимый, контроллер залочен, а никакой микросхемы для реанимации под рукой нету? Тут иногда прокатывает метод пальца. Прикол в том, что на тело человека наводится весьма нефиговая наводка частотой примерно 50Гц. Всякий кто хватался за щупы осциллографа руками помнит какие шняги тут же возникают на экране — вот это оно! А почему бы эту наводку не заюзать как тактовый сигнал? Так что припаиваешь к выводу XTAL1 провод, хватаешься за него рукой, и жмешь на чтение или запись контроллера 🙂 Предупреждаю сразу, метод работает через жопу, далеко не с первого раза, читает долго и порой с ошибками, но на перезапись FUSE битов в нужную сторону должно хватить. Пару раз у меня такой фокус получался.

CKSEL3…0 = 0100 – 8 MHz от внутреннего генератора(обычно по умолчанию стоят такие)
Для большинства AVR такая конфигурация CKSEL означает тактовку от внутреннего генератора на 8Мгц, но тут могут быть варианты. Так что в этом случае втыкай внимательно в даташит. В табличку Internal Calibrated RC Oscillator Operating Modes
 

Иногда нужно иметь внешний тактовый генератор, например, чтобы его можно было подстраивать без вмешательства в прошивку. Для этого можно подключить RC цепочку, как показано на схеме и подсчитать частоту по формуле f = 1/3RC, где f будет частотой в герцах, а R и С соответственно сопротивлением резистора и емкостью конденсатора, в омах и фарадах.

  • CKSEL3…0 = 0101 – для частот ниже 0.9 MHz
  • CKSEL3…0 = 0110 – от 0.9 до 3 MHz
  • CKSEL3…0 = 0111 – от 3 до 8 MHz
  • CKSEL3…0 = 1000 – от 8 до 12 MHz

Данная табличка справедлива только для ATmega16 у других МК может отличаться. Уточняй в даташите!
 

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

  • CKSEL3…0 = 1001 — низкочастотный «часовой» кварц.

На несколько десятков килогерц.
Используется в низкоскоростных устройствах, особенно когда требуется точная работа и низкое потребление энергии.
 

Для обычных кварцев ситуация несколько иная. Тут максимальная частота кварца зависит также и от бита CKOPT когда CKOPT = 1 то:

  • CKSEL3…0 = 1010 или 1011 — от 0,4 до 0.9 MHz
  • CKSEL3…0 = 1100 или 1101 — от 0,9 до 3 MHz
  • CKSEL3…0 = 1110 или 1111 – от 3 до 8 MHz (либо от 1 до 16Мгц при CKOPT=0)

А если CKOPT равен 0 то при тех же значения CКSEL можно поставить кварц от 1 до 16MHz.
 

Разумеется, кварц на 16MHz можно поставить только на Мегу без индекса ”L”. (Хотя, как показывает практика, Lку тоже можно неслабо разогнать. У меня ATMega8535L заработала на 16Мгц, но были странные эффекты в работе. Поэтому я не стал так извращаться и разгон снял). Опять же, все выше сказанное в точности соответствует только Меге 16, у других может незначительно отличаться.
 

Бит CKOPT задает размах тактового сигнала. Т.е. амплитуду колебаний на выходе с кварца. Когда CKOPT = 1 то размах маленький, за счет этого достигается меньшее энергопотребление, но снижается устройчивость к помехам, особенно на высоких скоростях (а предельной, судя по таблице выше, вообще достичь нельзя. Точнее запуститься то он может запустится, но вот надежность никто не гарантирует). А вот если CKOPT активизировать, записать в него 0, то размах сигнала сразу же станет от 0 до питания. Что увеличит энергопотребление, но повысит стойкость к помехам, а значит и предельную скорость. При оверклокинге МК тем более надо устанавливать CKOPT в 0.
 

Также стоит упомянуть бит SCKDIV8 которого нет в Atmega16, но который часто встречается в других контроллерах AVR. Это делитель тактовой частоты. Когда он установлен, т.е. в нуле, то частота выставленная в битах CКSEL0…3 делится на 8, на чем в свое время прилично застрял Длинный, долго пытаясь понять чего это у него западло не работает. Вся прелесть в том, что этот делитель можно отключить программно, записав в регистр CLKPR нужный коэффициент деления, например один. Весь прикол в том, что SCKDIV8 активен по дефолту! Так что внимательней!

 

Биты SUT задают скорость старта МК после снятия RESET или подачи питания. Величина там меняется от 4ms до 65ms. Мне, за всю практику, пока не довелось эту опцию использовать — незачем. Так что ставлю на максимум 65ms — надежней будет.
 

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

Второй заподлянский бит это SPIEN если его поставить в 1, то у тебя тоже мгновенно отваливается возможность прошивать по простому пути и опять будет нужен параллельный программатор. Впрочем, успокаивает то, что сбросить его через SPI невозможно, по крайней мере в новых AVR (в старых, в AT90S*** было можно)
 

WDTON отвечает за Собачий таймер, он же Watch Dog. Этот таймер перезагружает процессор если его периодически не сбрасывать – профилактика зависаний. Если WDTON поставить в 0, то собаку нельзя будет выключить вообще.
 

BODLEVEL и BODEN — это режим контроля за напряжением. Дело в том, что при определенном пороге напряжения, ниже критического уровня, контроллер может начать сильно глючить. Самопроизвольно может запортачить, например, EEPROM или еще что откосить. Ну, а ты как думал, не покорми тебя с пару недель — тоже глючить начнешь 🙂
 
Так вот, для решения этой проблемы есть у AVR встроенный супервизор питания. Он следит, чтобы напруга была не ниже адекватного уровня. И если напруги не хватает, то просто прижимает RESET и не дает контроллеру стартовать. Вот эти два фуза и рулят этой фичей. BODEN включает, а BODLEVEL позволяет выбрать критический уровень, один из двух. Какие? Не буду раскрывать, посмотри в даташите (раздел System Control and Reset).
 

JTAGEN — Включить JTAG. По умолчанию активна. Т.е. JTAG включен. Из-за этого у MEGA16 (а также 32 и прочих, где есть JTAG) нельзя использовать вывода порта C, отвечающие за JTAG. Но зато можно подключать JTAG отладчик и с его помощью лезть контроллеру в мозги.
 

EESAVE — Защита EEPROM от стирания. Если эту штуку включить, то при полном сбросе МК не будет стерта зона EEPROM. Полезно, например, если в EEPROM записываются какие-либо ценные данные по ходу работы.
 

BOOTRST — перенос стартового вектора в область бутлоадера. Если эта галочка включена, то МК стартует не с адреса 00000, а с адреса бутсектора и вначале выполняет бутлоадер. Подробней про это было написано в статье про прошивку через лоадер.
 

BOOTSZ0..1 — группа битов определяющая размер бут сектора. Подробней смотри в даташите. От контроллера к контроллеру они отличаются.
 

Lock Bits
Это, собственно, и к фузам то отношения не имеет. Это биты защиты. Установка этих битов запрещает чтение из кристалла. Либо флеша, либо ЕЕПРОМА, либо и того и другого сразу. Нужно, только если ты продаешь свои устройства. Чтобы злые конкуренты не слили прошивку и не заказали в китае более 9000 клонов твоего девайса, оставив тебя без штанов. Опасности не представляют. Если ты заблокируешь ими кристалл, то выполни полное стирание и нет проблемы.
 

Характерной особенностью установленных лок битов является считываемая прошивка — в ней байты идут по порядку. Т.е. 00,01, 02, 03, 04… FF, 00… Видел такую срань? Значит не судьба тебе спереть прошивку — защищена =)
 

Техника безопасности
И главное правило при работе с FUSE битами — ВНИМАНИЕ, ВНИМАНИЕ и ЕЩЕ РАЗ ВНИМАНИЕ! Не выставляйте никогда FUSE не сверившись с даташитом, даже если срисовываете их из проверенного источника.
 

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

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

Если фуз биты задаются двумя числами — старший и младший биты, то выставляются они как в даташите. Где 0 это включено.
 

Неплохой FUSE калькулятор
 

Второе, железное, правило работы с FUSE. Запомните это навсегда и не говорите, что я не учил.
 

ВНАЧАЛЕ ЧИТАЕМ ТЕ ЧТО ЕСТЬ, ПОТОМ ЗАПИСЫВАЕМ ТЕ КОТОРЫЕ НАДО НАМ
 

Чтение — модификация — запись. ТОЛЬКО так. Почему? Да просто часто бывает как — открыл вкладку FUSE, а программатор попался тупой и сам их не считал. Как результат — у тебя там везде пустые клеточки. Довольный, выставил только те, что тебе надо SKSEL, а потом нажал WRITE. Тут то и наступает, Обычно, кабздец. Т.к. в контроллер записываются не только те, что ты изменишь, а ввобще вся секция. С теми самыми пустыми клеточками. Представь какой трешняк там будет. То то же! А потом бегут жаловаться по комментам и форумам, мол я ничего такого не трогал — оно само. Ага, щаз!
 

Так что, еще раз — Чтение, Модификация, Запись!

 

Подсказка:
Как с одного взгляда определить какого типа (прямые или инверсные) fuse биты в незнакомой прошивающей проге?
Дедуктивный метод: Нажмите чтение Fuses и посмотрите на состояние бита SPIEN Этот бит всегда активен, а если он будет сброшен, то программатор контроллер даже определить не сможет. Если SPIEN в 1 — значит фьюзы инверсные, как в PonyProg. Если ноль — значит по нотации Atmel.

AVR. Учебный курс | Электроника для всех

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

Но, если сильно все упростить, то основной функцией микроконтроллера является «дрыганье ножками». Т.е. у него есть несколько выводов (от 6 до нескольких десятков в зависимости от модели) и на этих выводах он может выставить либо 1 (высокий уровень напряжения, например +5вольт), либо 0 (низкий уровень напряжения, около 0.1 вольта) в зависимости от программного алгоритма зашитого в его память. Также микроконтроллер может определять состояние сигнала на своих ножках (для этого они должны быть настроены на вход) — высокое там напряжение или низкое (ноль или единица). Современные микроконтроллеры также почти поголовно имеют на борту Аналогово Цифровой Преобразователь — это штука подобная вольтметру, позволяет не просто отследить 0 или 1 на входе, а полноценно замерить напряжение от 0 до опорного (обычно опорное равно напряжению питания) и представить его в виде числа от 0 до 1024 (или 255, в зависимости от разрядности АЦП)

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

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

Read More »

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. Электрические характеристики

   Для грамотного использования микроконтроллера необходимо иметь представление об электрических характеристиках его выводов. Эти характеристики определяют максимально допустимый втекающий/вытекающий ток и уровни входных/выходных напряжений. От них зависит что и как можно подключать к микроконтроллеру, и к чему это приведет. 
   Сегодняшний материал посвящен как раз этой теме. Данные, приведенные ниже, взяты из описания на микроконтроллер Atmega16 в разделах Electrical Characteristics и Typical Characteristics. Для более детального изучения этого вопроса, рекомендую обязательно их посмотреть. 

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

   Схема ограничивает величину входных напряжений в диапазоне от -Vd до Vcc+Vd В, где Vd — прямое падение напряжения на диоде (обычно принимается 0,7 В), Vcc — напряжение питания микроконтроллера. Это защищает цепи микроконтроллера от перенапряжений и пробоя статическим электричеством. Однако, эти защитные диоды довольно хиленькие и выдерживают ток в единицы миллиампер. 

   Несмотря на свою полезную функцию, схема может доставить ряд неприятностей. Если подать входные сигналы на выводы выключенного микроконтроллера, то они через защитный диод запитают микроконтроллер и все остальную схему. Это явление называют паразитным питаниям. Как при этом поведет себя микроконтроллер, сложно предсказать, поэтому такой режим нежелателен.
   По хорошему, нужно сначала подавать питание, а потом входные сигналы. При выключении же наоборот – снимать входные сигналы, затем отключать питание.
   Также на схеме ты можешь видеть подтягивающий резистор Rpu (pull up) и паразитную емкость Cp. Номинал подтягивающего резистора ~20 — 50 кОм, паразитная емкость имеет величину несколько пФ.
Выводы микроконтроллеров AVR могут работать или в режиме входа, или в режиме выхода. Рассмотрим эти режимы.

   Данный режим используется, когда микроконтроллер управляет или передает данные какому-нибудь внешнему устройству. Например, управляет светодиодом, сдвиговым регистром, внешним АЦП и т. д.
Подключая к микроконтроллеру внешние микросхемы, ты всегда должен проверять, согласуются ли уровни ее входных напряжений с выходными напряжениями микроконтроллера.
   Для этого в описании на микроконтроллер ATmega16 в разделе электрических характеристик приведены значения выходных напряжений логического нуля Vol (output low voltage) и единицы Voh (output high voltage). Обрати внимание, данные приведены для определенного напряжения питания и токов, даны минимальные и максимальные значения. Уровни напряжений для других условий можно оценить по графикам «I/O Pin Current vs Output Voltage».

Логические уровни выходного напряжения для AVR

   
   В режиме выхода вывод микроконтроллера может быть или источником или потребителем тока (то есть ток или вытекает из него или втекает). Это зависит от того, какой логический уровень установлен на выводе – ноль или единица (то есть это зависит от содержимого регистра PORTх). Если на выводе логический ноль, то любое положительное напряжение, приложенное к выводу, вызовет втекающий ток. Если на выводе логическая единица, то любое внешнее напряжение, меньше напряжения питания микроконтроллера, вызовет вытекающий ток.
   Протекание тока сопровождается падением напряжения на внутренних цепях вывода микроконтроллера. Величину падения можно оценить по тем же графикам «I/O Pin Current vs Output Voltage».

График зависимости напряжения от втекающего тока для AVR

Зависимость выходного напряжения от втекающего тока.
Вывод микроконтроллера в режиме выхода, установлен логический ноль, напряжение питания 5В.

График зависимости напряжения от вытекающего тока для AVR

Зависимость выходного напряжения от вытекающего тока.
Вывод микроконтроллера в режиме выхода, установлена логическая единица, напряжение питания 5В.

   Как ты можешь видеть, графики приведены для диапазона токов от 0 до 70 мА (для температуры +25 С), но это вовсе не означает, что через каждый из выводов микроконтроллера AVR может протекать такой ток. Таблица Аbsolute Maximum Ratings в разделе электрических характеристик говорит нам о том, что максимальный ток через один вывод микроконтроллера AVR не должен превышать 40 мА, а ток через выводы VCC и GND не должен превышать 200 мА для PDIP и 400 мА для корпусов TQFP/MLF. 

   Это позволяет нам оценить, какую нагрузку микроконтроллер способен запитать своими силами. Например, мы можем подключить 8 ярких светодиодов при токе 20 мА и микроконтроллер не сгорит. При этом для расчета ограничительных резисторов нужно будет учитывать падение напряжения (~0.5 В) на выходе микроконтроллера.

8 * 20 мА = 160 мА
+ 10 мА собственное потребление
итого 170 мА < 200 мА

Rd = (5 — 0.5 — Vd)/20 , где Vd прямое падение напряжения на светодиоде

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

Зависимость тока потребления AVR от частоты и напряжения питания

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

   Режим входа используется для приема или ввода данных в микроконтроллер. Например, для получения данных с цифрового датчика или определения состояния тактовой кнопки.
   В режиме входа вывод микроконтроллера может быть или в высокоимпедансном состоянии (Hi-Z) или подтянут к плюсу питания через встроенный резистор (20 — 50 кОм). Спалить вывод в режиме входа замыканием на землю или плюс питания нельзя, в отличии от режима выхода. Но можно спалить внутренние цепи вывода, подав чрезмерно большое напряжение. Конечно, если бросок напряжения на входе микроконтроллера будет кратковременным, защитные диоды предохранят его.
   Подключая к микроконтроллеру внешние микросхемы, с которых принимаются данные, нужно всегда проверять, согласуются ли выходные уровни микросхемы с входными уровнями микроконтроллера.
   В разделе типичных электрических характеристик приведены графики «Pin Thresholds And Hysteresis», по которым можно оценить уровни входных напряжений в зависимости от напряжения питания микроконтроллера AVR.

Пороговое напряжение логической единицы для AVR

Зависимость порогового напряжения от напряжения питания микроконтроллера. Любое напряжение выше графика, воспринимается микроконтроллером как логическая единица. 

   Как можно видеть из рисунка, при напряжении 5 В входное напряжение > 2 В будет восприниматься микроконтроллером как логическая единица.

   Аналогичный график представлен и для логического нуля.

Пороговое напряжение логического нуля для AVR

Зависимость порогового напряжения от напряжения питания микроконтроллера. Любое напряжение ниже графика, воспринимается микроконтроллером как логический ноль. 

   При питании 5 В, входное напряжение меньше ~1.4, воспринимается микроконтроллером как логический ноль. 

   Думаю ты заметил, что между пороговыми уровнями логического нуля и единицы разница 2 — 1.4 = 0.6 В. Как микроконтроллер воспринимает напряжение попавшее в этот диапазон? Никак. Благодаря наличию гистерезиса, внутренняя логика вывода микроконтроллера не реагирует на эти значения. И только в случае превышения порогов, переключается в одно из состояний. Про гистерезис ты можешь немного почитать в статье «Компаратор на операционном усилителе».

Зависимость гистерезиса от напряжения питания AVR

Зависимость гистерезиса от напряжения питания микроконтроллера

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

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

    Подводя итог выше сказанному, сформулирую несколько правил:

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

   Кстати, недавно я наступил на грабли, связанные с согласованием уровней. В одной из схем я применил 5-ти вольтовый сторожевой таймер и 3-х вольтовую ПЛИС. Выход таймера согласовал со входом ПЛИС, а про согласование входа сброса таймера с выходом ПЛИС забыл. Когда плата пришла с завода, я обнаружил, что уровня выходного напряжения ПЛИС не хватает для перезагрузки сторожевого таймера и тот постоянно ее сбрасывает. Из положения пришлось выходить, используя 5-ти вольтовую логическую микросхему на плате. У нее оставалось 2 незадействованных логических элемента и она «нормально воспринимала» логические уровни ПЛИС. Так что будьте аккуратнее, такой момент можно случайно проглядеть, особенно, если в схеме много микросхем.

Устройство и работа портов ввода-вывода микроконтроллеров 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) — при этом открывается уже нижний вентиль, что дает на выводе около нуля вольт.

Что означает AVR?


AVR

Автоматическое регулирование напряжения

Академия и наука »Электроника

Оценить:
AVR

Автоматический регулятор напряжения

и многое другое …

Оцените:
AVR

Замена аортального клапана

Медицина »Физиология — и многое другое…

Оцените:
AVR

Аудио-видеоресивер

Academic & Science »Электроника

AVR

Автоматизированный голосовой ответ

Вычислительная техника »Телеком

Оцените это:
AVR Оцените:
AVR

Автоматическое распознавание объема

Вычисления »Общие вычисления

Расширенный виртуальный Risc

Вычислительная техника »Общие вычисления

Оценить:
AVR

Аудиовизуальный ресивер

Разное» Не классифицируется

AVR

Australian Vital Records

Региональный »Австралийский

Оцените его:
AVR 9000 Radio Сообщество & Медиа

Оцените:
AVR

Железнодорожная компания Аллегени Валли

Региональные »Железные дороги

АРН 900 05

Разрешение видео Avid

Разное »Несекретный

Оцените:
AVR

Подкисление Улетучивание 150005

Химия и наука
Оценить:
AVR

Коэффициент посещений рекламодателя

Интернет

Оценить:
Оценить:
AVR

Коэффициент вариации площади

Разное

Оцените это:
AVR

Аудио-видеоресивер

Академия и наука »Электроника

Оцените это:
Am AV4 Напряжение и Сопротивление

Разное »Несекретный

Оцените:
AVR

Альф Вегард RISC

57

000

0 Разное 95175
0 it:
9000 Allegy Valley

Региональные »Железные дороги

AVR

Среднее

Разное

Оценить:
AVR

9000 Разное

9000 Разное Аудио Визуальные исследования

000
Оценить:
AVR

Расширенный вектор вправо

Разное »Несекретный

Оценить:
Оцените:
AVR

Аренда микроавтобусов в аэропорту

Разное» Самолеты и авиация

,Учебное пособие по

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

Лучший способ объяснить, что такое микроконтроллер, — это начать с вашего компьютера. Ваш настольный компьютер (или ноутбук) состоит из нескольких частей: центрального процессора (например, Pentium или Celeron), некоторого объема оперативной памяти, жесткого диска, клавиатуры и мыши и экрана монитора. Программы хранятся на жестком диске и выполняются на CPU, а временные данные хранятся в RAM. Вы можете запускать несколько программ одновременно, имея одну «главную программу», называемую операционной системой (например, Linux, Windows или Mac OS X), и эта главная программа отслеживает все за вас.

Микросхема AVR также имеет компоненты. У него есть ЦП, немного флэш-памяти, немного ОЗУ и немного EEPROM, все в одном маленьком чипе !. ЦП такой же, как и в компьютере, но он намного проще и не такой быстрый (чего вы ожидаете за 2,50 доллара?) Флэш-память похожа на флэш-память в вашем mp3-плеере или карте цифровой камеры, за исключением того, что она используется хранить программы. Это похоже на жесткий диск микроконтроллера, за исключением того, что с него можно только читать. Оперативная память похожа на оперативную память компьютера.EEPROM похожа на флеш-память, за исключением того, что вы не можете запускать из нее программу, но она используется как долговременное хранилище. EEPROM не стирается, когда чип теряет питание.

Итак, напомним: микросхема AVR запускает любую программу, хранящуюся во флэш-памяти, использует RAM для временного хранения и EEPROM для более длительного хранения.

Большинство компьютеров имеют 32-разрядный процессор с тактовой частотой 1 ГГц, 1 ГБ ОЗУ и 100 ГБ памяти. Обсуждаемые здесь типы микроконтроллеров работают на частоте 10 МГц, имеют 1 КБ ОЗУ и 10 КБ памяти.(На порядок) Однако их небольшой размер, низкое энергопотребление и невысокая стоимость делают их отличным выбором для многих проектов!

Хорошо, теперь ясно, что делают микроконтроллеры, как заставить их что-то делать?

  1. Ну, во-первых, вам нужно написать программу (или попросить кого-нибудь написать ее), которая сообщает чипу, что делать.
  2. Затем вы должны его скомпилировать, то есть превратить описание программы в машинный код.
  3. Затем вы программируете чип с помощью программатора, который передает машинный код на устройство
  4. Тест, отладка, повторить!

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

комментариев? Предложения? Напишите на форум!

,

Что такое AVR? Объясните функцию AVR?

В чем главное отличие ИБП от инвертора? А электротехника и электроника?

0 ответов


Как спроектировать индуктивную нагрузку на 3 фазы 440 В и максимум 5 усилители на звезду или дельту? Можем ли мы использовать двигатель 15 кВт, 1450 об / мин для 15 кВт, 960 об / мин применение? Если да. как …… н.если тот же мотор использовал то это sideeefect.

0 ответов


почему КЕРАМИЧЕСКИЙ материал используется в изоляторах ??

1 ответов


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

1 ответов


Предположим, у меня есть двигатель переменного тока мощностью 25 л.с., 1500 об / мин, 50 Гц. Могу ли я работать двигатель 2500 об / мин с приводами переменного тока за счет увеличения частоты либо безопасно, либо нет….

2 ответа



какова функция регулятора в dg set

1 ответов Игараши, Medispray, Reddy Labs,


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

1 ответов


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

5 ответов


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

0 ответов


почему коэффициент ТТ составляет 50/5, 100/5, 25/5.

11 ответов ABB, Ramky,


Использование импульсного преобразователя мощности в режиме реального времени?

0 ответов


Как мы подключаем ваттметр для проверки обрыва и короткого замыкания однофазного трансформатора.

2 ответа Парус,


.

avr — что это делает в сборке

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. работы Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
,

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

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

2021 © Все права защищены.