Archive for the ‘AVReAl’ Category.

“B” and “not-B” AVRs

Від публікації огляду відмінностей між «A» і «не-A»-версіями мікроконтролерів AVR пройшло чимало часу і вже можна порівнювати «B»-версії. Таких мікроконтролерів ще небагато, але є на що подивитися. Errata на кристали я ще не вивчав, як там буде що важливе — доповню пізніше.

Раніше я вже коротко писав про ATmega48PB…168PB. ATmega328PB і ATmega324PB просунулися набагато далі, це вже практично нові мікроконтролери, сумісні по виводах з «not-B». Для всіх цих мікроконтролерів є спільний з першого погляду непомітний, але важливий момент — DIP-корпусів більше нема. Тому тим, хто розраховує лише на них, далі можна не читати ;-)

Можливо, цей список і не збільшуватиметься вже, бо анонсовано геть нові ATmega3208/3209/4808/4809 із суттєво збільшеним обсягом оперативної пам’яті (натомість зменшеною EEPROM) та розширеною периферією.

Отже, відмінності

Відмінності ATmega48PB/88PB/168PB від ATmega48PA/88PA/168PA

Документація на ATmega48PB/88PB/168PB і опис відмінностей.

  • Прибрано надлишкову пару VCC/GND, ці виводи тепер знаходсться в PORTE
  • Виводи ADC6, ADC7, які досі не були портами, також тепер в PORTE, разом із попереднім чотири додаткових IO.
  • Вихід вбудованого компаратора можна подати на нжку PE0, для керування додано новий регістр ACSRB
  • USART може працювати в sleep, по старт-біту вмикається генератор. Мікроконтролер може прокидатися і по старт-біту, і вже аж по закінченню приймання байту, біти керування у новому регістрі UCSR0D.
  • CKSEL — пропав full swing XTAL (CKSEL 011x), у кого стояло таке — поміняти налаштування fuses для програматора (CKSEL 100x–111x). Інші fuses не змінилися.
  • Додано 9-байтовий унікальний ідентифікатор кристалу, який можна прочитати командою LPM після встановлення біта SIGRD в SPMCSR або навіть через «верхні» через порти IO з адресами F0-F8 (у дурному порядку).
  • Електричні характеристики
    • Заводське калібрування RC-генератора тепер не ±10%, а лише ±2% (±5% у повному діапазоні напруг і температур), крок через OSCCAL не змінився, ±1%
    • Дещо впало падіння напруги на виході при максимальному навантаженні
    • Став трохи швидшим компаратор
    • Зі струмами споживання каша — десь типові трохи збільшилися а максимальні зменшилися, десь типові збільшилися. То треба уважно дивитися, кого що цікавить. Струм PowerSave виріс!

Відмінності ATmega328PB від ATmega328P

Документація на ATmega328PB і опис відмінностей.
Зміни більші, навіть в описові відмінностей підкреслено «ATmega328PB is not a drop-in replacement for ATmega328 variants, but a new device».

Окрім всього перерахованого вище для ATmega48PB…ATmega168PB маємо ще:

  • Додалося по одному USART, I2C і SPI. Втім, ніжок не вистачає і USART1 сидить на тих же, що й SPI0. Оскільки комутатора периферії по портах нема, то одночасно використати не вийде.
  • Додалися два 16-бітних таймери TC3 і TC4, разом стало 10 PWM. Виходи output-compare-B додаткових таймерів на одній ніжці (PD2) і якщо увімкнені обидва, то збираються по AND або по OR залежно від стану бітика PORTD2.
  • З’явився апаратний touch-контролер, «Low CPU utilization through interrupt on acquisition-complete» і все таке, але в DS робота і регістри не описані, згадано лише які лінії сканування на які виводи мікроконтролера виведено і про фірмову бібліотеку QTouch.
  • Clock Failure Detection для OSC32K і XTAL з перемиканням на IntRC 1 MHz і можливістю переривання по події. fuse «disable CFD» з заводу прошите, тобто за умовчанням функцію вимкнено.

