Отредактировано Serega45l (13.05.2023 17:42:07)
Микроконтроллеры фирмы Atmel
Сообщений 1 страница 2 из 2
Поделиться213.05.2023 17:41:40
AVR-программирование.
Общее количество существующих семейств микроконтроллеров оценивается приблизительно в 100 с лишним, причем ежегодно появляются все новые и новые. Каждое из этих семейств может включать десятки разных моделей. Причем львиная доля выпускаемых чипов приходится на специализированные контроллеры: например, для управления USB-интерфейсом, или ЖК-дисплеями. Иногда довольно трудно классифицировать продукт: так, многие представители семейства ARM, которое широко применяется для построения мобильных устройств, с точки зрения развитой встроенной функциональности относятся к типичным контроллерам, но в то же время достаточно мощное ядро позволяет отнести их и к классу микропроцессоров.
Из семейств универсальных 8-разрядных микроконтроллеров, так сказать, «на все случаи жизни», наиболее распространены три: контроллеры классической архитектуры х51 (первый контроллер семейства 8051 был выпущен фирмой Intel еще в середине 1980-х), контроллеры PIC фирмы Microchip (идеально подходят для проектирования несложных устройств, особенно предназначенных для тиражирования), и рассматриваемые нами Atmel AVR.
Заметки на полях
в 1995 г. два студента Норвежского университета науки и технологий в г. Тронхейме, Альф Боген и Вегард Воллен, выдвинули идею 8-разрядного RISC-ядра, которую предложили руководству Atmel. Имена разработчиков вошли в название архитектуры AVR: Alf + Vegard + RISC. В Atmel идея настолько понравилась, что в 1996 г. был основан исследовательский центр в Тронхейме, и уже в конце того же года был начат выпуск первого опытного микроконтроллера новой серии AVR под названием AT90S1200. Во второй половине 1997 г. корпорация Atmel приступила к серийному производству семейства AVR.
Почему AVR?
у AVR-контроллеров «с рождения» есть несколько особенностей, которые отличают это семейство от остальных МК, упрощают его изучение и использование. Одним из существенных преимуществ AVR стало использование конвейера. В результате для AVR не существует понятия машинного цикла: большинство команд, как мы говорили, выполняется за один такт (для сравнения отметим, что пользующиеся большой популярностью МК семейства PIC выполняют команду за 4 такта).
Правда, при этом пришлось немного пожертвовать простотой системы команд, есть некоторые сложности и в области операций с битами. Тем не менее, это не приводит к заметным трудностям при изучении AVR-ассемблера: наоборот, программы получаются короче и больше напоминают программу на языке высокого уровня (отметим, что AVR проектировались специально в расчете на максимальное приближение к структуре языка С).
Другое огромное преимущество AVR-архитектуры - наличие 32 оперативных регистров, не во всем равноправных, но позволяющих в простейших случаях обходиться без обращения к оперативной памяти и, что еще важнее, без использования стека - главного источника ошибок у начинающих программистов (мало того, в младщих моделях AVR стек даже недоступен для программиста). Для AVR не существует понятия «аккумулятора», ключевого для ряда других семейств. Это еще больше приближает структуру ассемблерных программ для AVR к программам на языке высокого уровня, где операторы работают не с ячейками памяти и регистрами, а с абстрактными переменными и константами.
Но это, конечно, не значит, что AVR - однозначно лучшее в мире семейство МК. У него есть и ряд недостатков (например, несовершенная система защиты энергонезависимой памяти данных- EEPROM, некоторые вопросы с помехоустойчивостью, излишние сложности в системе команд и структуре программ и т. п.). Но в принципе любые универсальные современные МК позволяют делать одно и то же, и вопрос выбора платформы - вопрос в значительной степени предпочтений и личного опыта разработчика.
Classic, Mega и Tiny
Линейка универсальных контроллеров AVR общего назначения делится на семейства - Classic, Mega и Tiny (есть и новейшее семейство Xmega, но оно представляет весьма «навороченные» приборы не для наших задач). МК семейства Classic (они именовались, как АТ908<марка контроллера>) ныне уже не производятся, однако все еще распространены, так как они задержались на складах торгующих фирм, и, к тому же, для них наработано значительное количество программ. Чтобы пользователям не пришлось переписывать все ПО, фирма Atmel позаботилась о преемственности - большинство МК семейства Classic имеет функциональные аналоги в семействе Mega, например, AT90S8515- ATmega8515, AT90S8535- ATmega8535 и т.п. (только AT90S2313 имеет аналог в семействе Tiny - ATtiny2313).
Полная совместимость обеспечивается специальным установочным битом (из набора т. н. Fuse-битов), при программировании которого Mega-процессор начинает функционировать, как Classic (подробнее об этом рассказано в главе 19). Для вновь разрабатываемых устройств обычно нет никакого смысла в использовании их в режиме совместимости, однако такой прием в ряде случаев может оказаться полезным для начинающих, так как МК Classic устроены проще и не заставляют пользователя отвлекаться на некоторые ненужные подробности, не имеющие отношения к делу. Поэтому в книге далее будут приводиться иногда примеры и для «классической» серии.
Семейство Tiny (что в буквальном переводе означает «крохотный») предна; значено для наиболее простых устройств. Часть МК этого семейства не имеет возможности программирования по последовательному интерфейсу, и потому мы не буд^м их рассматривать в этой книге, за исключением ATtiny2313 (это не значит, что остальных Tiny следует избегать - среди них есть очень удобные и функциональные микросхемы, нередко вообще не имеющие аналогов). У этого МК отсутствует бит совместимости с «классическим» аналогом AT90S2313, одним из самых простых и удобных контроллеров Atmel, но при внимательном рассмотрении оказывается, что они и без такого бита совместимы «снизу вверх»: программы для «классического» 2313 полностью подходят и для Tiny2313 (см. следующую главу).
Структура МК AVR
Общая структура внутреннего устройства МК AVR приведена на рис. 18.9. На этой схеме показаны все основные компоненты AVR (за исключением некоторых специализированных); в отдельных моделях некоторые компоненты могут отсутствовать или различаться по характеристикам, неизменным остается только общее 8-разрядное процессорное ядро (GPU, General Processing Unit). Кратко рассмотрим наиболее важные компоненты, большинство из которых мы будем рассматривать в дальнейшем подробнее.
Начнем с памяти. В структуре AVR имеются три разновидности памяти: flash-память программ, ОЗУ (SRAM) для временного хранения данных, и энергонезависимая память (EEPROM) для долговременного хранения констант и данных. Рассмотрим их по отдельности.
Память программ
Встроенная flash-память программ в AVR-контроллерах имеет объем от 1 кбайта у ATtinyl 1 до 256 кбайт у ATmega2560. Первое число в наименовании модели содержит величину этой памяти в килобайтах, из ряда: 1, 2, 4, 8, 16, 32, 64, 128 и 256 кбайт. Так, ATtiny2313 имеет 2 кбайта памяти, а ATmega8535 - 8 кбайт.
С точки зрения программиста память программ можно считать построенной из отдельных ячеек- слов по два байта каждое. Устройство памяти программ (и только этой памяти!) по двухбайтовым словам- очень важный момент, который нужно твердо усвоить. Такая организация обусловлена тем.
что любая команда в AVR имеет длину ровно 2 байта. Исключение составляют команды jmp, call и некоторые другие (например, ids), которые оперируют с адресами 16-разрядной и более длины, длина этих команд составляет 4 байта, и они используются лишь в моделях с памятью программ более 8 кбайт, поэтому в этой книге вы их не встретите. Во всех остальных случаях счетчик команд сдвигается при выполнении очередной команды на 2 байта (одно слово), поэтому необходимую емкость памяти легко подсчитать, зная просто число используемых команд.
По умолчанию все контроллеры AVR всегда начинают выполнение программы с адреса $0000^. Если в программе не используются прерывания, то с этого адреса может начинаться прикладная программа, как мы увидим далее. В противном случае по этому адресу располагается т. н. таблица векторов прерываний, подробнее о которой мы будем говорить в главе 19.
Память данных (ОЗУ, 3RAM)
в отличие от памяти программ, адресное пространство памяти данных адресуется побайтно (а не пословно). Адресация полностью линейная, без какого-то деления на страницы, сегменты или банки, как это принято в некоторых других системах. Исключая некоторые младшие модели Tiny, объем встроенной SRAM колеблется от 128 байт (например, у ATtiny2313) до 4-8 кбайт у старших моделей Mega.
Адресное пространство статической памяти данных (SRAM) условно делится на несколько областей, показанных на рис. 18.10. К собственно встроенной SRAM относится лишь затемненная часть, до нее по порядку адресов расположено адресное пространство регистров, где первые 32 байта занимает массив регистров общего назначения (РОН), еще 64 - регистров ввода-вывода (РВВ).
Для некоторых моделей Mega (ATmega8515, ATmegal62, ATmegal28, AT-mega2560 и др.) предусмотрена возможность подключения внешней памяти объемом до 64 кбайт. Отметим, что адресные пространства РОН и РВВ не отнимают пространство у ОЗУ данньпс: так, если в конкретной модели МК имеется 512 байт SRAM, а пространство регистров занимает первые 96 байт (до адреса $60), то адреса SRAM займут адресное пространство от $0060 до $025F (то есть от 96 до 607 ячейки включительно). Конец встроенной памяти данных обозначается константой ramend. Следует учесть, что последние адреса SRAM, как минимум, на четыре-шесть ячеек от конца (в зависимости от количества вложенных вызовов процедур, для надежности лучше принять это число равным десяти или даже более) занимать данными не следует, так как они при использовании подпрограмм и прерываний заняты под стек.
Рис. 18.10. Адресное пространство статической памяти данных (SRAM) микроконтроллеров AVR
Операции чтения/записи в память одинаково работают с любыми адресами из доступного пространства, и потому при работе с SRAM нужно быть внимательным: вместо записи в память вы легко можете «попасть» в какой-нибудь регистр. Для обращения к РОН, как к ячейкам памяти, можно в качестве адреса подставлять номер регистра, а вот при обращении к РВВ таким же способом к номеру последнего нужно прибавлять $20. Следует также помнить, что по умолчанию при включении питания все РВВ устанавливаются в нулевое состояние во всех битах (единичные исключения все же имеются, поэтому в критичных случаях надо смотреть документацию), а вот РОН и ячейки SRAM могут принимать произвольные значения.
Энергонезависимая память данных (EEPROM)
Все модели МК AVR (кроме снятого с производства ATtinyl 1) имеют встроенную EEPROM для хранения констант и данных при отключении питания. В разных моделях объем ее варьируется от 64 байт (ATtinylх) до 4 кбайт (старшие модели Mega). Число циклрв перепрограммирования EEPROM может достигать 100 тыс.
Напомним, что EEPROM отличается от flash-памяти возможностью выборочного программирования побайтно (в принципе, даже побитно, но эта возможность скрыта от пользователя). Чтение из EEPROM осуществляется с такой же скоростью, как и чтение из РОН - в течение одного машинного цикла (правда, на практике оно растягивается на 4 цикла, но программисту следить за этим специально не требуется). А вот запись в EEPROM протекает значительно медленнее, и к тому же с не точно определенной скоростью: цикл записи одного байта может занимать от 2 до 4 и более миллисекунд. Процесс записи регулируется встроенным RC-генератором, частота которого нестабильна (при низком напряжении питания можно ожидать, что время записи будет больше). За такое время при обычных тактовых частотах МК успевает выполнить несколь^со тысяч команд, потому программирование процедуры записи требует аккуратности: например, нужно следить, чтобы в момент записи не «вклинилось» прерывание (подробнее об этом далее).
Главная же сложность при использовании EEPROM - то, что при недостаточно быстром снижении напряжения питания в момент выключения содержимое ее может быть испорчено. Обусловлено это тем, что при снижении напряжения питания ниже некоторого порога (ниже порога стабильной работы, но недостаточного для полного выключения) и вследствие его дребезга МК начинает выполнять произвольные команды, в том числе может выполнить и процедуру записи в EEPROM, если она имеется в программе. Если учесть, что типовая команда МК AVR выполняется за десятые доли микросекунды, то ясно, что никакой реальный источник питания не может обеспечить снижение напряжения до нуля за нужное время. По опыту автора при питании от обычного стабилизатора типа LM7805 с рекомендованными значениями емкости конденсаторов на входе и на выходе содержимое EEPROM будет испорчено примерно в половине случаев.
Этой проблемы не должно существовать, если запись констант в EEPROM производится при программировании МК, а процедура записи в программе отсутствует. Во всех же остальных случаях (а их, очевидно, абсолютное большинство - EEPROM чаще всего используется для хранения пользовательских установок и текущей конфигурации при выключении питания) приходится принимать специальные меры. Встроенный детектор падения напряжения (Brown-Out Detection, BOD), имеющийся практически во всех моделях Tiny и Mega, обычно с этим не справляется. Наиболее кардинальной из таких мер является установка внешнего монитора питания, удерживающего МК при снижении напряжения питания ниже пороговой величины в состоянии сброса (см. главу 21).
Семейство AVR – включает в себя 8 битные микроконтроллеры для широкого спектра задач. Для сложных проектов с большим количеством входов/выходов вам предоставлены микроконтроллеры AVR семейства Mega и AVR xmega, которые выпускаются в корпусах от 44 до 100 выводов и имеют до 1024 кб Flash памяти, а скорость их работы – до 32 миллионов операций в секунду. Практически все модели имеют возможность генерировать ШИМ, встроенный АЦП и ЦАП.
Миллионы радиолюбителей разрабатывают интересные проекты на AVR – это самое популярное семейство МК, о них написано очень много книг на русском и других языках мира.
Интересно: для прошивки нужен программатор, один из самых распространённых – это AVRISP MKII, который вы легко можете сделать из своей Arduino.
Популярность семейства АВР поддерживается на высоком уровне уже много лет, в последние 10 лет интерес к ним подогревает проект Arduino – плата для простого входа в мир цифровой электроники.
AVR-программирование. Программирование микроконтроллеров AVR для начинающих. Микроконтроллеры семейства avr Микроконтроллеры семейства avr
Общее количество существующих семейств микроконтроллеров оценивается приблизительно в 100 с лишним, причем ежегодно появляются все новые и новые. Каждое из этих семейств может включать десятки разных моделей. Причем львиная доля выпускаемых чипов приходится на специализированные контроллеры: например, для управления USB-интерфейсом, или ЖК-дисплеями. Иногда довольно трудно классифицировать продукт: так, многие представители семейства ARM, которое широко применяется для построения мобильных устройств, с точки зрения развитой встроенной функциональности относятся к типичным контроллерам, но в то же время достаточно мощное ядро позволяет отнести их и к классу микропроцессоров.
Из семейств универсальных 8-разрядных микроконтроллеров, так сказать, «на все случаи жизни», наиболее распространены три: контроллеры классической архитектуры х51 (первый контроллер семейства 8051 был выпущен фирмой Intel еще в середине 1980-х), контроллеры PIC фирмы Microchip (идеально подходят для проектирования несложных устройств, особенно предназначенных для тиражирования), и рассматриваемые нами Atmel AVR.
Заметки на полях
в 1995 г. два студента Норвежского университета науки и технологий в г. Тронхейме, Альф Боген и Вегард Воллен, выдвинули идею 8-разрядного RISC-ядра, которую предложили руководству Atmel. Имена разработчиков вошли в название архитектуры AVR: Alf + Vegard + RISC. В Atmel идея настолько понравилась, что в 1996 г. был основан исследовательский центр в Тронхейме, и уже в конце того же года был начат выпуск первого опытного микроконтроллера новой серии AVR под названием AT90S1200. Во второй половине 1997 г. корпорация Atmel приступила к серийному производству семейства AVR.
Почему AVR?
у AVR-контроллеров «с рождения» есть несколько особенностей, которые отличают это семейство от остальных МК, упрощают его изучение и использование. Одним из существенных преимуществ AVR стало использование конвейера. В результате для AVR не существует понятия машинного цикла: большинство команд, как мы говорили, выполняется за один такт (для сравнения отметим, что пользующиеся большой популярностью МК семейства PIC выполняют команду за 4 такта).
Правда, при этом пришлось немного пожертвовать простотой системы команд, есть некоторые сложности и в области операций с битами. Тем не менее, это не приводит к заметным трудностям при изучении AVR-ассемблера: наоборот, программы получаются короче и больше напоминают программу на языке высокого уровня (отметим, что AVR проектировались специально в расчете на максимальное приближение к структуре языка С).
Другое огромное преимущество AVR-архитектуры - наличие 32 оперативных регистров, не во всем равноправных, но позволяющих в простейших случаях обходиться без обращения к оперативной памяти и, что еще важнее, без использования стека - главного источника ошибок у начинающих программистов (мало того, в младщих моделях AVR стек даже недоступен для программиста). Для AVR не существует понятия «аккумулятора», ключевого для ряда других семейств. Это еще больше приближает структуру ассемблерных программ для AVR к программам на языке высокого уровня, где операторы работают не с ячейками памяти и регистрами, а с абстрактными переменными и константами.
Но это, конечно, не значит, что AVR - однозначно лучшее в мире семейство МК. У него есть и ряд недостатков (например, несовершенная система защиты энергонезависимой памяти данных- EEPROM, некоторые вопросы с помехоустойчивостью, излишние сложности в системе команд и структуре программ и т. п.). Но в принципе любые универсальные современные МК позволяют делать одно и то же, и вопрос выбора платформы - вопрос в значительной степени предпочтений и личного опыта разработчика.
Classic, Mega и Tiny
Линейка универсальных контроллеров AVR общего назначения делится на семейства - Classic, Mega и Tiny (есть и новейшее семейство Xmega, но оно представляет весьма «навороченные» приборы не для наших задач). МК семейства Classic (они именовались, как АТ908<марка контроллера>) ныне уже не производятся, однако все еще распространены, так как они задержались на складах торгующих фирм, и, к тому же, для них наработано значительное количество программ. Чтобы пользователям не пришлось переписывать все ПО, фирма Atmel позаботилась о преемственности - большинство МК семейства Classic имеет функциональные аналоги в семействе Mega, например, AT90S8515- ATmega8515, AT90S8535- ATmega8535 и т.п. (только AT90S2313 имеет аналог в семействе Tiny - ATtiny2313).
Полная совместимость обеспечивается специальным установочным битом (из набора т. н. Fuse-битов), при программировании которого Mega-процессор начинает функционировать, как Classic (подробнее об этом рассказано в главе 19). Для вновь разрабатываемых устройств обычно нет никакого смысла в использовании их в режиме совместимости, однако такой прием в ряде случаев может оказаться полезным для начинающих, так как МК Classic устроены проще и не заставляют пользователя отвлекаться на некоторые ненужные подробности, не имеющие отношения к делу. Поэтому в книге далее будут приводиться иногда примеры и для «классической» серии.
Семейство Tiny (что в буквальном переводе означает «крохотный») предна; значено для наиболее простых устройств. Часть МК этого семейства не имеет возможности программирования по последовательному интерфейсу, и потому мы не буд^м их рассматривать в этой книге, за исключением ATtiny2313 (это не значит, что остальных Tiny следует избегать - среди них есть очень удобные и функциональные микросхемы, нередко вообще не имеющие аналогов). У этого МК отсутствует бит совместимости с «классическим» аналогом AT90S2313, одним из самых простых и удобных контроллеров Atmel, но при внимательном рассмотрении оказывается, что они и без такого бита совместимы «снизу вверх»: программы для «классического» 2313 полностью подходят и для Tiny2313 (см. следующую главу).
Структура МК AVR
Общая структура внутреннего устройства МК AVR приведена на рис. 18.9. На этой схеме показаны все основные компоненты AVR (за исключением некоторых специализированных); в отдельных моделях некоторые компоненты могут отсутствовать или различаться по характеристикам, неизменным остается только общее 8-разрядное процессорное ядро (GPU, General Processing Unit). Кратко рассмотрим наиболее важные компоненты, большинство из которых мы будем рассматривать в дальнейшем подробнее.
Начнем с памяти. В структуре AVR имеются три разновидности памяти: flash-память программ, ОЗУ (SRAM) для временного хранения данных, и энергонезависимая память (EEPROM) для долговременного хранения констант и данных. Рассмотрим их по отдельности.
Память программ
Встроенная flash-память программ в AVR-контроллерах имеет объем от 1 кбайта у ATtinyl 1 до 256 кбайт у ATmega2560. Первое число в наименовании модели содержит величину этой памяти в килобайтах, из ряда: 1, 2, 4, 8, 16, 32, 64, 128 и 256 кбайт. Так, ATtiny2313 имеет 2 кбайта памяти, а ATmega8535 - 8 кбайт.
С точки зрения программиста память программ можно считать построенной из отдельных ячеек- слов по два байта каждое. Устройство памяти программ (и только этой памяти!) по двухбайтовым словам- очень важный момент, который нужно твердо усвоить. Такая организация обусловлена тем.
что любая команда в AVR имеет длину ровно 2 байта. Исключение составляют команды jmp, call и некоторые другие (например, ids), которые оперируют с адресами 16-разрядной и более длины, длина этих команд составляет 4 байта, и они используются лишь в моделях с памятью программ более 8 кбайт, поэтому в этой книге вы их не встретите. Во всех остальных случаях счетчик команд сдвигается при выполнении очередной команды на 2 байта (одно слово), поэтому необходимую емкость памяти легко подсчитать, зная просто число используемых команд.
По умолчанию все контроллеры AVR всегда начинают выполнение программы с адреса $0000^. Если в программе не используются прерывания, то с этого адреса может начинаться прикладная программа, как мы увидим далее. В противном случае по этому адресу располагается т. н. таблица векторов прерываний, подробнее о которой мы будем говорить в главе 19.
Память данных (ОЗУ, 3RAM)
в отличие от памяти программ, адресное пространство памяти данных адресуется побайтно (а не пословно). Адресация полностью линейная, без какого-то деления на страницы, сегменты или банки, как это принято в некоторых других системах. Исключая некоторые младшие модели Tiny, объем встроенной SRAM колеблется от 128 байт (например, у ATtiny2313) до 4-8 кбайт у старших моделей Mega.
Адресное пространство статической памяти данных (SRAM) условно делится на несколько областей, показанных на рис. 18.10. К собственно встроенной SRAM относится лишь затемненная часть, до нее по порядку адресов расположено адресное пространство регистров, где первые 32 байта занимает массив регистров общего назначения (РОН), еще 64 - регистров ввода-вывода (РВВ).
Для некоторых моделей Mega (ATmega8515, ATmegal62, ATmegal28, AT-mega2560 и др.) предусмотрена возможность подключения внешней памяти объемом до 64 кбайт. Отметим, что адресные пространства РОН и РВВ не отнимают пространство у ОЗУ данньпс: так, если в конкретной модели МК имеется 512 байт SRAM, а пространство регистров занимает первые 96 байт (до адреса $60), то адреса SRAM займут адресное пространство от $0060 до $025F (то есть от 96 до 607 ячейки включительно). Конец встроенной памяти данных обозначается константой ramend. Следует учесть, что последние адреса SRAM, как минимум, на четыре-шесть ячеек от конца (в зависимости от количества вложенных вызовов процедур, для надежности лучше принять это число равным десяти или даже более) занимать данными не следует, так как они при использовании подпрограмм и прерываний заняты под стек.
Рис. 18.10. Адресное пространство статической памяти данных (SRAM) микроконтроллеров AVR
Операции чтения/записи в память одинаково работают с любыми адресами из доступного пространства, и потому при работе с SRAM нужно быть внимательным: вместо записи в память вы легко можете «попасть» в какой-нибудь регистр. Для обращения к РОН, как к ячейкам памяти, можно в качестве адреса подставлять номер регистра, а вот при обращении к РВВ таким же способом к номеру последнего нужно прибавлять $20. Следует также помнить, что по умолчанию при включении питания все РВВ устанавливаются в нулевое состояние во всех битах (единичные исключения все же имеются, поэтому в критичных случаях надо смотреть документацию), а вот РОН и ячейки SRAM могут принимать произвольные значения.
Энергонезависимая память данных (EEPROM)
Все модели МК AVR (кроме снятого с производства ATtinyl 1) имеют встроенную EEPROM для хранения констант и данных при отключении питания. В разных моделях объем ее варьируется от 64 байт (ATtinylх) до 4 кбайт (старшие модели Mega). Число циклрв перепрограммирования EEPROM может достигать 100 тыс.
Напомним, что EEPROM отличается от flash-памяти возможностью выборочного программирования побайтно (в принципе, даже побитно, но эта возможность скрыта от пользователя). Чтение из EEPROM осуществляется с такой же скоростью, как и чтение из РОН - в течение одного машинного цикла (правда, на практике оно растягивается на 4 цикла, но программисту следить за этим специально не требуется). А вот запись в EEPROM протекает значительно медленнее, и к тому же с не точно определенной скоростью: цикл записи одного байта может занимать от 2 до 4 и более миллисекунд. Процесс записи регулируется встроенным RC-генератором, частота которого нестабильна (при низком напряжении питания можно ожидать, что время записи будет больше). За такое время при обычных тактовых частотах МК успевает выполнить несколь^со тысяч команд, потому программирование процедуры записи требует аккуратности: например, нужно следить, чтобы в момент записи не «вклинилось» прерывание (подробнее об этом далее).
Главная же сложность при использовании EEPROM - то, что при недостаточно быстром снижении напряжения питания в момент выключения содержимое ее может быть испорчено. Обусловлено это тем, что при снижении напряжения питания ниже некоторого порога (ниже порога стабильной работы, но недостаточного для полного выключения) и вследствие его дребезга МК начинает выполнять произвольные команды, в том числе может выполнить и процедуру записи в EEPROM, если она имеется в программе. Если учесть, что типовая команда МК AVR выполняется за десятые доли микросекунды, то ясно, что никакой реальный источник питания не может обеспечить снижение напряжения до нуля за нужное время. По опыту автора при питании от обычного стабилизатора типа LM7805 с рекомендованными значениями емкости конденсаторов на входе и на выходе содержимое EEPROM будет испорчено примерно в половине случаев.
Этой проблемы не должно существовать, если запись констант в EEPROM производится при программировании МК, а процедура записи в программе отсутствует. Во всех же остальных случаях (а их, очевидно, абсолютное большинство - EEPROM чаще всего используется для хранения пользовательских установок и текущей конфигурации при выключении питания) приходится принимать специальные меры. Встроенный детектор падения напряжения (Brown-Out Detection, BOD), имеющийся практически во всех моделях Tiny и Mega, обычно с этим не справляется. Наиболее кардинальной из таких мер является установка внешнего монитора питания, удерживающего МК при снижении напряжения питания ниже пороговой величины в состоянии сброса (см. главу 21).
Семейство AVR – включает в себя 8 битные микроконтроллеры для широкого спектра задач. Для сложных проектов с большим количеством входов/выходов вам предоставлены микроконтроллеры AVR семейства Mega и AVR xmega, которые выпускаются в корпусах от 44 до 100 выводов и имеют до 1024 кб Flash памяти, а скорость их работы – до 32 миллионов операций в секунду. Практически все модели имеют возможность генерировать ШИМ, встроенный АЦП и ЦАП.
Миллионы радиолюбителей разрабатывают интересные проекты на AVR – это самое популярное семейство МК, о них написано очень много книг на русском и других языках мира.
Интересно: для прошивки нужен программатор, один из самых распространённых – это AVRISP MKII, который вы легко можете сделать из своей Arduino.
Популярность семейства АВР поддерживается на высоком уровне уже много лет, в последние 10 лет интерес к ним подогревает проект Arduino – плата для простого входа в мир цифровой электроники.
Сферы применения различных Tiny, Mega
Четко описать сферу применения микроконтроллера нельзя, ведь она безгранична, однако можно классифицировать следующим образом:
Tiny AVR – самые простые в техническом плане. В них мало памяти и выводов для подключения сигналов, цена соответствующая. Однако это идеальное решение для простейших проектов, начиная от автоматики управления осветительными приборами салона автомобиля, до осциллографических пробников для ремонта электроники своими руками. Они также используются в Arduino-совместимом проекте – Digispark. Это самая маленькая версия ардуины от стороннего производителя; выполнена в формате USB-флешки.
Семейство MEGA долго оставалось основным у продвинутых радиолюбителей, они мощнее и имеют больший, чем в Tiny, объём памяти и количество выводов. Это позволяет реализовывать сложные проекты, однако семейство очень широко для краткого описания. Именно они использовались в первых платах Arduino, актуальные платы оснащены, в основном, ATMEGA
Выход любого МК без дополнительных усилителей потянет светодиоды или светодиодную матрицу в качестве индикаторов, например.
AVR xMega или старшие микроконтроллеры
Разработчики Atmel создали AVR xMega, как более мощный МК, при этом принадлежащий к семейству AVR. Это было нужно для того, чтобы облегчить труд разработчика при переходе к более мощному семейству.
В AVR xMega есть два направления:
МК с напряжением питания 1.8-2.7 вольта, работают с частотой до 12 мГц, их входа устойчивы к величине напряжения в 3.3 В;
МК с напряжением питания 2.7-3.6 вольта уже могут работать на более высоких частотах – до 32 мГц, а вход устойчив к 5 вольтам.
Также стоит отметить: AVR xMega отлично работают в автономных системах, потому что имеют низкое энергопотребление. Для примера: при работающих таймерах и часах реального времени RTC потребляют 2 мА тока, и готовы к работе от прерывания внешнего или по переполнению таймера, а также по времени. Для выполнения целого ряда функций применяется множество 16 разрядных таймеров.
Отредактировано Serega45l (13.05.2023 17:42:51)