27.07.2011

Статья в Хакере

Завтра появится в продаже августовский номер Харкера с моей статьей Обзор лучших Shield-плат для Arduino в разделе Phreaking



Это мой первый опыт работы с бумажными изданиями, надеюсь - не последний ;) Выражаю благодарность Сергею Сильнову и Никите Кислицину за возможность "выйти в тираж" ;)

25.07.2011

Freeduino Mega 2560

Линейка моих Freeduino пополнилась вариантом Mega2560:


Кратко:




Купить можно здесь.

23.07.2011

A6 & A7

Еще раз убедился, что учиться никогда и никому не поздно.



Почему-то всегда считал, что "лишние" выводы ADC6 и ADC7 у MCU cемейства ATmega в корпусе TQFP32 - это полноценные выводы. И только сейчас понял, что это не так - они могут работать только как вход АЦП. Иными словами, их нельзя сконфигурить в качестве цифровых входов или выходов, увы :(

Относится это только к тем платам, которые имеют "на борту" SMD-версию ATmega328 - как правило, это Nano и Seeeduino. Счастливые обладатели ATmega в PDIP-корпусе вообще, наверное, не поймут, о чем речь ;) 

21.07.2011

ZigDuino

Давно не было новостей под тегом Arduino-Compatible, а ведь новинки до сих пор появляются! И, к счастью, не только с мелкими модификациями по принципу "передвинули светодиоды и кнопки".



Название: Zigduino r1
Процессор: ATmega128RFA1
Тактовая частота: 16 МГц
Совместимость с ArduinoIDE: да
Совместимость с Shield-платами: да
Авторы: Logos Electromechanical LLC
Страница проекта: http://www.logos-electro.com/zigduino/
Дата первого упоминания: 23.02.2011

Хотя первое упоминание было в феврале, в реализации проекта произошла некоторая заминка, и попасть в руки счастливым покупателям Zigduino смог только летом.

Zigduino - это первая Arduino-совместимая плата со встроенным Zigbee.  Реализовано это за счет применения ATmega128RFA1 и реализации стека от ATMEL - BitCloud. Потенциально могут использоваться любой из протоколов: Zigbee, RF4CE, RUM (Route Under MAC), 6LoWPAN (IPv6  по беспроводным сетям).

Для того, чтобы плата заработала с ArduinoIDE, потребуется измененное ядро и бутлоадер - их можно скачать с github. Но вот что касается библиотек ATMEL - по понятным лицензионным ограничениям - их надо брать  на сайте ATMEL, придется зарегистрироваться (платить денег, к счастью, не надо ;)

Продается плата в виде промежуточного набора - напаяны только SMD-элементы.

Процессор изначально трехвольтовый, но выходы совместимы и с пятивольтовыми сигналами. Имея 128К флеш-памяти, MCU кроме всего прочего располагает достаточно большим SRAM - целых 16К! Авторы на всякий случай обвешали пины защитными диодами (уверен, hardware-параноики будут от этого в восторге). Выводов у ATmega128RFA1 несколько больше, чем у ATmega328P, но и поменьше, чем у ATmega2560 - поэтому в форм-факторе обычной Duemilanova возникают неиспользуемые. Чтобы хоть как-то побороться с этим, есть три джампера под пайку,  позволяющие выбирать, какие из двух пинов попадут на выходы digital11, analog4 и analog5 (MOSI, SDA, SCL). Для них есть отдельные колодки, поэтому можно как бы добавить к общему количеству еще три пина. Еще одна особенность - аналоговые пины в режиме ввода способны работать только с диапазоном 0..1,8В, если надо больше - придется применять перед ними делитель, увы.

Лично мне трудно пока составить какое-то мнение, тем более не поработав с "живым" экземпляром. Выглядит вроде бы просто, хоть и немного муторно с точки зрения скачивания сторонних библиотек. Если бы существовал свободный стек Zigbee - давно уже был бы включен в ядро (наподобие  LUFA в последних платах Arduino - ведь есть же вариант для работы с USB-устройствами и от ATMEL ;). С другой стороны - получаем компактность и наглядность решения, в том числе последовательный порт при работе с RF-частью остается свободным.

Подробную документацию по Zigduino можно найти здесь.

15.07.2011

Arduino Ethernet

Семейство Arduino пополнилось новой платой, которую давно уже ждали - Arduino Ethernet:


Результат, который мы видим - это скрещивание платы Arduino Pro и Ethernet Shield. Иными словами - плата приобрела разъем Ethernet, но потеряла USB. Загрузка при этом по-прежнему предполагается через UART, так что потребуется внешний USB-TTL конвертер

В качестве бонуса - возможность дистанционного питания по технологии PoE - IEEE802.3af, но модуль надо покупать отдельно.




Выглядит, наверное, солидно - но лично мне пока не очень нравится, постараюсь объяснить почему.