Відмінності ATmega324PB від ATmega324PA

Документація на ATmega328PB і опис відмінностей.

Все те ж саме, що для ATmega328PB (разом з увійшовшими туди змінами для ATmega48PB…ATmega168PB). Єдине що USART-ів й до того було два, то після додавання ще одного їх стало три. Та ще надлишковими визнано дві пари VCC/GND, разом із ними у PORTE пішли ще два виводи XTAL та ніжка AREF, тобто додатковий PORTE має аж сім IO. У багатьох випадках це дасть можливість обійтися 44-виводним корпусом.

Виглядає так, що ATmega328PB і ATMega324PB утворюють нову «лінійку», позаяк вони схожіші між собою, ніж кожен із них та відповідна P/PA-версія чи ATMega328PB та відповідні 8/16-кілобайтні PB-версії.

AVReAl update — 1.29r1

Вийшла нова версія програматора avreal — v1.29r1 (Sun 2018-02-11).

  • Додано підтримку:
    • Attiny441, ATtiny841
    • ATmega48PB, ATmega88PB, ATmega168PB, ATmega328PB
    • ATmega324PB
  • Файл із серійним номером пристрою тепер може містити шістнадцяткове число з префіксом 0x.
  • Виправлено внесену в 1.29r0 помилку, через яку символьні масиви довідки по ключу -h стали задовгими й обрізалися під час виводу функцією vsnprintf(). Завдяки тому, що вони обрізалися, avreal не падав так гучно, як то робив avr-ld ;-) .

AVReAl update — 1.29r0

Вийшла нова версія програматора avreal — v1.29r0 (Wed 2013-12-11).

  • Ключ -% розширеної діагностики замінено на ключ -i керування рівнем інформаційних повідомлень;
  • При перенаправленні stdout у файл критичні повідомлення дублюються на stderr (якщо той не перенаправлено);
  • Остаточна відмова від групування ключів (тепер не можна -wv, можна лише -w -v);
  • Додано синоніми mega325PA, mega3250PA.

OpenOCD та FTDI-MPSSE

Зрідка щось пробуючи на LPC1766, вже доволі тривалий час не зазирав у новини OpenOCD. Як зібрав колись 6-тої версії, так і працював. Ще раніше, коли робив собі плату на FT2232H, трохи промахнувся і керування драйверами зробив несумісним з жодним з підтримуваних OpenOCD 6.x адаптерів. Тому для роботи з кортексами діставав напівмакетку (плата з FT2232D та шинником, перерізана на сумісність з Amontec JTAGkey).

А оце підтягнув git-ом свіжий стан, а там вже 8.0. А з 7.0 вже для FTDI/MPSSE підтримується довільне призначення службових виводів (reset, керування драйверами). Навіть краще, ніж в avreal, бо можна задати довільне своє ім’я сигналу, прив’язати його до ніжки і керувати ним командами OpenOCD — інтерактивно або з командного рядка. Додав у makefile в частині формування командного рядка вмикання червоного світлодіода на початку програмування і вимикання в кінці. Все чудово запрацювало, через FT2232H програма зашивається у півтора-два рази швидше, ніж через FT2232D, веріфікується у три-чотири рази швидше. І таке враження, що і через FT2232D свіжа версія OpenOCD працює відчутно швидше, ніж 6.x, але вже ніде перевірити, а спеціально збирати ліньки.

І дуже вчасно я сьогодні (хм… вже вчора) за це взявся — через хвилин двадцять після того, як зберіг на флешку конфігураційний файл та приклад makefile, подзвонив колега і сказав, що на роботі полетів J-Link. А там у мене точно така ж плата з FT2232H лежить.

AVReAl update — 1.28r14

Вийшла нова версія програматора avreal — v1.28r14 (Mon 2013-08-05).

  • Виправлено помилку в сигнатурах ATmega128rfr2, ATmega256rfr2;
  • Додано ATmega32HVE, ATmega64HVE.

