Sleeping Beauty Bare Bone – Спящая красавица, обнаженная кость.

Вот таким несколько странным сочетанием решили обозвать разработчики еще одной ардуино-совместимой платы свое творение.

drskip

Немного предыстории о том, как я вышел на сборку данной ардуины: развитие программной части среды разработки (IDE) концепции Ардуино не стоит на месте, причем не только добавляется поддержка нового железа, но вместе с этим даже древние модели ардуин, в том числе UNO (являющаяся приемником еще более старинной Duemilanove), в новых версиях среды разработки продолжают поддерживаться и имеют возможность использовать все большее и большее количество библиотек включенных уже в комплект, или теперь доступных для скачивания из официального репозитория (средствами IDE). Свистопляски и танцы вокруг совместимости связанной с версионностью IDE и библиотек различных авторов, описание которых выходит за рамки данного материала, почти в прошлом. Хотя если вспомнить - это задница еще та … Теперь, большое количество готовых и отлаженных компонент вроде как упрощает создание собственных проектов и работу с разнообразной периферией, а включенность большинства библиотек в комплект IDE вроде как гарантирует совместимость … Очевидно также и то, что на витке своей популярности Ардуино повторяет путь многих других платформ – объем кода растет, а оптимизация снижается. Однако если на других платформах ЭВМ такой подход компенсировался возрастающей производительностью железа – то в случае с Ардуино, платформой на базе микроконтроллеров, где подобной лавинообразной эволюции железа нет (модели микроконтроллеров не устаревают более 10 лет) – все более явно заметна «просадка» железной составляющей перед валом строк неоптимизированного (т.е. в значительной степени бесполезного) кода. Да зачастую дело даже и не в оптимизации, а неуемном стремлении единообразить подходы и методы программирования для микроконтроллеров ориентируясь на обычные ЭВМ – забывая, что применение к микроконтроллерам слоеной «бутербродо-образной» концепции построения кода (объектно-ориентированного программирования, библиотека на библиотеке и т.п.) если не вредно, то только в очень разумных объемах, от чего Ардуино уходит все дальше … Причина – «железная»: контроллеры создаются и существуют для решения узко специфичных задач (зачастую требовательных ко времени исполнения), описанных компактным эффективным кодом – а не для простора программистских изысков в виде многотомных трудов!

Да в сторону от абстрактной лирики – к практике! Понятно, что увеличенный форм-фактор ардуино-мега обусловлен тем, что у следующих «по размеру» моделей контроллеров вслед за mega328 (применяемом в старшей модели классической ардуино - UNO) помимо большего объема «внутренних» ресурсов еще и большее количество ног (mega1280, mega2560 - имеют корпуса TQFP-100). Не пропадать же портам ввода вывода – логично, что форм-фактор был увеличен. Однако далеко не всегда требуется большее количество ног, т.е. объективно не часто начинаешь что-нибудь конструировать на «меге» именно по критерию количества портов. А так как большинство щитов рассчитаны на формат классической ардуины, то «выбивающаяся» своим размером из всего пирога щитов основа, ардуина-мега, не придает изящности и удобства использованию всего решения. Вместе с этим в последнее время все чаще сталкиваюсь с ситуацией, когда требуется решить вроде как простую задачу, и даже кода писать много не нужно, т.к. библиотеки для всех компонентов есть в наличии (датчики, дисплеи, интерфейсы, управляющие элементы …), нужно лишь накидать нехитрую логику во взаимодействии всех компонент – фактически вызов разных функций по событиям … И на самом последнем этапе наступает облом! – размер кода превышает, порой существенно, доступную память контроллера mega328 (32кб за вычетом бутлоадера) или вдруг оперативы не хватает (случается и такое, если с массивами работать). Что делать? Ну явных путей два: первый взять ардуино-мега и не париться (благо цены сейчас сильно снизились), при этом забив на габариты и на то, что даже в UNO часть портов оставалась свободной; второй – заняться оптимизацией и кастрацией библиотечного кода (трудоемко, скучно, не универсально) … На такой волне меня давно уже не оставлял в покое вопрос: а почему нет «меги» в форм-факторе «уны»? Да хрен бы с ним, что львиная доля ног осталась бы неиспользованной – ведь нужен именно внутренний ресурс контроллера (память для кода и ОЗУ) и сохранение компактности поделки в целом! Но нет … Хотя если быть совсем честным, то подобная штука существует: Iteaduino MEGA 2560 – только цена о нее космическая (40 баксов), превышает цену меги почти в три раза! За что? За более маленькую плату? (кстати, размер все же чуть длиннее классической ардуины, что не есть гуд …) За идею? – короче тоже не совсем не вариант.

И вот в очередной раз в раздумьях на тему «мега в формате уны» наткнулся я на проект под названием Sleeping Beauty (типа, «спящая красавица») … Вау, то что нужно! Хочу, сколько стоит? А… А вот как бы такая ардуина не продается в готовом виде ни на крупных площадках, ни в приватном магазинчике разработчика. Зато есть топология печатной платы, которую можно направить в производство.

Плата содержит в основном smd-компоненты, что несколько осложняет не только сам процесс ее рукопашной пайки, но и требует закупки большинства компонентов именно в исполнении smd (лично я имею немалый запас dip-комплектующих, но не smd). Короче оценив затраты, в том числе временные и в том числе на ожидание поставки всякой мелочевки – немного приуныл. Но ниже наткнулся на вариацию «спящей красавицы» со странным суффиксом «обнаженная кость» - лишенную всяких «периферийных вкусностей», но имеющей туже самую концепцию и ядро – контроллер mega1284р в корпусе dip.

