LPUART? USART1? обидва і в одну прошивку!

Є в мікроконтролерах STM32L0x така приємна штука, як LPUART. Може працювати від LSE — 32768Hz кварца коли мікроконтролер спить і піднімати його по приходу байта. Ну там ще дрібно-дробовий дільник, який дозволяє витягувати доволі високі частоти обміну від такого кварца, але то для мене вже не так важливо було. Просто є за оптроном ще один мікроконтролер, який періодично посилає інформацію про стан того, що він контролює. А на цій стороні бажано побільше спати.

У пристрої і STM32L011K вистачить, програма ледь перевалює за 8 кілобайт флеша. На нього і розраховував. Але на малих кількостях ціноутворення штука малопередбачувана, STM32L051K8 може бути суттєво дешевшим за STM32L011K4. Тому хочеться, щоб можна було поставити чи те, чи те.
Все було б добре, але «світ дуже недосконалий»© Лис з «Маленького принца». LPUART не потрапив на ніжки в 32-виводному корпусі STM32L051K. Мікроконтролери L051 мають можливість незалежної роботи від LSE є і для USART1, USART2. Але ж (ой правий Лис, ой правий!) L011 спрощений, USART2 у нього є, але він так не вміє.

Зрештою, знайшлася ніжка (PB7), де сидить LPUART_RX для L011K і USART1_RX для L051K. Все добре.

Тільки от прошивка має бути єдина, щоб той, хто прошиватиме плати, не вдивлявся у маркування мікроконтролера. Ну та до цього не звикати, все одно під одну прошивку маю реально п’ять різних варіантів виконання пристрою (на 4 різних платах). Плати візуально відрізняються відчутно, але однак простіше віддати одну прошивку. Код плати задано підключенням двох ніжок мікроконтролера на VCC/GND і ще один резистор каже «тут запаяно лише ту малу частину, яка спільна для всіх плат, це спрощений п’ятий варіант».

Вид мікроконтролера L011 («категорія 1») чи L051 («категорія 3») можна прочитати з ідентифікаційного регістра

// cat1 (L011) or cat3 (L051)
bool is_mcu_cat1()
{
    return (DBGMCU->IDCODE & 0xFFF) == 0x457;
}

і далі все просто. Відмінності ініціалізації LPUART і USART1 невеликі. Ініціалізувати і дозвіл переривань лише для одного, та ще ніжку треба увімкнути на потрібний номер альтернативної функції.

Два обробники переривань викликають одну й ту ж процедуру обробки

extern "C" void USART1_IRQHandler(void)
{
    device.octrl.byte_received(USART1->RDR);
}

extern "C" void LPUART1_IRQHandler(void)
{
    device.octrl.byte_received(LPUART1->RDR);
}

До речі, гарна штука LTO (link-time optimization). Ця byte_received() в іншому файлі, але воно чудово проінлайнило функцію в обидва обробники.

Писачок — робимо самі 2

Наближається Великдень, а разом з ним і традиційне виготовлення писанок. Ну а для розписування потрібен відповідний інструмент — писачок, що його, залежно від регіону, називають ще писальце або кистка.

Так починався опублікований мною 7 років тому опис-відеоурок того, як можна самостійно зробити писачок. І зараз такий самий час.

Писачки робив тоді так, як було зручно мені, з урахуванням матеріалів та інструментів, що завжди під рукою і я навіть не задумувався, що їх може не бути 🙂 (хтось із моїх дітей свого часу дуже здивувався, виявивши, що не у всіх вдома є пінцет і кусачки). Але цьогоріч мене в коментарях на youtube спитали, чи можна обійтися без паяльника.

Звичайно можна, переважна більшість писачків, зроблених за всю історію, обійшлися без паяльника. Трохи подумавши і роздивившись інші писачки, наводжу два варіанти.
Кінчик конуса обов’язково підрівняти надфілем чи точильним каменем. Тут в обох варантах я цього не робив, оскільки це лише демонстрація ідеї.
Далі: опис і фото двох варіантів виготовлення писачка без паяльника » » »

Міні-комп’ютер розміром з монету (конкурс)

Конкурс, у якому можна виграти одну з трьох плат VoCore v1.0 з OpenWRT/Linux:

Плата VoCore v1.0

  • Процесор RT5350, 360 MHz + память 32 МБ SDRAM
  • WiFi на борту
  • OpenWRT/LEDE Linux
  • Розміри 25.6 x 25.6 mm – приблизно як ураїнська монета 1 гривня
  • Повністю відкритий код та схема

Треба лише описати — що хочеш на цій платі зробити, розмір і можливості плати такі, що можна зробити багато всього.
З надісланого відберуть 10% найцікавіших заявок, тоді серед них розіграють три плати, по Україні відправлять «Новою Поштою» за власний рахунок.

Детальніше у фейсбуці, в оголошенні від Володимира Шиманського, співзасновника Blynk IoT Platform.

p.s. Сам я участі в конкурсі не беру, бо то треба спочатку навчитися краще керувати своїм часом, вивільнити його трохи, і лише затим придумати, що ж я хочу зробити. За місяць я не вкладуся 😀

“B” and “not-B” AVRs

I am sorry, this text in English does not exist (yet).
I apologized there. Try google translate.


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

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

З точки зору програматора змінилися лише сигнатури (ідентифікатри) мікроконтролерів та додався один fuse в ATmega328PB і ATmega324PB. Він забороняє нову функцію (CFD, див. нижче) і з заводу запрограмований. Якщо його не треба міняти і якщо можна змусити програматор проігнорувати сигнатуру, то всі ці кристали можна прошивати як відповідні PA. Втім, в avreal ці мікроконтролери вже додано, а для всіх іншіх програматори це, думаю, зроблено давно 🙂

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

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

