Microchip ATtiny

Так, ці нові tinyAVR (ATtiny416/417/814/816/817) вже Microchip, а не Atmel.

Після купівлі Мікрочіпом фірми Атмел були певні побоювання щодо майбутнього мікроконтролерів AVR. І от з’явилися нові tiny з цікавими можливостями. Дещо, як програмована логіка та перемикання швидкості/споживання компаратора, не новина для мікроконтролерів Microchip. Дещо було в AVR, але лише в лінійці xmega. Не думаю, що за час від купівлі все перераховане нижче встигли зробити у нового власника. Швидше за все, роботи велися і до продажу фірми. Головне, що все це не закинуто, тобто поява цих нових tiny свідчить, принаймні, про продовження лінії мікроконтролерів з ядром AVR.

Отже, що маємо.

4/8 кілобайт флеша, 256/512 байт оперативної пам’яті, 128 байт EEPROM.

Підрізане по регістрах ядро — так само, як і у «нових тайньок» tiny10 і компанії, тут є лише 16 регістрів з номерами від 16 до 31 і вони не відображені на оперативну пам’ять — або я перше неуважно прочитав, або у найпершій документації були якісь огріхи копіпасту.
Регістри є всі 32. Ядро нове, ближче до mega — є множення і MOVW, а інструкції ST/STD відпрацьовують за один такт. Також, на відміну від тих мікроконтролерів, тут є EEPROM. Так само ж EEPROM і flash з точки зору програми лежать у тому ж просторі адрес, що і SRAM, тобто до таблиць в них можна звертатися тими ж командами LD та LDD, що і до оперативної пам’яті. Але команда LPM залишилася, можливо, щоб не турбувати даремно NVM-контролер.

У флеш-пам’яті крім boot section та application code section записом байтів fuses можна виділити ще application data section. Дискретність зміни розміру секцій — 256 байт. Система захисту від несанкціонованого запису: boot-секцію можна записати лише програматором; код з boot-секції може писати лише обидві application секції, себе не зітре; код секції application code може писати лише application data. Є ще деякі хитрощі по роботі з boot та application code, але то вже нюанси для спеціальних випадків.

Інтерфейс програмування UPDI (Unified Program and Debug Interface) — ATxmega-PDI-подібний, але з асинхронним UART по лінії RESET, синхробайт 0x55 для автоматичного вибору частоти обміну. Через нього ж і відлагодження, тобто він замінює і debug-wire.

Щодо периферії — на перший погляд більше змін, ніж збереглося. Перелік того, що впало в око:

Система тактування

  • Основний RC-генератор OSC20M (перемикається 20 МГц та 16 МГц), ще є OSCULP32K та зовнішні XOSC32K та EXTCLK
  • Можливі дільники 1, 2, 4, 6, 8, 10, 16, 24, 32, 48, 64
  • Після скидання робота на OSC20M/6 (тобто 3.33 або 2.66 МГц), інші джерела та дільники встановлюються програмно.

Порти вводу-виводу, мультиплексор I/O

По структурі схожі на ATxmega, розлогий блок керування у старших адресах і основні регістри у бітово-доступній зоні IO, гнучке керування.

  • Програмована інверсія
  • SPI, USART, виходи таймерів можуть перемикатися між двома виводами (групами виводів).
  • Кожен вхід має персональні налаштування режиму переривань (рівень/фронт/…)

Система переривань

  • Для одного з векторів можна вибрати вищий пріоритет (level 1), тоді це переривання витіснятиме інші обробники
  • Для звичайних переривань (level 0) можна встановити циклічну дисципліну обслуговування (Round Robin)
  • Додано немасковане переривання NMI
  • Режим компактної таблиці переривань. Має бути особливо приємно для boot-loader та й перемикається бітом у тому ж регістрі, де розміщено біт IVSEL, тобто boot-loader і основна програма можуть мати різний режим «компактності». У цьому режимі зайнято лише три вектори:
    • NMI
    • Пріоритетне переривання level 1
    • Всі переривання level 0 на одній адресі

Апаратний контроль CRC флеш-пам’яті

  • Послідовна перевірка всієї флеш-пам’яті або її частини кодом CRC-16-CCITT. Fuses задають режими: без перевірки, boot-сектор, boot+application, весь флеш.
  • Одноразовий або циклічний режим
  • Пріоритетний режим (процесор зупиняється, коли йде обчислення) або фоновий (блок CRCSCAN висмикує слова з flash коли може).
  • Non-maskable interrupt при помилці
  • Якщо контроль увімкнено, то після скидання (незалежно від джерела reset) при помилці контрольного коду процесор не стартує взагалі.

Watchdog

Є віконний режим роботи. У fuses можна задати весь режим роботи, а не просто увімкнути на найменший час, як було раніше.

