Великі підводні камені маленького контролера

Ця публікація — відповідь на часті запитання по сімейства мікроконтролерів 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 для цих крихітних контролерів.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.