Как мой кот перестал бояться и полюбил Arduino

Привет, Хабр! Недавно мы с уважаемым dzhe думали о том, какой заголовок может считаться идеальным для Хабра — и вы уже поняли, к какому выводу пришли. Правда, к сожалению, на самом деле кота у нас нет, однако тему Arduino обещаю ниже немного приоткрыть.

6dc021280797495cab813444200546c7.png

Впрочем, глобальные новости у нас другие: Black Swift не просто вышел на Kickstarter, но и за первые 6 дней почти собрал необходимую сумму.

Это не много и не мало — были проекты, который собирали 100% за день или за час, были проекты, который так и умирали, едва добравшись до 50% за весь срок. Мы попали в интересную ситуацию — с одной стороны, в профессиональных сообществах Black Swift вызывал преимущественно положительные отклики, с другой стороны, СМИ более-менее общей направленности нами не заинтересовал — какой-то ещё один микрокомпьютер, мало ли их — поэтому какого-то массивного всплеска в первые день-два у нас не было.

Здесь, конечно, стоило немного доработать перед запуском: создать какую-нибудь бессмысленную, но понятную и дающую красивые картинки и заголовки плату расширения, на которую клюнули бы обычные СМИ. Ну, например, «самый маленький роутер в мире» или »100% совместимость с Arduino». Бессмысленную — потому что если вам нужен роутер, проще купить готовый, а если вы правда при виде 400-МГц процессора и OpenWRT беспокоитесь о совместимости с Arduino, то есть же Yun. Но, как показывает практика, все те журналисты, которые традиционно презрительно отзываются о маркетологах, на такие несложные маркетинговые уловки ловятся очень даже неплохо.

Впрочем, о работе с Kickstarter я подробнее напишу позже, когда будет официальный инфоповод »100%», а пока — про ардуину (на самом деле нет).Я уже пару-тройку раз упоминал, что в паре с Black Swift удобно использовать какой-нибудь дешёвый и несложный микроконтроллер — AVR, PIC, STM32 — чтобы на нём реализовать аппаратный ШИМ, АЦП и честное реальное время. Очевидно, что возникает одно неудобство — контроллер надо чем-то отдельно программировать, и если мы целимся на людей, не обязательно серьёзно разбирающихся в микроконтроллерной тематике, то это становится проблемой.

К счастью, под Linux существует пакет avrdude, который умеет одну очень хорошую вещь — программировать AVR, подключённый к обычным портам ввода-вывода (GPIO) Linux-устройства. OpenWRT — тот же линукс, вид сбоку, поэтому сборка под него avrdude является в общем-то делом техники и одного небольшого патча.

Тестовая плата:

3fb791c4a48e47eabd568db5b91636a7.jpg

На ней стоит ATtiny24A, кварц на 8 МГц, мелкая обвязка по питанию, разъёмы для Black Swift и пара разъёмов IDC 2×5. Никакой конкретной цели именно такой форм-фактор не преследовал.

e26df1b0e2a34cc1a08dca2b8f7f63fe.jpg

С установленным Black Swift. Одна из вещей, за которую он мне нравится — возможность поставить его на разъёмах, а всякие дополнительные компоненты разместить под ним; даже над кварцем (обычный HC-49S) остаётся чуть-чуть свободного места.

Схема крайне проста: SPI-интерфейс тиньки подключается к Black Swift, её RESET — также к одному из GPIO и одновременно подтягивается к питанию резистором. Питается тинька для простоты от 3,3 В, выдаваемых Black Swift’ом.

26e55aad7afc4d1fa40b3f6d068cbfa9.png

Схема в PDF, схема и плата для Diptrace и в герберах.

Это, очевидно, половина работы. Теперь берём свежий avrdude-6.1, чуть-чуть правим, чтобы он собрался под OpenWRT, на будущее добавляем поддержку аппаратного SPI авторства Кевина Кацнера, пишем Makefile и собираем в готовый пакет.

Патчи и Makefile можно найти тут, а готовый пакет для OpenWRT 14.07 — здесь. Он не заточен под Black Swift каким-либо специальным образом (в частности, я не стал переписывать драйвер linuxgpio с медленного sysfs на быстрый прямой доступ к GPIO), поэтому будет спокойно работать и на других платах.

Пробуем (avrdude -p t24 -c linuxgpio -t):

705b110f748c4fba8f67e45cd55a079b.png

Сигнатура чипа правильная, всё работает. Прошиваем AVR, чтобы помигать светодиодиком:

9672bafd810745e1af279d04bfe20f7e.png

Мигаем светодиодиком, прямо как на Arduino.

Очевидно, что обмен данными с AVR легко организовать через тот же SPI, через который мы его прошили — в одну сторону пересылать команды и параметры, в ответ получать какие-то данные. То есть, мы полностью интегрировали AVR с Black Swift, причём так, что нам даже внешний программатор не нужен — Black Swift может сконфигурировать и прошить девственно чистый чип.

Само собой, Black Swift можно использовать и в качестве собственно программатора — с доступом по Wi-Fi и возможностью автономного питания. Я даже вижу, как его довести до законченного продукта: добавить [отключаемый] транслятор уровней 3,3/5 В и сделать веб-интерфейс с калькулятором фьюзов (есть такие на JS) и заливкой HEX-файла прошивки. У меня даже только что возникло подозрение, что я себе — сделаю.

При желании, подозреваю, можно даже скомпилировать под него gcc-avr, чтобы прошивку прямо на нём собирать, но как-то не вижу в этом практической необходимости.

Ну и про Arduino: в принципе ничто не мешает писать им в AVR HEX-файлы, полученные из Arduino IDE.

Upd. dzhe требует опровергнуть грязную клевету и сообщить, что у него кот есть.

© Habrahabr.ru