Во-первых, на фото строго сверху этого не поймешь, но... стоит повернуть плату в профиль - и  становится ясно, что разъем RJ45 выше, чем USB-B, и подключить шилд-плату, увы, будет непросто. Таким образом, показатель "Shield-friendly" значительно понижается.


Есть такие специальные "длинноногие" нестандартные разъемы, позволяющие увеличить зазор между стыкуемыми платами на 3-5 мм, с небольшим ущербом для жесткости конструкции (на практике я встречал лишь однажды - на оригинальной Arduino Ethernet Shiel). Но большинство производителей ими не пользуется, достать самому - практически нереально.


Во-вторых, по вышеперечисленным причинам - с одетым модулем PoE вообще можно смело забыть  про шилды. Кстати, имейте ввиду, что 48VDC - это не шутка. Хотя в питающих устройствах делают всё возможное и невозможное, чтобы защитить устройства и человека (мониторинг и ограничения по току), мгновенно это не сработает! Модуль PoE явно предназначен для работы в закрытом корпусе, а не верхом на подобной железке.

В-третьих, нет самого интересного - загрузки скетчей через Ethernet. Понимаю, что тут возникают вопросы с безопасностью, установлением соединения, идентификацией и авторизацией - но, видимо, ни у кого руки пока не дошли до их проработки. Но с ними плата была бы на порядок интереснее ;)

Вместе с тем, в отношении Ethernet у команды Arduino наметился некий прогресс - быть может, скоро ждет что-то новое и интересное ;)

09.07.2011

MKBoard R1

Статистика посещений и количество комментариев к моей статье про metaboard продолжает бить все рекорды, но ничего удивительного здесь нет. Людьми движет абсолютно здоровое желание собрать Arduino-совместимую железку своими руками за минимальные деньги. Практика показала, что в процессе всегда одни и те же грабли возникает ряд стандартных вопросов, поэтому возвращаюсь к этой теме повторно. 

Напомню, Metaboard - это Arduino-совместимая плата, где нет дополнительного USB-чипа. Функции по загрузке скетчей через USB исполняет сам же МК, при помощи библиотеки V-USB от Objective Development (программная реализация USB для МК ATMEL). В качестве bootloader-а используется USBaspLoader, имитирующий программатор USBasp. Это дает возможность загружать скетчи стандартным способом через старый добрый ArduinoIDE, правда придется немного модифицировать boards.txt. Поддерживаются ATmega168, ATmega328 и даже ATmega8, но из-за пухлого двухкилобайтного бутлоадера в последнем остается всего 6К - особенно не развернешься (хотя часто и этого бывает более чем достаточно).

К сожалению, Metalab ограничился выпуском версии Metaboard 1.1, где на тыльной стороне есть перемычки под пайку для свопа линий D+ и D- (связано с некоторыми фичами и особенностями V-USB). К счастью, существует несколько производных проектов, самый документированный - это MHVBoard. Я просмотрел на все это безобразие и решил принять в нем участие создать собственный кит с печатной платой и гордо назвать его MKBoard R1



Чем MKBoard отличается от metaboard?
  • добавлен светодиод L на выводе 13. Думаю, все, кто работали с Arduino / Freeduino согласятся, что он в 85% случаев оказывается полезным;
  • для защиты от перегрузки по питанию от USB, добавлен самовосстанавливающийся предохранитель 0,5А. Современные материнские платы почти всегда им снабжаются, но а) так надежнее б) о коротком замыкании при малейшем подозрении можно узнать просто прикоснувшись к этому фьюзу пальцем: он будет горячим;
  • добавлена вилка ICSP - и это не только для программатора: хорошие версии Shield-плат, например EtherSD Shield, именно оттуда берут сигналы SPI;
  • добавлены дополнительные дублирующие отверстия для цифровых пинов, расположенные строго на сетке 2,54 мм. Это значит, что при желании можно обойтись кусочком обычной макетной платы, а не искать протошилд;
  • все сигналы имеют двойную нумерацию (для Arduino и для ATmega), а также маркировку с обоих сторон платы.
Думаю, излишне рассуждать о том, что наличие печатной платы с маской на порядок снижает ошибку при сборке даже для опытных ЛУТостроителей. Тем более, что есть пошаговое руководство с картинками.

ОК, допустим, что плата MKBoard / MHVBoard / Metaboard собрана, что дальше?

Шаг 1. Модификация ArduinoIDE

Добавьте секции MKboard в ArduinoIDE. Проще всего будет скачать готовый архив и развернуть его в каталог hardware - содержимое файла boards-add.txt можно добавить в существующий boards.txt или воспользоваться уже объединенным boards-0022.txt

Шаг 2. Прошивка МК бутлоадером

Разумеется, МК в составе кита уже прошит, но если вы все собираете самостоятельно - придется запастись программатором и некоторым количеством терпения. 

