ATmega16А-16PI
AT — сделано в Atmel. Mega — вид семейства. Существует еще Tiny (меньше функций, памяти) и Xmega (новая, много фунцкий, больше памяти). 16 — флеш-память в килобайтах. Хотя Mega162 это не контроллер со 162 кб, а 2-ая модификация Мега16 с памятью 16 кб. Мега88 — не 88кб, а 8кб флеша, а вторая воьмёрка, типа модификация Мега8. Аналогично и Мега48 или Мега168. Тоже самое и семейством Tiny. Например, Tiny 2313 — 2 кб. Tiny12 — 1кб. А — префикс энергопотребления (обычно), например, V и L серии — низковольтные, могут работать от 2,7 вольт. Правда за низковольтность приходится платить меньше частотой. A и P имеют новые серии AVR с технологией PicoPower, т.е. ультраэкономичные. 16 — Предельная тактовая частота в мегагерцах (можно разогнать до 20). P — тип корпуса (P — DIP корпус, корпуса вида SOIC (индекс S) или TQFP (индекс A). I — Тип лужения выводов (I — свинцовый припой, U — безсцвиновый)
ATMega16A-16PU — недорогой, много выводов, много периферии. Доступен в разных корпусах.
ATTiny2313-20SU (datasheet на русском) — идеальный вариант для изготовления всяких часов/будильников и прочей мелкой домашней автоматики. Дешев, компактен. Из минусов — нет АЦП.
ATmega48/88/168 любой из этих контроллеров. Компактен, дешев, многофункционален.
ATmega128 для искушенных. Большой, мощный, много памяти. Дороже.
Фьюзы:
Название | Flash ROM | EEPROM | RAM | Max I/O | F.max | Питание | 16-bit timer | 8-bit timer | PWM | RTC | SPI | UART | TWI | AD | Int. | Ext Int. | Корпус |
ATmega128 | 128 | 4 | 4096 | 53 | 16 | 2.7-5.5 | 2 | 2 | 8 | Yes | 1 | 2 | Yes | 8 | 34 | 8 | MLF 64 TQFP 64 |
ATmega1280 | 128 | 4 | 8192 | 86 | 16 | 1.8-5.5 | 4 | 2 | 12 | Yes | 1 | 4 | Yes | 16 | 57 | 32 | TQFP 100 |
ATmega1281 | 128 | 4 | 8192 | 51 | 16 | 1.8-5.5 | 4 | 2 | 6 | Yes | 1 | 2 | Yes | 16 | 57 | 32 | MLF 64 TQFP 64 |
ATmega16 | 16 | 0,5 | 1024 | 32 | 16 | 2.7-5.5 | 1 | 2 | 4 | Yes | 1 | 1 | Yes | 8 | 20 | 3 | MLF 44 PDIP 40 TQFP 44 |
ATmega162 | 16 | 0,5 | 1024 | 35 | 16 | 1.8-5.5 | 2 | 2 | 4 | Yes | 1 | 2 | - | - | 28 | 3 | MLF 44 PDIP 40 TQFP 44 |
ATmega164 | 16 | 0,512 | 1024 | 32 | 20 | 1.8-5.5 | 1 | 2 | 6 | Yes | 1 | 2 | Yes | 8 | 31 | 32 | MLF 44 PDIP 40 TQFP 44 |
ATmega165 | 16 | 0,5 | 1024 | 54 | 16 | 1.8-5.5 | 1 | 2 | 4 | Yes | 1+USI | 1 | Yes | 8 | 23 | 17 | MLF 64 TQFP 64 |
ATmega168 | 16 | 0,5 | 1024 | 23 | 20 | 1.8-5.5 | 1 | 2 | 3 | Yes | 1+USART | 1 | Yes | 8 | 26 | 26 | MLF 32 PDIP 28 TQFP 32 |
ATmega169 | 16 | 0,5 | 1024 | 53 | 16 | 1.8-5.5 | 1 | 2 | 4 | Yes | 1+USI | 1 | - | 8 | 23 | 17 | MLF 64 TQFP 64 |
ATmega2560 | 256 | 4 | 8192 | 86 | 16 | 1.8-5.5 | 4 | 2 | 12 | Yes | 1 | 4 | Yes | 16 | 57 | 32 | TQFP 100 |
ATmega2561 | 256 | 4 | 8192 | 51 | 16 | 1.8-5.5 | 4 | 2 | 6 | Yes | 1 | 2 | Yes | 16 | 57 | 32 | MLF 64 TQFP 64 |
ATmega32 | 32 | 1 | 2048 | 32 | 16 | 2.7-5.5 | 1 | 2 | 4 | Yes | 1 | 1 | Yes | 8 | 19 | 3 | MLF 44 PDIP 40 TQFP 44 |
ATmega324 | 32 | 1 | 2048 | 32 | 20 | 1.8-5.5 | 1 | 2 | 6 | Yes | 1 | 2 | Yes | 8 | 31 | 32 | MLF 44 PDIP 40 TQFP 44 |
ATmega325 | 32 | 1 | 2048 | 53 | 16 | 1.8-5.5 | 1 | 2 | 4 | Yes | 1+USI | 1 | Yes | 8 | 23 | 17 | MLF 64 TQFP 64 |
ATmega3250 | 32 | 1 | 2048 | 68 | 16 | 1.8-5.5 | 1 | 2 | 4 | Yes | 1+USI | 1 | Yes | 8 | 32 | 17 | MLF 64 TQFP 64 TQFP 100 |
ATmega328 | 32 | 1 | 2048 | 20 | 1.8-5.5 | 1 | 2 | 6 | 2 | 1 | PDIP 28 MLF 32 TQFP 32 SOIC 32 |
||||||
ATmega329 | 32 | 1 | 2048 | 53 | 16 | 1.8-5.5 | 1 | 2 | 4 | Yes | 1+USI | 1 | - | 8 | 25 | 17 | MLF 64 TQFP 64 TQFP 100 |
ATmega3290 | 32 | 1 | 2048 | 68 | 16 | 1.8-5.5 | 1 | 2 | 4 | Yes | 1+USI | 1 | - | 8 | 25 | 32 | MLF 64 TQFP 64 TQFP 100 |
ATmega406 | 40 | 0,512 | 2048 | 18 | 1 | 1 | 1 | 1 | Yes | - | - | Yes | 23 | 4 | LQFP 48 | ||
ATmega48 | 4 | 0,256 | 512 | 23 | 20 | 1.8-5.5 | 1 | 2 | 3 | Yes | 1+USART | 1 | Yes | 8 | 26 | 26 | MLF 32 PDIP 28 TQFP 32 |
ATmega64 | 64 | 2 | 4096 | 53 | 16 | 2.7-5.5 | 2 | 2 | 8 | Yes | 1 | 2 | Yes | 8 | 34 | 8 | MLF 64 TQFP 64 |
ATmega640 | 64 | 4 | 8192 | 86 | 16 | 1.8-5.5 | 4 | 2 | 12 | Yes | 1+USI | 4 | Yes | 16 | 57 | 32 | MLF 64 TQFP 64 TQFP 100 |
ATmega644 | 64 | 2 | 4096 | 32 | 20 | 1.8-5.5 | 1 | 2 | 6 | Yes | 1 | 1 | Yes | 8 | 31 | 32 | MLF 44 PDIP 40 TQFP 44 |
ATmega645 | 64 | 2 | 4096 | 53 | 16 | 1.8-5.5 | 1 | 2 | 4 | Yes | 1+USI | 1 | Yes | 8 | 23 | 17 | MLF 64 TQFP 64 |
ATmega6450 | 64 | 2 | 4096 | 68 | 16 | 1.8-5.5 | 1 | 2 | 4 | Yes | 1+USI | 1 | Yes | 8 | 32 | 17 | MLF 64 TQFP 64 TQFP 100 |
ATmega649 | 64 | 2 | 4096 | 53 | 16 | 1.8-5.5 | 1 | 2 | 4 | Yes | 1+USI | 1 | - | 8 | 25 | 17 | MLF 64 TQFP 64 TQFP 100 |
ATmega6490 | 64 | 2 | 4096 | 68 | 16 | 1.8-5.5 | 1 | 2 | 4 | Yes | 1+USI | 1 | - | 8 | 25 | 32 | MLF 64 TQFP 64 TQFP 100 |
ATmega8 | 8 | 0,5 | 1024 | 23 | 16 | 2.7-5.5 | 1 | 2 | 3 | Yes | 1 | 1 | Yes | 8 | 18 | 2 | MLF 32 PDIP 28 TQFP 32 |
ATmega8515 | 8 | 0,5 | 512 | 35 | 16 | 2.7-5.5 | 1 | 1 | 3 | - | 1 | 1 | - | - | 16 | 3 | MLF 44 PDIP 40 PLCC 44 TQFP 44 |
ATmega8535 | 8 | 0,5 | 512 | 32 | 16 | 2.7-5.5 | 1 | 2 | 4 | - | 1 | 1 | Yes | 8 | 20 | 3 | MLF 44 PDIP 40 PLCC 44 TQFP 44 |
ATmega88 | 8 | 0,5 | 1024 | 23 | 20 | 1.8-5.5 | 1 | 2 | 3 | Yes | 1+USART | 1 | Yes | 8 | 26 | 26 | MLF 32 PDIP 28 TQFP 32 |
Device | Flash ROM | EEPROM | RAM | Max I/O | F.max | Vcc | 16-bit timer | 8-bit timer | PWM | RTC | SPI | UART | TWI | AD | Int. | Ext Int. | Package |
ATtiny11 | 1 | - | - | 6 | 6 | 2.7-5.5 | - | 1 | - | - | - | - | - | - | 4 | 1 | PDIP 8 SOIC 8 |
ATtiny12 | 1 | 0,0625 | - | 6 | 8 | 1.8-5.5 | - | 1 | - | - | - | - | - | - | 5 | 1 | PDIP 8 SOIC 8 |
ATtiny13 | 1 | 0,064 | 64B + 32 reg | 6 | 20 | 1.8-5.5 | - | 1 | 2 | - | - | - | - | 4 | 9 | 6 | PDIP 8 MLF 20 SOIC 8 |
ATtiny15L | 1 | 0,0625 | - | 6 | 1,6 | 2.7-5.5 | - | 2 | 1 | - | - | - | - | 4 | 8 | 1(+5) | PDIP 8 SOIC 8 |
ATtiny2313 | 2 | 0,128 | 128 | 18 | 20 | 1.8-5.5 | 1 | 1 | 4 | - | USI | 1 | - | - | 8 | 2 | SOIC 20 MLF 20 PDIP 20 |
ATtiny25 | 2 | 0,128 | 128 | 6 | 20 | 1.8-5.5 | - | 2 | 4 | Yes | USI | - | USI | 4 | 15 | 7 | PDIP 8 MLF 20 SOIC 8 |
ATtiny26 | 2 | 0,125 | 128 | 16 | 16 | 2.7-5.5 | - | 2 | 2 | - | USI | - | - | 11 | 11 | 1 | SOIC 20 MLF 32 PDIP 20 |
ATtiny28L | 2 | - | 32 | 11 | 4 | 1.8-5.5 | - | 1 | - | - | - | - | - | - | 5 | 2(+8) | MLF 32 PDIP 28 TQFP 32 |
ATtiny45 | 4 | 0,256 | 256 | 6 | 20 | 1.8-5.5 | - | 2 | 4 | Yes | USI | - | USI | 4 | 15 | 7 | PDIP 8 MLF 20 SOIC 8 |
ATtiny85 | 8 | 0,512 | 512 | 6 | 20 | 1.8-5.5 | - | 2 | 4 | Yes | USI | - | USI | 4 | 15 | 7 | PDIP 8 MLF 20 SOIC 8 |
Flash ROM - объем энергонезависимой памяти программ (в килобайтах);
EEPROM - объем энергонезависимой памяти данных (в байтах);
RAM - объем статической памяти данных (в байтах);
Max I/O - максимальное количество доступных линий ввода / вывода;
F. max - максимальная частота;
Timer(s) 8/16 bit - количество и разрядность таймеров/счетчиков;
PWM - количество независимых каналов широтно-импульсной модуляции;
RTC - система реального времени;
SPI - синхронный трехпроводной последовательный интерфейс;
UART - асинхронный последовательный приемопередатчик;
TWI - двухпроводной последовательный интерфейс;
AD - количество каналов аналого-цифрового преобразования;
Int. - прерывания (interrupts);
Ext. Int. - внешние прерывания;
Package - типы корпуса и общее количество выводов.
![]() PDIP - Plastic Dual In-Line Package |
![]() SOIC - Small Outline Integrated Circuit |
![]() PLCC - Plastic Leader Chip Carrier |
![]() TQFP - Thin Profile Quad Flat Package |
![]() MLF - Micro Lead Frame Package |
МК семейства AVR относят к высокопроизводительным 8-разрядным устройствам с RISC-архитектурой. Быстродействие МК принято оценивать в миллионах операций в секунду, сокращенно MIPS (Millions of Instructions Per Second). В качестве эталона операции принимается самая короткая пересылка 8 битов данных из одного регистра в другой.
Все МК с ядром AVR, благодаря конвейерной RISC-архитектуре, способны выполнять одну пересылку за один такт работы процессора. Получается, что быстродействие напрямую зависит от тактовой частоты, которая, как правило, определяется кварцевым резонатором. Например, самой "высокочастотной" среди AVR общего применения является ATtiny13, допускающая работу при 24 МГц. Следовательно, ее максимальное быстродействие 24 MIPS. По сравнению с микросхемой AT89C2051 семейства MCS-51, это в 12 раз больше. Для ориентира, рекорд среди специализированных AVR принадлежит USB-контроллеру AT76C713 – 48 MIPS.
Методика изучения MCS-51 основывается на предположении, что достаточно освоить базовый МК AT89C2051, чтобы затем по шаблону составлять программы к другим разновидностям контроллеров. А для AVR коварную шутку сыграла многовариантность моделей. Что ни МК, то новые нюансы. Названия регистров, флагов, фьюзов, хотя и похожи, но чуть-чуть отличаются. А для выяснения этого "чуть-чуть" приходится изучать документы в сотню и более страниц. К счастью, общего у разных типов AVR ("classic", "tiny", "mega") больше, чем различий.
Серия "classic" уже снята с производства по веским техническим причинам. И хотя в продаже эти микросхемы будут находиться еще длительное время, надо смотреть в будущее, в перспективу. В новых МК ("tiny", "mega") исправлены конструктивные ошибки, добавлены функциональные возможности, увеличена тактовая частота до 16…24 МГц и число перезаписей FLASH-ПЗУ с 1000 до 10000. Как следствие, повысилась долговременная устойчивость работы в условиях сильных помех.
Из МК второго поколения наиболее полным набором функций обладает микросхема ATmega128, на которой можно показать все доступные аппаратные и программные приемы. Однако ее 64-выводный TQFP-корпус и высокая цена не годятся для любительских экспериментов. Все остальные МК серий "mega", "tiny" можно рассматривать в первом приближении как усеченные версии ATmega128 (меньше памяти, функций, выводов). Кстати, последнее обстоятельство часто является определяющим при выборе МК.
Различают микросхемы в DIP-корпусе с малым (8), средним (20-28) и большим (40) числом выводов. Среди имеющихся в продаже "осьминогов" заслуживают внимание 8-выводные ATtiny13, ATtiny15L, но они хороши для компактных интеллектуальных датчиков, а не для учебы. Характерно, что слово "tiny" (произносится "тайни") переводится с английского как "крошечный".
Среди 40-выводных "сороконожек" наиболее дешевые и ходовые – это ATmega8515, 8535, 162. Их удобно применять в технически сложных приборах. Однако на макетной плате с двумя светодиодами они смотрятся громоздко.
Остаются МК среднего диапазона. В частности, перспективно применение ATtiny2313, который вышел в замен AT90S2313. Как компромисс, предлагается выбрать в качестве базовой микросхему ATmega8. Она компактна по габаритам (28 выводов), доступна по цене, имеет все функции ATmega128 за исключением интерфейса JTAG.
Для нормального функционирования любого МК требуется выполнить ряд условий: подать питание, обеспечить генерацию тактовых импульсов, организовать начальный сброс, подключить периферию к входам-выходам. Исходная информация по всем перечисленным вопросам содержится в главном техническом документе, так называемом DATASHEET ("data" – данные, "sheet" – листок). Различают краткую (summary) и полную (complete) версии "дейташита", отличающиеся объемом информации. Например, для ATmega8 summary-файл http://www.atmel.com/dyn/resources/prod_documents/2486S.pdf имеет длину 199 Кб и содержит 21 страницу текста, а complete-файл http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf – длину 2,4 Мб и 305 страниц текста.
Если подходить к изучению AVR основательно, то рано или поздно придется распечатать на бумаге все страницы полного DATASHEET. Труд не пропадет даром, ведь построение документов на фирме Atmel унифицировано для всех AVR. Многие разделы написаны "один к одному", что пригодится при смене типа МК.
Назначение выводов ATmega8: VCC, AVCC – питание, GND – общий, PB0-PB7 – линии порта B, PC0-PC6 – линии порта C, PD0-PD7 – линии порта D, AREF – выход внутреннего источника напряжения 1,3 В. В скобках возле обозначения контактов указаны альтернативные функции, переключаемые программно. По количеству их может быть не одна.
В каталогах встречаются два типа микросхем: ATmega8-16 и ATmega8L-8. Первая из них допускает питание 4,5…5,5 В при тактовой частоте 0…16 МГц, вторая – соответственно 2,7…5,5 В при 0…8 МГц. Это не означает, что ATmega8 выйдет из строя при подаче питания 3 В. Более того, в таком режиме она успешно работает с различными кварцевыми резонаторами. Однако нельзя гарантировать устойчивый запуск МК при крайних значениях температур, да и ток потребления будет выше, чем у ATmega8L. Сказываются технологические различия в изготовлении.
Вывод – если требуется максимальное быстродействие, то надо ставить ATmega8 и повышать тактовую частоту до 8…16 МГц при питании 5 В. Если главнее всего экономичность устройства, то лучше применить ATmega8L и понизить частоту, питание. В дальнейшем большинство приводимых схем будут рассчитаны на универсальный диапазон тактовых частот 4…8 МГц и питание 3…5 В.
Предусмотрительный пользователь приобретет для экспериментов оба типа микросхемы (по стоимости они примерно одинаковы) – для взаимной перепроверки и на крайние начальные условия. Если ориентироваться на DIP-корпус, то буквы в конце названия МК должны быть PI (температурный диапазон -40…+85°C), PU (то же, но в корпусе, не содержащем свинец), PC (0…+70°C).
ATmega8 имеет двойное питание: "цифровое" VCC, GND (вывод 8) и "аналоговое" AVCC, GND (вывод 22). В стандартном включении, когда на входы и выходы подаются уровни лог."1" и "0", обе пары соединяют параллельно. Точнее, физически закорачивают только цепи VCC, AVCC, поскольку GND-выводы 8 и 22 уже замкнуты внутри микросхемы через сопротивление 0,7 Ом.
Если в МК используется встроенный 6-канальный АЦП, то для уменьшения помех применяют последовательный LC-фильтр по выводу AVCC. Если АЦП не нужен, то все равно вывод AVCC соединяют с VCC коротким проводом.
Для снижения уровня излучаемых помех рекомендуется применять общий LC-фильтр по питанию. С такой необходимостью могут столкнуться разработчики промышленной аппаратуры при выполнении норм электромагнитной совместимости.
Как показывает практика, МК семейства AVR "не любят" высокого питающего напряжения (выше 6 В). Кроме того, регламентируется максимальный ток через выводы GND, VCC, который не должен превышать 200 мА. В качестве защиты удобно применять маломощный стабилизатор 78L05 и параллельно включенный сапрессор напряжением 5,6 В.
Для установки внутренних регистров МК в исходное состояние необходимо произвести начальный сброс. Внутренний автоматический сброс по достижению напряжения питания 1,4…2,3 В; сброс от внутреннего детектора просадок питающего напряжения Brown-Out; внешний сброс уровнем лог."0" на выводе 1 /RESET; сброс от внутреннего таймера Watchdog при остановке работы процессора.
Если напряжение питания стабильно во времени и подается скачком на МК, то внешние элементы для сброса вообще не нужны. Обнуление происходит автоматически узлом Power-On. Подобная схема подходит для лабораторного макетирования и домашних самоделок, но в промышленной автоматике может давать сбои при импульсных помехах по питанию и при его слишком плавном нарастании (спаде).
МК AVR второго поколения имеют улучшенную защиту от кратковременных (brown-out) и полных (black-out) просадок питания. Теперь в каждую микросхему встроен переработанный узел детектора пониженного напряжения BOD (Brown-Out Detector). Детектор анализирует напряжение питания VCC и вырабатывает сигнал сброса при достижении одного из двух порогов: 2,7 или 4 В. Имеется гистерезис 0,1 В, что позволяет четко обслуживать приборы с "подсевшими" батареями питания.
Режим включения-выключения детектора, а также значения порогов задают при программировании двух фьюзов: BODEN (BOD ENable) и BODLEVEL. Для дальнейшей работы надо знать, что фьюзы, или биты конфигурации, – это некоторые ячейки в FLASH-ПЗУ МК, которые можно многократно прошивать в "1" или "0" с помощью программатора. В процессе штатной работы их значения нельзя изменить.
Почему фьюзы так хорошо защищены от вмешательства извне? Это необходимо для устранения конфликтных ситуаций и устойчивого запуска МК. Например, чтобы при сбое в программе случайно не установился порог срабатывания детектора (4 В) выше напряжения питания (3 В).
Если фьюз WDTON (Watch Dog Timer ON) запрограммирован (т.е. WDTON=0), то запускается специальный таймер, который анализирует состояние процессора. В случае его "зависания", таймер через регулируемое время 17 мс…2,2 с выдает сигнал начального сброса.
Почему бы "watchdog" не сделать постоянным элементом МК, тогда и фьюз включать не надо? Дело в том, что внутренний генератор, от которого работает "watchdog", потребляет энергию. При отключенном фьюзе (WDTON=1) генератор обесточивается, что важно, например, для батарейного питания. Сравните, 50 мкА в спящем режиме при наличии и 3 мкА при отсутствии Watchdog.
Осталось рассмотреть внешний сброс, который активизируется, если на входе /RESET в течение более 1,5 мкс удерживается лог."0". Кнопку сброса SB1 обычно подключают вместе со стандартной RC-цепочкой. Поскольку на вывод 1 МК приходят также сигналы от разъема ISP, то контакты кнопки SB1 при программировании должны всегда находиться в разомкнутом состоянии.
Интересное наблюдение. Во время сброса ток потребления ATmega8 не только не уменьшается, но и почти в два раза увеличивается (с 5…15 мА до 20…25 мА). Этот момент надо учитывать при ограниченных энергоресурсах.
Синхронизация тактовых сигналов в МК семейства AVR происходит более сложно и многовариантно. С одной стороны это хорошо, поскольку появляется богатый выбор возможностей, с другой – легко ошибиться и привести годный контроллер в "безмолвное" состояние.
Коммутацию режимов работы задают фьюзы: CKSEL (ClocK SELect), CKOPT (ClocK OPTion) и SUT (Start-Up Time). Они выступают здесь как перемычки (англ. fuse – "предохранитель"), которые МК не может самостоятельно изменить.
Информация о фьюзах размещена в DATASHEET довольно хаотично, что вызывает определенные затруднения при поиске. Фьюзы обеспечивают задержку выхода на режим 65 мс (SUT0, SUT1). Для сведения, эта задержка в DATASHEET носит название "time-out" и прибавляется к сигналу сброса, позволяя высокодобротным кварцевым резонаторам быстрее стабилизировать частоту генерации. Опытные пользователи могут фьюзами уменьшить "time-out" до 4 мс, но они должны четко представлять, какую выгоду из этого получат. А вот проблем с нестабильностью запуска и помехоустойчивостью может прибавиться.
ATmega8 допускает следующие режимы тактирования:
Обилие режимов сродни восточному базару – выбирай, что приглянется.
Общие рекомендации. При невысоких требованиях к стабильности временных интервалов проще всего использовать внутренний, программно перестраиваемый RC-генератор с лучшей стабильностью получается при частоте 1 МГц. Именно на эту частоту настраивают ATmega8 при выпуске с завода-изготовителя. Выводы XT1, XT2 превращаются в обычные линии порта ввода-вывода PB6, PB7, по ним можно передавать или принимать логические сигналы. Кроме того, имеется возможность установкой программного флага сделать еще одно превращение – использовать выводы XT1, XT2 для синхронизации внутреннего таймера от резонатора ZQ1 (вторая альтернативная функция TOSC1, TOSC2).
Если необходима плавная подстройка частоты, то применяют генератор с частотозадающей цепью в виде внешних RC-элементов. Корпус переменного резистора R1 должен быть соединен с общим проводом, чтобы уменьшить влияние емкости тела. Ключ S1 управляется фьюзом CKOPT. Если он будет запрограммирован (CKOPT=0), то конденсатор С1 вообще можно удалить из схемы, поскольку его функцию будет выполнять внутренняя интегральная емкость Со=36 пФ. Формула для расчета частоты генерации Fт[МГц]=1000 / (3*R[кОм]*C[пФ]). Например, Fт=0,46 МГц при R1=33 кОм, С1=22 пФ. В реальности, значение будет отличаться от расчетного из-за емкости монтажа и входной емкости микросхемы.
Среднюю и высокую стабильность обеспечивают соответственно керамический (рис.12) и кварцевый резонаторы (рис.13). Первый из них быстрее выходит на режим и не требует внешних конденсаторов, а второй обладает наивысшей стабильностью. Интересно назначение фьюза CKOPT, который выполняет функцию своеобразного регулятора амплитуды. Если он запрограммирован (равен "0"), то сигнал на выводе XT2 будет меняться "rail-to-rail", т.е. от 0 до VCC, обеспечивая ответвление сигнала Fт через инвертор DD1. Если CKOPT=1, то амплитуда сигнала резко уменьшается. Одновременно снижаются и паразитные ВЧ-излучения, что важно для обеспечения требований по электромагнитной совместимости.
При работе от аккумуляторной батареи и невысоких требованиях к быстродействию, выгодно применять часовой кварцевый резонатор 32768 Гц (рис.14). На такой низкой частоте собственный ток потребления ATmega8 составляет всего лишь 80 мкА! Программирование фьюза CKOPT приводит к добавлению двух внутренних конденсаторов Со. Их наличие позволяет подключать резонатор ZQ1 напрямую к выводам XT1, XT2. Допускается использовать резонаторы и на другие низкие частоты 30…300 кГц, но входные цепи оптимизированы именно под частоту 32768 Гц, как наиболее распространенную.
Если в схеме устройства уже имеется отдельный кварцевый генератор, то его логическими сигналами можно тактировать МК (рис.15), сэкономив при этом финансы на резонаторе. Резистор R1 нужен, если DD1 является ТТЛ-микросхемой. Он подтягивает уровень лог."1" к шине питания, поскольку по входу XT1 (в отличие от других линий портов) требуется обеспечить повышенное напряжение 0,8*VCC.
В условиях сильных промышленных помех, когда прибор установлен в непосредственной близости от "искрящих" цепей двигателей, входы XT1, XT2 и подключенные к ним элементы могут служить транзитным путем для наводок. Чтобы устранить сбои, рекомендуется конденсаторы С1, С2 (рис.13) устанавливать вблизи выводов XT1, XT2, а их земляные обкладки подключать прямо к общему выводу 8 МК отдельными короткими проводниками. Кроме того, корпус кварцевого резонатора ZQ1 должен быть припаян коротким проводом к цепи GND, а на печатной плате вокруг него и конденсаторов проводят экранирующий контур.
Устранить сбои иногда помогает замена резонатора отдельным покупным кварцевым генератором в металлическом DIP-корпусе, например, из серии JCO-8 фирмы Jauch. Это эффективное, но дорогое решение. Ввиду того, что на выходе генератора присутствуют логические уровни, то фьюзами устанавливают режим работы МК от внешних входных импульсов.
Подключение входов-выходов
С точки зрения электронщика, знание внутренней структуры портов входа-выхода является обязательным условием в освоении любого МК. Порты AVR принципиально отличаются от портов MCS-51. Чтобы не запутаться, даже названия им придуманы разные: P0, P1, P2, P3 у MCS-51 и PA, PB, PC, PD у AVR. Для справки, многовыводные ATmega128 имеют еще порты PE, PF, PG, а у маловыводных ATtiny в наличии только несколько линий порта PB.
Изучать структуру портов легче в сравнении MCS-51 - AVR. На рис.16, 17 приведены упрощенные схемы организации входов и выходов МК AVR для линии PB1. Схемы остальных линий портов будут аналогичны за исключением PC6 (верхний диод VDo отсутствует). Управление входами-выходами в ATmega8 производится через программно доступные регистры: PORTn, DDRBn, PINn, где n=B, C, D (табл.6).
Первое отличие – ключ S1, которым можно подключать или отключать нагрузочный резистор Rн по каждому из входов. Выполнен он на основе интегрального MOП-транзистора, поэтому прозвонить его омметром нельзя. В MCS-51 резистор Rн на одних входах имеется, а на других отсутствует.
Второе отличие – входной триггер Шмитта U1 и линия задержки U2 (полтора такта частоты процессора). Они предназначены для повышения помехоустойчивости и отсечения коротких импульсных помех.
Третье отличие – возможность чтения информации прямо с выхода линии порта через сигнал PINB1. В MCS-51 можно было вывести сигнал в линию порта, но узнать, "дошел" ли он по назначению, нельзя. В AVR в линию порта посылается сигнал PORTB1, а истинное значение на выводе PB1 считывается сигналом PINB1 с задержкой в полтора такта частоты процессора (U2). Эта приятная "мелочь" во многих случаях позволяет упрощать схемы.
Четвертое отличие – при нажатии кнопки сброса или начальной подаче питания все линии портов AVR переходят в "оборванное" высокоимпедансное состояние (у MCS-51 – в лог."1"). Этот момент надо учитывать при построении схем нагрузок. Например, если сигнал с выхода МК поступает на базу транзистора, то между ней и общим проводом надо устанавливать резистор 100 кОм, чтобы в момент сброса база не "висела в воздухе".
Еще одно следствие четвертого отличия – микросхема, у которой все линии портов настроены как входы с внутренними нагрузочными резисторами (PORTn=1, DDRn=0), потребляет примерно на четверть меньше тока, чем при отключенных резисторах (PORTn=DDRn=0). Парадокса здесь нет, просто "парящие в воздухе" входы находятся в неустойчивом состоянии (КМОП-технология) и любая наводка приводит к "дребезгу сигналов" с соответствующим увеличением потребления тока. Вывод – все неиспользуемые входы надо программно нагружать на внутренние резисторы или же ставить внешние.
Из электрических характеристик следует отметить значительно возросший у AVR выходной ток в высоком состоянии, что позволяет подключать светодиоды не только к цепи VCC, но и к GND. Микросхемы семейства AVR первого поколения имеют несимметричную нагрузочную способность, при лог."0" на выходе гарантируют ток 10…20 мА, при лог."1" – 3…4 мА. Микросхемы AVR второго поколения почти все обеспечивают одинаковую токовую нагрузку 20 мА. Ток короткого замыкания через одну линию значительно выше до 150…200 мА, но долго микросхема в таком режиме не поработает и с большой долей вероятности выйдет из строя.
Подключение адаптера программатора
Речь пойдет о четырех сигналах MISO, MOSI, SCK, необходимых для внутрисистемного программирования ISP. В "Ступени 2" был показан самый простой способ непосредственного включения без внешних элементов. Он годится для лабораторных условий. Другое дело – промышленные объекты, где много источников импульсных помех и наводок. Не исключено, что проводники, идущие от разъема ISP к выводам МК, станут своеобразными антеннами и случайная комбинация лог."1" и "0", наводимая на них, будет интерпретироваться процессором как запись данных в FLASH-ПЗУ. В итоге нормально работающий и исправный МК может в непредсказуемые моменты времени портить свою программу. Судя по Интернет-форумам, такие случаи были на практике. Для восстановления ситуации надо заново перепрограммировать МК.
Чтобы подобные казусы не происходили, выводы MISO, MOSI, SCK подключают к цепи GND через резисторы 1…10 кОм и максимально уменьшают длину проводников от ISP-разъема. Иногда обходятся одним резистором 10 кОм между SCK и GND. К выводу /RES присоединяют RC-цепочку (рис.7) или вообще соединяют с цепью VCC через перемычку XT1 (рис.18). При ее наличие работает только внутренний сброс МК, а в ее отсутствие можно осуществить программирование. Следует соблюдать осторожность, иначе забытый на плате джампер станет причиной выхода адаптера программатора из строя. Радикальное решение – вообще отказаться от ISP-разъема и припаивать его на проводах только при регулировании.
Судя по рис.1, выводы MISO, MOSI, SCK могут использоваться и как обычные линии портов PB3, PB4, PB5. Фирма Atmel предлагает развязывать их от сигналов ISP с помощью ограничительных резисторов R1-R3 (рис.19). Однако в условиях сильных помех через эти резисторы и подключенные к ним элементы, например удаленные датчики, могут наводиться ложные импульсы. Следовательно, для безопасности надо подключать выводы MISO, MOSI, SCK только к ISP-программатору. В дальнейших схемах выводы программирования, включая /RES, будут оставаться свободными.
Программирование фьюзов
Рассказ о фьюзах будет неполным без описания процедуры их программирования. Для работы потребуется программа PonyProg, тестовое устройство, собранное на макетной плате (см. "Ступень 2"), а также подключенный к разъему ISP адаптер программатора. Считается, что МК в тестовом устройстве уже содержит программу, заставляющую светодиод на макетной плате светиться с переменной яркостью.
Перед программированием фьюзов надо убедиться, что в PonyProg выбрана микросхема именно ATmega8 ("Device – AVRmicro – ATmega8"), иначе конфигурация фьюзов будет неверная. Далее в начальном меню выполнить действия: "Command – Security and Configuration Bits", после чего откроется конфигурационное окно с тремя строками.
Верхняя строка содержит 6 битов защиты информации от копирования и просмотра: BootLock01, 02, 11, 12; Lock1, 2. Для домашних экспериментов все они должны быть очищены (отсутствуют "галочки"), а для промышленных устройств – все установлены (присутствуют "галочки").
Средняя строка содержит 7 старших фьюз-битов, из них RSTDISBL, EESAVE, BOOTSZ0, 1, BOOTRST не должны иметь "галочки" (их программируют только в специально оговоренных случаях), значение фьюзов WDTON и CKOPT определяются по табл.3, 4.
Нижняя строка содержит 8 младших фьюз-битов. Все они выбираются по табл.2, 4.
Важная деталь, которая иногда смущает начинающих. Понятие запрограммированный фьюз (значение "0") соответствует установке в окошке PonyProg "галочки" и, наоборот, без "галочки" у незапрограммированного фьюза (значение "1"). Это связано с особенностями процедуры очистки FLASH-памяти, когда процесс полного стирания сопровождается записью во все ячейки лог."1".
Забывчивость или невнимательность при заполнении фьюзов опасны. Четверть беды, если при неверно установленных фьюзах процессор вдруг станет работать на порядок медленнее (хотелось установить внутренний генератор на 8 МГц, а получилось на 1 МГц). Полбеды, если окажется, что на вход устройства надо подавать внешние импульсы, а в схеме стоит кварцевый резонатор. Хуже всего, если окажется запрограммированным фьюз RSTDISBL, переводящий вход /RES в дополнительную линию порта PC5. После этого повторное программирование через ISP-адаптер будет невозможным. Придется вызывать "скорую помощь" в виде параллельного программатора (см. "Ступень 1"), которым можно восстановить значение этого фьюза.
"Опасные" фьюзы, наподобие RSTDISBL, присутствуют не во всех типах AVR. Например, в ATmega8515 их нет. В каждом конкретном случае надо смотреть DATASHEET, обращая внимание на раздел Fuse Bits.
На рис.20 показан внешний вид панели PonyProg с установленными режимами для ATmega8:
отсутствие защиты от просмотра и копирования;
тактирование от внутреннего генератора частотой 8 МГц;
включен детектор Brown-Out с напряжением порога 4 В;
выключен таймер Watchdog.
Сокращенная формула программирования фьюзов: CKSEL0=CKSEL1=CKSEL3=SUT1=SUT2=BODLEVEL=BODEN=0, остальные фьюзы и биты защиты равны "1" (не запрограммированы, отсутствуют "галочки").
При смене условий тактирования следует помнить, что повторное программирование возможно только в той схеме, для которой установлены фьюзы. В частности, нельзя запрограммировать МК, настроенный на режим внешних импульсов, если подключить к его входам кварцевый резонатор и т.д. В качестве "палочки-выручалочки" надо всегда держать под рукой дежурный генератор (рис.21). Его выходной сигнал подается на вход ХТ1 контроллера, что помогает запрограммировать ATmega8 (и не только) в самых причудливых случаях.
Практическое задание. Ознакомиться и по возможности распечатать полную версию DATASHEET на Atmega8. Провести эксперименты с различными вариантами установки фьюзов на тестовом устройстве.