Иногда, чтобы сделать что-нибудь нужное, надо сначала купить что-нибудь ненужное. Так вышло и с новой игрушкой для кота:

А началось всё с того, что купил я давеча своему коту игрушку новую:

Ну купил и купил — вы никогда ничего бесполезного не покупали? Всё бы ничего, но мне она сразу после распаковки не понравилась: как-то уж очень не клёво ездит, да ещё и шумновата. С шумом можно было бы разобраться резистором или диодом, а вот с ездой — ничего без замены 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-режим):

Заключение

Пожалуй, прошивку можно ещё заметно улучшить — и как будет совсем скучно, займусь этим. А пока мне всё нравится: было прикольное приключение на пару вечеров, люблю такие :)

А пока у меня всё. Всем кота! (づ˶•༝•˶)づ♡