Найдите соответствующий вашему микроконтроллеру hex-файл и прошейте его в МК (можно пользоваться фьюзами из файла boards-add.txt). Пример для avrdoper в USB-HID режиме:

ATmega8:

avrdude -c stk500v2 -P avrdoper -p m8 -B 3 -e -u -U lock:w:0x3f:m -U hfuse:w:0xc0:m -U lfuse:w:0x9f:m
avrdude -c stk500v2 -P avrdoper -p m8 -B 1.1 -U flash:w:atmega8_16MHz.hex -U lock:w:0x0f:m

ATmega168:

avrdude -c stk500v2 -P avrdoper -p m168 -B 3 -e -u -U lock:w:0x3f:m -U hfuse:w:0xd6:m -U lfuse:w:0xf7:m -U efuse:w:0x00:m
avrdude -c stk500v2 -P avrdoper -p m168 -B 1.1 -U flash:w:atmega168_16MHz.hex -U lock:w:0x0f:m

ATmega328:

avrdude -c stk500v2 -P avrdoper -p m328p -B 3 -e -u -U lock:w:0x3f:m -U hfuse:w:0xda:m -U lfuse:w:0xf7:m -U efuse:w:0x03:m
avrdude -c stk500v2 -P avrdoper -p m328p -B 1.1 -U flash:w:atmega328_16MHz.hex -U lock:w:0x0f:m


Если программатор поддерживается ArduinoIDE, то можно попробовать прошить через нее. Сначала надо выбрать тип платы, затем - порт, а затем зашить МК через Tools > Burn bootloader > w/ YourProgrammer.

Шаг 3. Установка драйвера

Пользователям Windows надо установить драйвера libusb и соответствующий inf-файл для USBasp, скачать их можно здесь

Linux и MacOS поддерживают режим libusb на уровне ядра и, скорее всего, у вас он уже включен. Однако, в Linux иногда встречается проблема с доступом к устройству по USB, когда недостаточно прав. Чтобы не запускать ArduinoIDE из-под рута, добавтьие правило в udev и  перезапустите его:

SYSFS{idVendor}=="16c0",  SYSFS{idProduct}=="05dc", MODE="0660", GROUP="users"

разумеется, вы должны состоять в группе users, при необходимости это легко исправить:

sudo adduser [username] users
restart udev

Шаг 4. Подключение и проверка

Подключите MKBoard к USB-шине, замкните джампер Upload и нажмите кнопку сброса. Светодиод L начнет помаргивать, сигнализируя  о готовности принять скетч по USB. Находиться в этом состоянии плата может неограниченнго долго - пока вы не снимите джампер, либо пока не переподключите USB.

Выберите из примеров старый добрый blink и загрузите его привычным способом - Ctrl+U. Если все нормально - светодиод L начнет мигать. 

Как быть, если все-таки что-то пошло не так?

Пользователи Linux могут поинтересоваться о наличии устройства с VID = 16c0 и PID = 05dc через lsusb, а пользователи Windows - через диспетчер устройств.  В случае проблем, проверьте еще раз, что:
  • вы правильно спаяли плату - при подключенной шине USB и в положении джампера JP5 1-2, прикоснитесь к предохранителю F1 - он не должен быть горячим;
  • вы правильно запрограммировали ATmega, особенно фьюзы;
  • вы вставили ATmega правильной стороной, соблюдая ключ;
  • вы действительно замкнули джампер "Upload" (который рядом с кварцем);
  • вы нажали после этого на сброс.
Вот, собственно, и всё - дальше можно работать, как с обычным Arduino. Единственное отличие - для загрузки скетча надо нажимать сброс. Джампер "Upload" трогать необязательно - после загрузки USBasploader передает управление скетчу и получит вновь управление только после нажатия на кнопку сброса (подача питания - это другое событие).

И учтите - USB-соединение активно только во время работы бутлоадера, поскольку тот содержит в себе V-USB. Загруженному скетчу, к сожалению, это недоступно - весь обмен по Serial будет происходить через пины RX и TX (или digital1 и digital0), которые ни к чему не подключены.

В заключении по поводу бутлодера: я его немного модифицировал, чтобы он моргал светодиодом L при активизации. Если вы взяли стандартный USBasploader, то там никакой "цветомузыки" не ожидайте.

Исходники проекта можно скачать у меня или на github:  https://github.com/mk90/MKBoard.

Готовую плату MKBoard или кит для самостоятельной сборки можно купить здесь.

02.07.2011

Снова о LoL Shield

Как бы рубрика "письма в редакцию" :) Или - смотрите, что можно сделать с LoL-Shield :)





Автор этих композиций - Юрий, любезно согласился поделиться скетчем ко второй из них. Только учтите, что музыка просто наложена, хотя кажется, что она попадает в такт движениям бешеной палочки ;)