Большие подводные камни маленького контроллера

Эта публикация — ответ на часто задаваемые вопросы по семейству микроконтроллеров ATtiny4/5/9/10. Большинство из них решается внимательным чтением документации. Тем не менее, я решил описать основные отличия в работе с этими МК. Под катом вы найдёте рассказ о самых младших AVR'ах, а также описание проблем, появляющихся при знакомстве с ними.

image

Эти контроллеры относятся к семейству 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.6
2.3 — 5.5
25 мкА
0.02 мкА
PIC10F322 ~920 64 16 МГц
32 КГц
1, 8 бит
3 канала
- + 2, 8 бит
Есть PWM
1.8 — 3.6
2.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<<CLKPS2);

Некоторых это обескураживает, но регистры, отвечающие за тактирование, защищены от записи.
Чтобы изменить их содержимое надо в CCP записать значение 0xD8, это даст 4 такта на работу с этими регистрами, причём в течение этих 4 тактов любые прерывания игнорируются.
Правильно делать так:

CCP = 0xD8;
CLKMSR = (1<<CLKMS0);
CLKPSR = (1<<CLKPS0);

Такие выражения присваивания обычно выполняются за два такта. Однако может генерироватся менее эффективный код. В случае возникновения такой проблемы имеет смысл записывать CCP перед каждым изменением защищённого регистра, окружая группу конструкции запретом прерываний.

2. Проблемы со сторожевым таймером


Выбор режима «собачки» происходит через регистр WDTCSR, который также защищён регистром CCP. Думаю, комментарии тут излишни.

3. Перевод RESET в режим GPIO


Как и у остальных микроконтроллеров AVR вход сброса может быть переключён в режим порта ввода-вывода. Возможность прошивать контроллер последовательным программатором при этом теряется. Семейство интересно тем, что для решения этой проблемы достаточно подать 12 вольт на RESET в течение всего времени программирования, предварительно отключив эту линию от программатора.

4. Контроллер не программируется, не видится программатором


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

5. А где фьюзы?


У рассматриваемого семейства осталось совсем немного фьюзов.
Половина уместилась в младший байт по адресу 0x00. Это RSTDISBL — выключающий сброс, WDTON — разрешающий сторожевой таймер, и CKOUT — выводящий сигнал с частотой тактового генератора на порт PB2.
Lock Byte, необходимый для защиты от программирования и чтения памяти контроллера, остался на своём месте.