BOD

Brown-out detector тепер має ще Voltage Level Monitor, який видає переривання при зниженні живлення до деякого порогу, вищого за встановлений рівень скидання процесора. Регулюється 5/10/15% від порогу.

АЦП

  • З’явилася можливість перемикання 10 bit/8 bit з відповідним прискоренням
  • Виросла частота семплювання, тепер це 115 кілогерц (1.5 МГц тактової АЦП) для 10-бітного режиму і 150 кГц (2 МГц тактової) для 8-бітного режиму.
  • З’явилася можливість задати час вибірки (sample) вхідного сигналу, що дає змогу відмовитися від необхідних у деяких випадках для «старого» АЦП двох перетворень (або вимикання/вмикання АЦП) після перемикання каналу.
  • З’явився апаратний акумулятор для накопичення суми 2, 4, 8,… 64 результатів оцифровування (це вважається одним перетворенням). При цьому можна задати невеликий інтервал між оцифровуваннями і автоматичну зміну цього інтервалу від зміру до заміру для деякого «розмазування» спектру фільтра, що утворюється таким суматором.

ЦАП

Простий 8-бітний ЦАП, макс. 350 кГц. Вихід можна всередині подати на аналоговий компаратор.

Блоки Vref

Саме блоки, бо їх тепер два — один для АЦП, другий для аналогового компаратора та ЦАП.

  • Перемикається 0.55/1.1/1.5/2.5/4.3 вольти.
  • Є біт, яким можна увімкнути задане джерело опорної напруги постійно або ж залишите автоматичне вмикання при виборі джерела у відповідній аналоговій периферії.

Аналоговий компаратор

  • Нарешті має перемикання між швидким (90 μА, 35 ns) та економічним (45 μA, 140 ns) режимами (але я все хочу хай пару мікросекунд, але щоб ну хоча б 10-15 мкА).
  • Регулюєтсья гістерезис: 0/10/25/50 mV
  • Може працювати в режимі детектора переходу через 0 (занормовано поведінку при малих від’ємних напругах)
  • мультиплексори на входах (дві вхідних ніжки для «+» і дві вхідних, Vref або ЦАП для «-»
  • Програмована інверсія виходу
  • Вихід можна видати на ніжку

USART

Fractional baud rate generator, IRDA-режим, LIN-режим з детектуванням BREAK і автоналаштуванням частоти, txen для RS485.

EVSYS — система подій

Теж щось на зразок того, що в ATxmega, але тепер у дрібному кристалі. Глибоко не дивився.

Configurable custom logic

nano-FPGA на два блоки логіки:

  • 3-входова таблиця істинності
  • Мультиплексор на кожному з трьох входів LUT, можна вибрати вихід аналогового компаратора, вихід USART, вихід SPI, такти USART чи SPI, виходи таймерів, виходи системи подій EVENT, вихід іншого блоку або прив’язану до цього входу LUT ніжку мікроконтролера.
  • На виході LUT можна увімкнути синхронізатор або фільтр «два такти підряд однакове»
  • Після цього можна увімкнути детектор перепадів (edge detector)

Виходи цих двох блоків логіки можна подати на блок, який конфігурується як RS, DE або JK-тригер. Остаточні вихідні сигнали можна подати на ніжки мікроконтролера та завести у систему EVSYS.

Таймери TCA, TCB

Два 16-бітних таймери, доволі наворочені, але з дивною розкладкою.

  • TCA — три блоки compare, таймер можна розвалити на два 8-бітних і отримати шість каналів compare. Але на цьому таймері нема блоку capture.
  • TCB — є один блок capture/compare. Цікавий функціонал з хитрими режимами.

Тобто нема таймера, у якого були б одночасно блоки capture і compare, як TIMER1 в ATmega48–328. Але ці два таймери можна засинхронізувати і використовувати як один, який має блок capture і три блоки compare.

Таймер TCD

12-бітний таймер для «силових» речей (half/full bridge control).

  • Тактування можна взяти не з прескалера, звідки і ядро та вся інша периферія, а напряму з RC-генератора OSC20M або з ніжки, максимальна частота 32 МГц. Тобто можна таймер затактувати від 20 МГц, а ядро, наприклад, від 2
  • Два канали, у кожного по два регістри compare (тобто імпульси двох каналів можна на періоді таймера поставити довільно).
  • Два входи capture
  • Два входи, які можуть впливати на формування імпульсів відповідних виходів.

Таймер RTC

Простий таймер, який тактується від OSCULP32K, OSCULP32K/32 або XOSC32K.

3 коментарі to “Microchip ATtiny”

  1. Alexey Boyko сказав:

    Круто, але пізно. Вже перейшов на STM32

Leave a Reply

[flagcounter image]