[Из песочницы] Большие подводные камни маленького контроллера
Эта публикация — ответ на часто задаваемые вопросы по семейству микроконтроллеров ATtiny4/5/9/10. Большинство из них решается внимательным чтением документации. Тем не менее, я решил описать основные отличия в работе с этими МК. Под катом вы найдёте рассказ о самых младших AVR’ах, а также описание проблем, появляющихся при знакомстве с ними.Эти контроллеры относятся к семейству tinyAVR, как и популярная ATtiny85, однако значительно отличаются от остальных. Во-первых, только ATtiny4, 5, 9 и 10 корпусируются в маленький, но легко паяемый SOT23–6. Во-вторых, для программирования используется интерфейс TPI, который несовместим с традиционным ISP. В-третьих, это единственные tinyAVR, источник тактирования которых можно переключать «на лету», что роднит их с более современными решениями.
Старший представитель семейства — ATtiny10 появился в 2009 году и может быть легко приобретён у большинства поставщиков.
Микроконтроллеры в корпусе SOT23–6 интересны малыми размерами, они занимают около 9 кв.мм. С этим показателем могут потягаться только «безвыводные» корпуса, которые несравнимо сложнее в монтаже и часто требуют многослойных плат.
Кроме Atmel контроллеры в таком корпусе есть у Microchip. Однако PIC10F2xx уступают по характеристикам, а гибридные PIC10F3xx имеют меньше программной памяти, хотя у них на борту есть программируемая логика и они значительно экономичнее.
Я составил сравнительную таблицу некоторых МК этих семейств, потребление указано на МГц в активном и спящем режимах.
Название Flash, байт RAM, байт Тактирование АЦП Аналоговыйкомпаратор ИОН Таймер Питание, В Потребление ATtiny4 512 32 8 МГц128 КГц - + - 1, 16 бит2 PWM канала 1.8 — 5.5 200 мкА<0.1 мкА ATtiny5 512 32 8 МГц128 КГц 1, 8 бит4 канала + - 1, 16 бит2 PWM канала 1.8 — 5.5 200 мкА<0.1 мкА ATtiny9 1024 32 8 МГц128 КГц - + - 1, 16 бит2 PWM канала 1.8 — 5.5 200 мкА<0.1 мкА ATtiny10 1024 32 8 МГц128 КГц 1, 8 бит4 канала + - 1, 16 бит2 PWM канала 1.8 — 5.5 200 мкА<0.1 мкА PIC10F206 768 24 4 МГц - + + 1, 8 битНет PWM 2 — 5.5 <175 мкА0.1 мкА PIC10F222 768 23 8 МГц4МГц 1, 8 бит2 канала - + 1, 8 битНет PWM 2 — 5.5 <175 мкА0.1 мкА PIC10F320 ~460 64 16 МГц32 КГц 1, 8 бит3 канала - + 2, 8 битЕсть PWM 1.8 — 3.62.3 — 5.5 25 мкА0.02 мкА PIC10F322 ~920 64 16 МГц32 КГц 1, 8 бит3 канала - + 2, 8 битЕсть PWM 1.8 — 3.62.3 — 5.5 25 мкА0.02 мкА В таблице не указан размер EEPROM, ведь её нет.Стоимость продукции Atmel находится в пределах 58-72 центов в партии 1000 штук. PIC чуть дешевле от 46 до 75 центов, но достать их в корпусе SOT23-6 не так просто. В локальных магазинах все эти МК можно купить по цене от 70–80 рублей за штуку.
Учитывая более мощный ассемблер AVR’ов мой выбор однозначно склоняется в их сторону. Хотя PIC10F3xx выглядят весьма неплохо, мне пока не приходилось с ними работать.
При знакомстве c микроконтроллерами ATtiny10 возникает несколько проблем. Вот 5 самых распространённых.
1. Не переключается тактовая частотаОсобенно это проявляется в программах на С, поэтому примеры будут на нём. Система тактирования этого семейства имеет ряд отличий от остальных AVR’ов. Поскольку соответствующих фьюзов нет, их функции выполняют 3 регистра: CLKMSR, CLKPSR и, обратите особое внимание — CCP.После сброса контроллер всегда запускается от внутреннего источника 8 МГц и имеет пределитель 8. Чтобы переключится на другой источник, надо изменить содержимое CLKMSR, а изменить пределитель — CLKPSR. Что с ними можно сделать написано в таблицах 6–3 и 6–4 даташита.Дело в том, что конструкция следующего вида не имеет ожидаемого эффекта:
CLKPSR = (1<