Несмотря на кажущуюся маломощность, ATtiny10 может не только мигать светодиодами или преобразовывать интерфейсы. Позднее я расскажу о программном USB для этих крохотных контроллеров.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 28

    +3
    Позанудствую.

    п1: всегда следует использовать библиотечную функцию, которая будет inline и написана на ассемблере под конкретный кристалл. это повысит переносимость кода и снизит зависимость от опций компилятора
    п2: см.п1
      0
      При таком количестве программной памяти, инлайны, часто, единственный выход.
        +1
        Я к тому, что эти инлайны пусть делает компилятор, используя правильные библиотеки.
        Попытка написать это в Си коде может вылиться в труднодебажемыемые проблемы постфактум.

        Я даже в ассемблере предпочитаю не инициализировать вручную, а полключать либу с макросами под кристалл.
      0
      Думаю себе на днях прикупить t10, уж больно подкупает параметрами, идеально для микропроектов аля драйвер для фонарика.
        0
        PIC10F32x для этого применения сильно поинтересней.
          0
          … по причине необычного, отвязанного от таймера, PWM'а, и конфигурируемой логики. Но ATtiny10 доступнее.
            +1
            Это временное явление. PIC — промстандарт для всего мира, кроме РФ, но поскольку РФ включилась в движение Worldskills, и готовится к чемпионату мира в Бразилии и подала заявку на принятие этого чемпионата у себя в 2019 году, PIC станет стандартом и у нас. Просто сейчас, обучение и соревнования по электронике в РФ проводятся в основном на AVR, а с лета придется переходить на PIC.
        0
        А можно на пальцах варианты применения подобных таракашек? Может и я куда удумаю их засунуть.
          +2
          Всевозможные регуляторы — 1..2 аналоговых входа один цифровой выход и внутри достаточно сложная программная обработка.
          Приемник для ДУ на 2-3 выхода.
          Когда-то мелкие PIC-и использовали для включения/отключения устройства по одной кнопке без фиксации. При этом можно предусмотреть ограничение времени во включенном состоянии, автоматику определения внешнего питания и защиту батареи от глубокого разряда. Раньше эту функцию выполняла довольно увесистая схема на логике, сейчас 6 выводов SOT23-6 + ИОН в аналогичном корпусе(при необходимости измерения напряжения батареи, походу встроенного там нет).

          При помощи расширителя портов можно еще и целую кучу светодиодов нацепить, но в таком случае конечно преимущества миниатюрности уже не будет.

          Драйверы для фонариков, да.

          микро-мигалку на 3-4 светодиодика и батарейки AG10, или что там еще меньше есть.

          Какие-нибудь секретные электронные ключи размером меньше монетки. Может даже RFID можно будет организовать.
            0
            Спасибо. Вот бы еще статью с примерчиком ;)
              +1
              1. Встроенного ИОНа нет. Опорное напряжение равно питающему, и только так.
              2. От одной часовой батарейки не заведется, питание от 1.8 вольта.

              Я их использовал для преобразования интерфейсов (мультиплексирование UART на несколько устройств, связь по одному проводу, в симплексе), различных мелких датчиков, ИК-пультов и повторителей, как замену супервизора и т.д.
                0
                От одной батарейки само собой и светодиоды не засветятся.
                  0
                  Помнится, был у Atmel экспериментальный ATTiny со встроенным DC-DC конвертером, запускался от одной батарейки!
                    +1
                    да тут даже экспериментировать не надо. Вообще, у некоторых МК гарантированный диапазон питания — от 1.8В, думаю что при соответствующем тактировании и комнатной температуре большинство экземпляров будут работоспособны и при 1.2В

                    Низковольтная логика не проблема — современная высокоскоростная логика и память работают уже при 0.8В вот только… проблема в том что остальной периферии нет настолько низковольтной — надо много костылей нагородить чтобы вписать такой МК в реальную разработку — всё преимущество теряется.

                    Ведь есть такие МК на которых делают музыкальные открытки и они прекрасно работают от 1.5В батареек.
                      0
                      Эксперимент тут был не столько технический, сколько маркетинговый. Эти чипы не стали покупать и их перестали производить.
                        +1
                        Tiny13 прекрасно работает при напряжении 1.5–1.0 В, правда ему нужно внешнее тактирование — встроенный генератор не всегда заводится.
                          0
                          Мало того, у AVR, при низковольтном, питании обычно недоступна вся периферия. Запуск при низких напряжениях, тут блокируется встроенным супервизором.

                          Для низковольтного питания можно применить преобразователь на переключаемых конденсаторах.
              +1
              А что значит ИОН? Судя по таблице, это какая-то пиковская технология?
                +3
                Источник опорного напряжения.
                  +4
                  Источник Опорного Напряжения. Он нужен для точной работы аналого-цифрового преобразователя.
                  0
                  Что-то не нашел в пределах досягаемости источник дешевых контроллеров… они в среднем стоят в 4 раза дороже чем ATTINY13A.
                    0
                    Обрадовавшись малютке тоже побежал на свой любимый сайт, чтобы заказать. Ага, конечно. Штучно ATtiny10 SOT-6 предлагают за 500руб, за эти же деньги можно купить 20 штук ATtiny13a в SOP-8. Или один ATmega32u4 на отладочной плате (аля Arduino Micro Leonardo) за 360руб.
                      0
                      Я их покупал, да не будет это рекламой, в Элитане и Digi-Key.
                    0
                    Есть ARM ядро в корпусе TSSOP-20: Entry-level ARM Cortex-M0 MCU with 32 Kbytes Flash, 48 MHz CPU, USB, CAN and CEC functions
                      +1
                      TSSOP-20 много больше SOT23. А так, да. У STM есть очень «вкусные» камни в 20-ногих корпусах, с интересными особенностями, вроде USB без внешнего кварца.
                        0
                        Это да, выбор периферии в современных микроконтроллерах внушительный.

                        Есть еще кроха с ARM ядром от NXP: 2.17x2.32 mm
                        image

                        32kB flash, 8kB SRAM паять только в домашних условиях не просто должно быть
                          +1
                          Контроллеров в корпусах «chip-size» и иже с ними, очень много. Тот же Freescale, выпускает камни с ethernet'ом, в корпусе 3х3 мм. У Renesas такие тоже есть. Если цели сложны, то смысл есть, но бывает, что такие мощности лишние, а цена решения на первом месте.
                      0
                      «более мощный ассемблер AVR'ов» — Вы это серьезно? В каком месте он более «мощный»?

                      Only users with full accounts can post comments. Log in, please.