02.07.2012

ADK 2012

Недавно в официальном блоге Arduino появилось сообщение о том, что на очередной конференции Google IO была представлена новая плата ADK 2012, уже базирующаяся на Arduino Due:


Официальный выход собственно Arduino Due запланирован на этот год, вместе с новой  ArduinoIDE, которая будет способна генерировать код под ARM. Пока что можно полюбоваться на фото ограниченного выпуска для разработчиков:

Фото в этом посте лицензированы под CC BY-NC-SA.

26.06.2012

Leonardo официальный

Вместе с выходом ArduinoIDE 1.0.1 нас посетила и "новая" плата Leonardo, выпуск которой был настолько основательно задержан, что она уже успела обзавестись массой клонов:



В официальном магазине Arduino ее можно приобрести за 18 EUR со всеми разъемами  или же, немного сэкономив, за 16 EUR, но уже без них:

Изучая схему, можно найти испытанный не одним поколением плат Arduino узел автоматического выбора питания на основе LM358 и полевого транзистора. Цепь питания +3.3В выполнена на отдельном регуляторе LP2985A-33, как и во всех платах, в которых нет USB-TTL моста FTDI232RL.

Есть и некоторые нововведения - впервые в этой серии видим разъем microUSB. Колодки выводов расположены согласно последнему стандарту arduino pinoout 1.0 - с фиксированной позицией SCL, SDA и IOREF. Скопированы и спорные с моей точки зрения "усовершенствования" в виде резистора 1М между ножками кварца, диода в цепи сброса и включенного в параллель внешнему источнику питания диода, лихо закорачивающего источник с неверной полярностью.

Таким образом, никаких сюрпризов в схеме нет - всё самое интересное происходит в программной части (напоминаю, что до момента выхода ArduinoIDE 1.0.1 код ATmega32u4 был практически неработоспособен из коробки - например, чтобы работать с Freeduino 32u4 надо было установить пропатченное ядро).

Бутлоадер

Изменен полностью - ранее он основывался на коде Peter Barrett-а и назывался DiskLoader, теперь же мы имеем модифицированный вариант CDC-бутлоадера из LUFA, под кодовым названием Caterina. Единственное предположение по поводу цели такого перехода - новый код лучше поддерживается - других внятных объяснений я пока не подыскал, особенно в свете удвоившегося размера bootloader-а. Звучит особенно грустно, если вспомнить, что поддержка USB неявно подключается к каждому компилируемому под Leonardo скетчу, для поддержания возможности программного сброса через USB. И вот уже blink занимает 4850 байт (против 1084 при компиляции под UNO!). Невольно вспоминается teensy с его закрытым от общественного взора кодом, но зато и с впечатляющим 512-байтным размером...

Как и раньше, процедура заливки скетча начинается со сброса, и сигналом к этому служит закрытие виртуального COM-порта Leonardo, до этого открытого на скорости 1200. Изменился, впрочем, сам подход к запуску бутлоадера - если раньше управление ему передавалось немедленно, то теперь это происходит через 120 мс, путем установки watchdog-а. Полагаю, авторы стремились дать корректно завершиться собственно процедуре закрытия порта, чтобы она не провоцировала ситуацию с таймаутом на хосте.

Таймаут ожидания заливки скетча в бутлоадере увеличили до 8 секунд! Практика показала, что это действительно правильно: время от времени получаю письма от пользователей Freeduino 32u4, что их плата перестала принимать скетчи по USB. Добиться этого нетрудно - достаточно залить в плату скетч, который ее полностью завешивает, и ArduinoIDE сбросить ее программно уже не сможет. Но когда пользователь нажимает кнопку сброса на плате, и лишь затем - Ctr+U в ArduinoIDE, процесс компиляции и ликновки не успевает уложиться в заданные 6 секунд, и плата вновь зависает. Я всегда рекомендую изменить последовательность - сначала нажимать Ctrl+U и только потом - сброс на плате (ну, или нажать и удерживать сброс, а потом отпустить его - надо просто прицелиться поточнее, и это всегда помогает :) 

Если раньше и бутлоадер, и ядро имели один и тот же PID комбинированного USB-устройства, новый бутлоадер представляется только CDC-устройством, зато имеющим свой собственный PID. Таким образом, Windows попросит установить драйвера дважды - сначала для бутлоадера, затем для скетча.

Ну и последнее изменение - протокол общения с бутлоадером сменился с  'arduino' на 'avr109'. В этом тоже не стоит искать скрытого смысла, поскольку именно avr109 поддерживает CDC-бутлоадер из LUFA.

Ядро

Arduino Leonardo по-прежнему уверенно изображает из себя комбинированное USB-устройство (CDC-модем, мышь и клавиатура - три в одном). 

С точки зрения API все осталось прежним - использовать это многообразие функциональности вы можете  через соответствующие классы Serial, Mouse, Keyboard. Причем интерфейс общения с клавиатурой обогатился функциями-членами press() и release(), которые великолепно понимают "непечатные" символы, и поэтому редактировать исходники ядра, чтобы сделать sendReport публичным (как это, например, потребовалось здесь) отныне не нужно.

Наконец-то пофикшена инициализация таймеров - аппаратный ШИМ одинаково корректно работает на всех выходах.

К сожалению, в ядре по-прежнему есть и недоделки:
  • попытка использовать встроенную функцию tone, скорее всего, вызовет повисание скетча, запущенного на ATmega32u4;
  • не работают назначаемые пользователем прерывания - через attachInterrupt, это Issue714. Справедливости ради стоит заметить, что работа в этом направлении все-таки ведется, но пока - увы, прерывания в для ATmega32u4 реализованы.