AVReAl update — 1.28r13

Вийшла нова версія програматора avreal — v1.28r13 (Sun 2013-06-02).

Помилка в синхронізації (MPSSE)

Виявлено помилку, через яку не проходить процедура пересинхронізації додатковим імпульсом SCK у наступних умовах:

  • програма у мікроконтролері виставляє на ніжці ніжку SCK високий рівень;
  • використовується MPSSE-адаптер (FT2232, FT4232H, FT232H).

При роботі через LPT-адаптер синхронізація проходить нормально, після стирання через нього знову можна запрограмувати через USB-адаптер.

Схоже, помилка давня, але в більшості випадків до неї не доходило, бо синхронізація встановлювалася після обов’язкового початкового циклу RESET-синхронізації.
Наче хтось колись на щось подібне жалівся, але я не міг відтворити у себе і не знаходив нічого підозрілого в коді avreal. На цей раз мені знадобилося «підняти» одну стару плату з AT90S8515 і я таки отримав оте «Can’t resync» на USB-адаптері. Спробував за допомогою маленької тестової програми відтворити ситуацію на ATmega168 — все нормально працює і через MPSSE, синхронізується першою RESET-спробою, до SCK-імпульсів справа не доходить. А от AT90S8515 не програмується.

Все необхідне я зробив через ByteBlaster, помилку ловитиму за хвіст найближчим часом.


Помилку виправлено у версії 1.28r13.

AVReAl update — 1.28r12

Вийшла нова версія програматора avreal — v1.28r12 (Fri 2013-01-04).

  • Додано ATtiny828, ATmega64RFR2, ATmega128RFR2, ATmega256RFR2
  • «Купу крапочок» замінено на щось більш схоже на індикатор процесу (progress bar)

Також зроблено дрібні зміни у внутрішній структурі, більш важливі для мене самого як ознака того, що я ще не закинув проект і збираюся робити трохи більше, ніж ліниво додавати в таблиці нові кристали :-)

«A»-AVR: POR

В огляді змін в мікроконтролерах AVR при переході на нову технологію (стаття “A” and “not-A” AVRs) часто зустрічаються слова «Помінялися рівні POR».

Зміну рівнів Power-On Reset зумовлено переходом на «advanced POR circuit», що на рівні конструктора систем на мікроконтролерах означає:

  • Специфіковано не лише типове значення напруг POR, а й мінімальне та максимальне.
  • Специфіковано мінімальну швидкість наростання напруги живлення.
  • Типове значення рівня POR трохи збільшилося.

Раніше (для «не-А» мікроконтролерів) перші два пункти не було вказано взагалі і залишалося лише здогадуватися, до якої межі можна без ризику наближатися.

Останній пункт розглянемо докладніше.

Наприклад, при переході від ATtiny13 до ATtiny13A (AVR520, Table 2-4. Power-On Reset) типове значення рівня POR при наростанні напруги збільшилося від 1,2 В до 1,4 В. Обидва значення менші за специфіковану для версії ATtiny13V мінімальну напругу живлення 1,8 В, тому в проектах, зроблених без порушення специфікацій виробника, перехід на нові типи не викличе проблем. Можливо, вони навіть краще працюватимуть, бо зменшиться різниця між напругою, при якій POR «відпускає» схеми мікроконтролера та фіксує значення FUSES, та мінімальною напругою гарантованої роботи.

Але в проектах «для себе» в часто виправданому в таких випадках стилі «ці конкретні екземпляри запрацювали — і добре» можуть виникнути проблеми.

AVReAl update — 1.28r11

Вийшла нова версія програматора avreal — v1.28r11 (Sat 2012-06-23).

  • Додано AT90pwm161, ATtiny1634
  • Виправлено реакцію на ключ -a без аргументів — вихід з програми з повідомленням про помилку замість використання адаптера за замовчуванням FBPRG)
[flagcounter image]