Технология обкатанная – методом копи-паста заказываю в производство десяток плат (минимальная партия 5, но 10 стоят ровно столько же – чуть дороже доставка, которая и составляет 75% стоимости всей покупки). Производитель проверенный, качество и сроки исполнения на высоте …

drskip

И вот платы приехали. Белый цвет выбрал я, во-первых оригинально, а во-вторых не видны белесые разводы от спирта после очистки запаянной платы от пасты-флюса.

drskip

И так.

Сборка первой платы, собираем только самое необходимое – светодиоды, конверторы напряжения и рассупуху для питания от внешнего источника отличного от 5в, штыри для rf-модуля не распаиваем …

drskip

Готовим «ядро» системы – контроллер mega1284р:

  • У чистого контроллера в первую очередь выставляем биты конфигурации, т.н. «фьюзы» - для этого я применяю программатор Mini-Pro. Программаторы с интерфейсом ISP (USBasp, mkII-clone) – не видят (через avrdude) чистый контроллер и fuse-биты изменить не могут даже принудительно (флаг -F). В нашем случае нужное значение фьюзов таково: lfuse 0xF7; hfuse 0xDE; effuse 0xFD;
  • Далее заливаем загрузчик – вариантов много, тут уже работают и ISP-программаторы. Удобно выполнить заливку средствами самой среды разработки ардуино (установив контроллер в целевую плату и подключившись через разъем ISP), предварительно выбрав соответствующий тип платы, вариант загрузчика (в моем случае «16Mhz Full Swing @ 1Mbps») и программатор – я использовал USBasp (описанный ранее) как наиболее совместимый и удобный в использовании, не забыв предварительно «пропатчить» IDE;
  • Патчим IDE путем копи-паста содержимого архива в папку /harware/arduino от корня IDE версии 1.6.3 скачанной с официального сайта (именно для этой версии на данный момент анонсируется патч, не самый свежак, но вполне).

Вобщем то и все.

drskip

Да, еще понадобится «ftdi-кабель», т.к. «голая кость» не содержит на борту преобразователя usb<->com … С начала я огорчался данному факту – но потом решил, что может оно и к лучшему. Ведь преобразователь, выполненный в виде кабеля, выглядит эстетично и удобен в использовании, при этом нужен он только на этапе отладки – в готовом устройстве (если это не периферия для компа), будь он интегрирован (как в официальных ардуинах) – висел бы «мертвым грузом». Распиновку кабеля по цветам – см. на рисунке выше

Что оставил не распаянным?

drskip

  1. Отладочный светодиод на 13-ом пине. Его догадались подключить зачем-то аж через полевик 2n7000, подобного которому под рукой не оказалась – да и баловство все это! Протестить плату можно любым щитом или банально пищалкой – см. фотку выше (с скетч можно взять у автора или тут). Светодиод через полевик! – это ж надо так извратиться! Мощности портов контроллера хватает чтобы питать светодиод напрямую даже без ограничивающего резистора!
  2. Светодиоды с соответствующими им резисторами, индицирующие активность на линиях RX\TX например при загрузке скетча или отладке через данный COM-порт. Смысл? – если под щитом их все равно не видно, а в кабеле-конверторе такие светодиоды тоже есть, их даже лучше видно (если USB-порт на морде системника). Не забыть впаять рядом два резистора, или просто перемычки поставить – зачем резисторы на линиях RX\TX  ведущих к преобразователю?..
  3. Разъем для внешнего источника питания (6В и более), защитный диод к нему, фильтрующие емкости и «тупой» стабилизатор напряжения, срезающий излишек и переводящий его в тепло ради получения 5В на выходе. По опыту использования без радиатора даже при 9В на входе греться будет прилично, а при 12В уже и радиатор покрупнее нужен … Тут же – видимо это способ не дать замерзнуть плате и контроллеру на ней, т.е. странное решение. Индуктивный преобразователь хоть на той же MC34063 был бы куда уместнее … Запаян только электролит в цепи питания (по схеме после стабилизатора – лишним не будет) и перемычка вместо одного из диодов. Второй диод (не запаянный) служит для защиты от переполюсовки в цепи внешнего источника питания. На месте же перемычки диод должен выполнять «блокировку» подпитки USB-порта от внешнего источника, и в случае питания от USB (т.е. в моем случае) на нем будет срезаться минимум полвольта по цепи питания, что не есть правильно. Защита? – смотрим сами и не путаем красное с черным ;-))
  4. Аналогичный предыдущему преобразователь с обвеской из емкостей для получения 3.3В из 5В. Все ради того чтобы данное напряжение присутствовало на соответствующем пине – вдруг какому щиту пригодится? Самому контроллеру данное напряжение ни к чему, да и щитов использующих его мало, хотя встречаются … (USB-host например).
  5. Резисторы, подтягивающие линии шины I2C к питанию … Данные резисторы зачастую установлены на стороне устройства - на хосте они опциональны, ровно как при небольшом количестве устройств на шине и не очень длинных проводниках самой шины можно обойтись и без них везде.
  6. Это отдельная фантазия конструктора данной вариации Спящей красавицы – контакты для подключения радиоканального модуля в виде а-ля отдельного щита, а также штыри для перемычек, определяющих коммутацию ног контроллера к такому щиту. Тут же запаян резистор на 1ом вместо самовосстанавливающегося предохранителя на 0.5А
  7. Тупо два лишних пина «земли».

Общее впечатление крайне положительное – имеем не только большее количество памяти, но и возможность более быстрой (в 8 раз) скорости выгрузки скомпилированной программы в контроллер! А еще есть дополнительные пины (над колодкой питания) …

MiGeRA (июль 2017)

Заглавная » Радиоэлектроника » Arduino - Высокоуровневая платформа устройств на микроконтроллерах » Sleeping Beauty Bare Bone