Freeduino 32u4 в ArduinoIDE 1.0.1

Для того, чтобы Freeduino32u4 можно было использовать с ArduinoIDE 1.0.1, потребуется замена бутлоадера - увы, подружить с ней старый вариант на базе DiskLoader мне пока не удалось.

С другой стороны, новый бутлоадер основан на Caterina и позволяет добиться максимальной совместимости с оригинальным Leonardo - изменения касаются только VID/PID и мигания встроенным светодиодом L. Ядро в этом случае тоже остается неизменным - добавляется лишь variant-файл для правильной трансляции номеров пинов.

Расплачиваемся за все это двумя килобайтами памяти программ... если решились - скачайте и распакуйте в каталог с ArduinoIDE 1.0.1 архив, в котором вы найдете:
  • готовый hex, для заливания в плату при помощи программатора;
  • файл-вариант Arduino-нумерации пинов Freeduino 32u4;
  • .inf-файл для Windows (новому бутлоадеру - новы PID :);
  • boards.txt.add: секция для добавления к boards.txt;
  • Makefile.freeduino32u4 для сборки hex-файла с правильными VID/PID.
Прошивать можно либо из ArduinoIDE, либо из командной строки (например, если у вас AVRDoper):

avrdude -c stk500v2 -P avrdoper -B 3 -p atmega32u4 -F -e -u -U lock:w:0x3f:m -U efuse:w:0xcb:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m
avrdude -c stk500v2 -P avrdoper -B 1.1 -p atmega32u4 -F -U flash:w:Caterina-Freeduino32u4.hex -U lock:w:0x2f:m


Саму плату можно купить здесь.

22.05.2012

ArduinoIDE 1.0.1


Несмотря на весьма скромное приращение версии, проделана значительная работа. Я бы картко выделил четыре момента:
  • интернационализация;
  • официальная поддержка Leonardo;
  • встроенный тулчейн (Linux);
  • багофиксы.
Теперь мы все, наконец, сможем общаться с ArduinoIDE на родном и могучем:



Пользователи Linux получили в составе дистрибутива avr-gcc тулчейн. Таким образом, все проблемы, которые я подробно описывал в статье ArduinoIDE в Ubuntu 11.10, благополучно решены.

Официально вышел Leonardo:

(этому событию будет посвящен отдельный, подробный пост)

Изменения в языке Wiring

  • механизм неявного управления подтягивающими резисторами, наконец-то стал более явным - если указать в функции pinMode новый режим INPUT_PULLUP, они будут подключены. А вот старый режим INPUT однозначно их отключает;
  • в класс Stream добавлены функции, возвращающие результаты в виде класса String - readString() и readStringUntil();
  • библиотека поддержки I2C теперь способна на работу в режиме "repeated start" - очень-очень давно это были первые же грабли, на которые я сам наступил при работе с ней. Теперь у endTransmission и requestFrom добавился параметр, управляющий этим режимом, но совместимость с прежним синтаксисом сохранена.  

Усовершенствования в ArduinoIDE

  • при компиляции скетча пересобираются только те исходники, которые менялись (реально ускоряет процесс компиляции);
  • можно отключить верификацию скетча после загрузки - раньше он в обязательном порядке прочитывался и сравнивался с оригинальным файлом, так что загрузка должна ускориться ровно в два раза;
  • шрифты в окне последовательного монитора теперь меняются (подобно окну редактирования); 
Самые важные, на мой взгляд, исправления касаются Ethernet (о них я как-то упоминал в этом посте) и работы скетча-программатора ArduinoISP.  В ядро Arduino добавлена поддержка для ATmega1284P.

Порадовало и то, что просматривается тенденция больше времени уделять вопросам совместимости с предыдущими версиями. Было бы неразумно недооценивать один из весомых факторов популярности Arduino - внушительное количество библиотек и скетчей, написанных энтузиастами и доступными для использования всем желающим ;)

Полный список изменений можно увидеть на Google Code.

17.05.2012

Вторая книга по Arduino на русском



Скоро нас ожидает выход Getting Started with Arduino на русском языке - самой первой книги про Arduino, автором которой является сам Massimo, в переводе Михаила Райтмана (судя по отзывам, его переводы выполнены довольно качественно).

Книга будет полезна для начинающих знакомство с Arduino, быть может даже musthave. Но если на чистоту, момент выпуска упущен года на четыре. Текст книги, равно как и русский перевод, давно уже гуляет по просторам интернета, не говоря о том, что бесплатный сокращенный вариант изначально доступен свободно. 

В русском переводе книга приобрела название "Arduino для начинающих  волшебников". Есть пара смутивших меня моментов - изменена оригинальная обложка и убрана ссылка на издательство O'Relly (интересно, Тим в курсе?) - и это при полном (!) дублировании оглавления (интересно, Массимо в курсе? ;) 

Если кто-то сомневается, что это та самая книга - добытый мной текст оглавления под катом, у кого есть оригинал - можно сравнить. Я особых отличий не нашел.

02.05.2012

Анонс

По многочисленным просьбам читателей Artem Volk обновил свою статью 
Минимальный клон Arduino за $3 на ATmega8A с модифицированным bootloader'ом, специально осветив моменты, касающиеся последних изменений в ArduinoIDE 1.0 и дополнив новым вариантом клона, уже за $3.5 :)