Arduino

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
PDIP - Plastic Dual
In-Line Package
SOIC
SOIC - Small Outline
Integrated Circuit
PLCC
PLCC - Plastic Leader
Chip Carrier
TQFP
TQFP - Thin Profile
Quad Flat Package
MLF
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 допускает следующие режимы тактирования:

  • от высокочастотного кварцевого резонатора 0,9…16 МГц;
  • от керамического резонатора 0,4…0,9 МГц со встроенными конденсаторами;
  • от низкочастотного кварцевого резонатора 32768 Гц;
  • от внутреннего RC-генератора 1; 2; 4; 8 МГц;
  • от внешней RC-цепочки 0,4…12 МГц;
  • от внешнего импульсного генератора 0…16 МГц.

Обилие режимов сродни восточному базару – выбирай, что приглянется.

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