Иногда, чтобы сделать что-нибудь нужное, надо сначала купить что-нибудь ненужное. Так вышло и с новой игрушкой для кота:
А началось всё с того, что купил я давеча своему коту игрушку новую:
Ну купил и купил — вы никогда ничего бесполезного не покупали? Всё бы ничего, но мне она сразу после распаковки не понравилась: как-то уж очень не клёво ездит, да ещё и шумновата. С шумом можно было бы разобраться резистором или диодом, а вот с ездой — ничего без замены MCU не поделаешь. А значит, самое время менять noname MCU на ATtiny412, чем и займёмся ~(˘▾˘~)
Планчик
Разобрал игрушку, осмотрел — выполнена на базе неизвестного MCU (маркировка сточена) и драйвера двигателя CST6118
:
Прозвонил, выяснил распиновку:
PIN 1: VCC
PIN 2: CST6118 (INA)
PIN 3: CST6118 (INB)
PIN 4: BUTTON
PIN 5: GREEN LED
PIN 6: RED LED
PIN 7: NC
PIN 8: GND
Выяснять, что это за чип, мне было лениво — тем более что и по корпусу, и по пинам, и по питанию сюда отлично встанет ATtiny412:
- AVR® 8-bit CPU (до 20 MHz)
- 256 RAM
- 4 KB Flash
- внутренний осциллятор
- достаточное количество PWM и GPIO
К тому же парочка таких микроконтроллеров у меня осталась от одного из проектов — долго выбирать не пришлось :) Единственное, 6-й пин на текущей плате неудачно занят, так как он понадобится нам для прошивки, но не беда — перемычки наше всё. Погнали!
Дела паяльные
Хитростей тут немного:
- запаиваю на место неизвестного MCU свою ATtiny412;
- делаю перемычку между 6-м и 7-м падом, а на самой ATtiny412 поднимаю 6-ю ногу. Теперь красный диод будет подключен к 7-му пину;
- припаиваю проводок с 1k-резистором для прошивки по UPDI.
Вот так выглядит:
Ещё китайцы зажали два резистора с обратной стороны, и зарядка от Type-C не работала — исправил перед сборкой:
Вот, собственно, и все дела паяльные :)
Дела софтварные
Так уж вышло, что мне иногда приходится пользоваться генераторами случайного кода. И если к рабочим задачам я их пускать не готов, то тут сам бог велел. Так и поступил — на пару с Claude Sonnet 4.5 написал прошивку для ATtiny412 на базе megaTinyCore: https://github.com/buglloc/purrbit/
На текущий момент умеет:
- 3 режима работы:
CHILL
— спокойненький;WARMUP
— чтоб побыстрее;CRAZY
— название само говорит за себя ;)
- индикация текущего режима двумя диодиками;
- режим сна;
- 10-минутный цикл работы (у котаныча сейчас слабая батарейка).
Сложнее всего Claude было корректно сделать две вещи:
- режим сна: засыпаем при долгом нажатии кнопки, просыпаемся от повторного;
- PWM для PA6 — несмотря на то, что issue analogWrite does not work for ATtiny412 pin PA6 закрыт, он всё ещё не работает. Благо там же автор репорта и написал рабочий вариант поверх
TCD0
(спасибо тебе!).
В остальном же он справился относительно нормально — мне даже чуть понравилось.
Финалим
Осталось совсем немного! Подключаю FT232 (USB-UART TTL) через резистор к UPDI (см. SerialUPDI):
Заливаю прошивку, собираю — и вуаля: у котанчика новая игрушка со вкусом DIY (это CRAZY
-режим):
Заключение
Пожалуй, прошивку можно ещё заметно улучшить — и как будет совсем скучно, займусь этим. А пока мне всё нравится: было прикольное приключение на пару вечеров, люблю такие :)
А пока у меня всё. Всем кота! (づ˶•༝•˶)づ♡