Чорнобиль — багатьом є що згадати

Вийшло так, що 26 квітня 1986 року, в суботу вранці, мені конче треба було дістатися до університетського 12-го гуртожитка, щоб вже звідти з дружиною їхати на вокзал.
Так-так, я мав «койкомєсто» у заводському гуртожитку в Броварах, дружина те ж саме у студенстькому гуртожитку в Києві, ні там, ні там кімнату не давали. Мене у студентський не пускали, бо вже не був студентом, а дружині в Броварах… Та там мене, «молодого спеціаліста», кілька місяців не хотіли прописувати, «у тебе дружина в Києві прописана!» (ага, по студентському гуртожитку «до 30 червня»), куди вже окрему кімнату. Але то вже з іншої категорії спогадів.

Ну так от, квитки на поїзд з Києва на Полтаву вже давно були куплені. У мене була жменя відгулів за нічні виклики на завод, дружині у деканаті теж легко дали дозвіл «погуляти», тому повернутися до Києва ми мали аж 10 чи 11 травня. Але я ледь вибрався з Броварів до Києва, бо раптом кудись поділися всі автобуси. Їх і так на маршрутах було по два-три, інтервал руху до пів години. Коли якийсь ламався, то ходили ще рідше. Але після довгого очікування люди почали турбуватися і тут хтось відкілясь приніс звістку — «всі автобуси забрали на евакуацію». Куди, чому — незрозуміло, десь аварія, вибух, називалися різні версії. Так нічого конкретного і не знаючи, 26 ввечері ми поїхали і найтяжчі дні були у безпечному місці. Коли ж повернулися назад, то вже більш-менш було зрозуміло, що берегтися треба сильно. Хусточка-шапочка, в пилюку не лізти, повітря зволожувати, підлогу мити, самим в душ і так далі.
А в кінці травня я вже паяв дозиметра » » »

ECC і HW parity

Знову згадую Лиса з Маленького принца, пора вже тег «Світ недосконалий» на його честь заводити.

STM32F0 (і не лише, але я зараз Cortex-M0 дивлюся) — є апаратний контроль парності в оперативній пам’яті.

STM32L0 — є контроль і виправлення помилок (ECC) у флеші та EEPROM.

А от щоб разом, так ні.
І, до речі, STM32F0 має переривання по збою оперативної пам’яті, а STM32L0 не має переривань від свого блоку ECC. Хоча переривання «все виправлено, але збій був» було б дуже корисним для раннього попередження про можливі відмови.

p.s. Ще цікава штука на цю тему є в ATtiny41x/81x, апаратна перевірка флеша по CRC16.

Падіння напруги на кабелі

Стало цікаво, як спадає напруга на кабелі, коли навантаження не зібрано все в одній точці на кінці, а розподілено рівномірно. Скажімо, декілька десятків споживачів із приблизно однаковим споживанням на приблизно рівних відстанях. Спочатку напруга спадатиме швидше, бо підключено більше споживачів, потім, ближче до кінця кабелю, швидкість спадання зменшиться. Але якими будуть загальні втрати напруги?
От якщо на кінці кабелю із загальним опором R висить навантаження зі споживанням струму I, то напруга впаде на величину IR. А що буде при рівномірному підключенні?
Дивится формули і графіки » » »

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

Від публікації огляду відмінностей між «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).

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

Парасолька і болтик М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 *** Іван у коментарях пояснив, як із цим можна боротися.
Докладніше читайте » » »

[flagcounter image]