AVReAl update — 1.29r1

avreal v1.29r1 (Sun 2018-02-11) has been released.

  • Added support for:
    • Attiny441, ATtiny841
    • ATmega48PB, ATmega88PB, ATmega168PB, ATmega328PB
    • ATmega324PB
  • The file with device serial number can now contain a 0x-prefixed hexadecimal number.
  • Fixed a bug where the character arrays for -h became too long and cuts off by vsnprintf(). But avreal was not crashes like avr-ld does.

    Парасолька і болтик М8

    Парасольки я ремонтую. Поки це більш-менш можливо. Більшість типових проблем швидше полагодити, ніж сходити по нову.

    Оце й сьогодні всівся одній калічній вправляти «суглоб» — трубочка-заклепка протерлася і випала. Слідом за нею випала і петелька, яка тримала тягу. Дві металеві скріпки (звичайна для петельки і велика для скоби замість заклепки), кусачки, надфіль — затерти гострі краї на місці відкусювання, щоб не чіплялося ні за що, плоскогубці-качконоси і звичайні. Кілька хвилин часу. І ще побігає.

    Але це була особлива парасолька… Років два тому я її вже ремонтував.
    На парасольках тканину в центрі здебільшого підтримує або пластикова декоративна «гайка», а з маточини стирчить шматочок різьбової шпильки, або ж в маточині нарізано внутрішню різьбу і закручено декоративний пластиковий «болтик». Та до цієї парасольки мені траплялися лише з різьбою близько 6 мм. Іноді таки М6, якось ковпачкову гайку замість втраченої пластмасової накручував, іноді щось дюймове.

    А ця відремонтувалася вкручуванням чесного болта M8. Трохи вкороченого, потрібної довжини вдома не знайшлося.


    Ремонт парасольки болтом М8Ремонт парасольки болтом М8

    avr-ld buffer overflow

    Дійсно прикра помилка в avr-ld (binutils-avr 2.25) — та, що спонукала мене до перевірки використання Raspberry Pi як комп’ютера для роботи, — виявилася доволі цікавою.

    Почала вивалюватися вона у мене доволі давно, але я помилково вважав, що вона притаманна 64-бітній версії Ubuntu 16.04, бо на роботі в 32-бітній все працювало. Думав, що це якісь проблеми невраховування розмірів чи співвідношення розмірів змінних на зразок «подаруночка від FTDI». Чесно кажучи, у повідомлення не особливо і вчитувався — «та хай, це по роботі, то на роботі й зберу» і вдома більше не запускав аж до того, як нещодавно перезібрати знадобилося негайно, бо це зупиняло термінову роботу. Тоді ж ото зібрав на Raspberry й написав про все це.

    Ну й на ключову фразу *** buffer overflow detected *** Іван у коментарях пояснив, як із цим можна боротися.
    Докладніше читайте » » »

    Відвідуваність статей Вікіпедії

    Вчергове наштовхнувся на статтю з яскраво вираженим характером відвідуваності й нарешті наробив скріншотів. За моїми спостереженнями, є три дуже характерних типи розподілу кількості переглядів статей протягом певного періоду часу.

    Всі три різновиди графіків відвідуваності

    Умовно їх можна назвати «новинний», «святковий» і «студентський». Далі про них докладніше » » »

    Дрібна програмована логіка

    Дивлюся оце на схему адаптера для програмування мікроконтролерів на мікросхемі FT2232 з перемиканням між JTAG і SWD і вкотре жалкую про передчасну смерть дрібної програмованої логіки. Дрібної не в сенсі корпусу ультра-нано-wlcsp, а в сенсі невеликої кількості логічних елементів.

    Так, у продавців ще зустрічаються (вже Мікрочіпівські) ATF16V8/ATF22V10, але то старі серії швидше на підтримку старого обладнання, ніж на якісь нові розробки, бо Cypress і TI від різних PALCE вже відмовилися. І однак — ціна ATF16V8 штучно на DigiKey мало відрізняється від сумарної вартості (там же і теж штучно) тих трьох корпусів дрібної логіки, що стоять на JTAG/SWD-адаптері.

    Так, PLD-шка ще потребувала б програмування, але при сучасних технологіях це не потребувало б 12-вольтової напруги і робилося б за долі секунди під час тестування зібраної плати. Ну хай тут, в адаптері, щось зовсім просте, навіть без тригерів. Але, як на мене, ще досить задач, де підійшло б щось на зразок (теж вже застарілої) EPM3032, але в корпусі TSSOP20…28 з програмуванням вбудованої EEPROM простим поширеним інтерфейсом на зразок I2C.

    Перехідна плата qfp32

    Зовсім випадково надибав на AliExpress чудову перехідну плату з qfp32 на два ряди штирів 2,54 мм для безпаєчної макетки. На відміну від інших, зі зворотного боку вона має не tssop32, виправданий з точки зору здешевлення макетки, а місця під корпуси 0805 з кожного виводу мікроконтролера, які виходять на полігон.

    Адаптер з QFP32 на штирі з місцями 0805

    Чудове рішення для того, щоб відразу з’єднати потрібні виводи з землею і якомога ближче до мікросхеми розмістити конденсатори. Також зручно для підтяжок до землі на потрібних виводах, наприклад, BOOT0 в мікроконтролерах STM32 (тут запаяно STM32L051K8). І не забудеш поставити при зміні схеми, і не займає дірочок у макетній платі.

    Вона є у декількох продавців, я брав у цього.

    p.s. Паяв знову не сам. Пора заводити тег скористався службовим становищем. 😉

    [flagcounter image]