31.12.2011

HNY 2012

HAPPY NEW YEAR!

Пусть новый 2012 год принесет моим читателям радость новых открытий и побед,  а боль, грусть и досада пережитых неудач останутся в старом 2011, без возможности пересечь epoch  1325361600!

Ну а я постараюсь по мере своих сил развлекать вас через свой блог и далее ;)

30.12.2011

Адаптация библиотек для Arduino 1.0

В последнее время много народу жалуется, что с новой ArduinoIDE не работают их старые любимые библиотеки. На самом деле, иногда заставить их работать очень просто - минимальные телодвижения выглядят следующим образом:

  1. Переходим в каталог с библиотекой
  2. Ищем во всех файлах .cpp и .h, не встречается ли где
    #include "WProgram.h"
  3. Если находим - заменяем на:
#if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif 


И, если нам повезло и больше ничего править не надо, библиотека будет одинаково хорошо работать и с IDE 0022/0023, и с 1.0.

21.12.2011

Arduino 1.0: pinout и IDE

В самый последний день ноября нас наконец-то посетил исторический релиз ArduinoIDE 1.0

Конечно, я должен был опубликовать эту статью еще недели две назад. Но я постоянно откладывал этот пост - в основном из-за запаздывания материалов на официальном сайте arduino.cc, без которых оставалось некоторое количество вопросов. 

Итак, в отличие от остальных версий ArduinoIDE выпуск 1.0 происходил не так, как обычно.  Сначала было выпущено два релиз-кандидата, чтобы дать всем привыкнуть к нововведениям, которые были известны заранее: потребуется адаптация библиотек, появится новая плата Arduino Leonardo, изменится стандартная физическая раскладка пинов (должны добавиться четыре). После второго релиз-кандидата вдруг неожиданно вышла ArduinoIDE 0023, в которой главным событием стало использование optiboot 4.4 и переход с ATmega8u2 на ATmega16u2 в платах Uno, Mega2560 и ADK.  

К счастью, на официальном веб-сайте все-таки появились актуальные фото последних ревизий плат и стало видно, что добавлено 3 дополнительных пина:
  • на верхней колодке - SDA, SCL:

  • на нижней колодке - IOREF:

Таким образом, фоторобот новой платы из статьи Великий Леонардо стал выглядеть так:


Четвертый пин (рядом с IOREF) оставили свободным - для будущих расширений. 

Дублирование SCL и SDA выглядит логичным - стараясь сохранить универсальность раскладки, авторы с самого начала зафиксировали положение UART (пины 0 и 1 за RX и TX), затем обожглись на пинах SPI при создании Mega (с тех пор SPI надо брать исключительно с вилки ICSP). Видимо, есть желание или вынужденная необходимость стыковать шилды также и по I2C - а они-то как раз, увы, фиксированного положения пока не имели.

Появление IOREF - прямое наследие Arduino Due. Будущая ARM/Cortex плата была упомянута всего однажды, но похоже, что именно ей мы обязаны появлением Arduino pinout 1.0. Поскольку Due трехвольтовая, то предполагается, что будущие Shield-платы будут способны через этот пин адаптировать уровень логической единицы для обмена с основной платой. Соответственно, на IOREF должно подаваться VCC MCU (+5В, +3,3В или +1,8В). 

В качестве варианта - на шилд-плате IOREF можно подключить к специальному чипу-согласователю уровней сигналов. Но тогда автоматически встает вопрос совместимости - что делать, если такой шилд подключен к "старой" плате, и IOREF попросту повис в воздухе? Городить на шилде специальную схему для такого случая? Оказывается, есть простой подход ;) Вот так, дешево и сердито, при помощи пары диодов Шоттки это реализовано в Arduino MotorShield R3:

Если брать в общем случае комбинацию новая плата+старый шилд, то вроде бы все нормально. В неиспользуемые старыми шилдами колодки ничего не втыкается. Но если старая плата принимает на себя новый шилд, то мне довольно ясно представляется, как эти дополнительные четыре ножки упрямо упираются в элементы, расположенные на месте несуществующих отверстий на старой плате (а они были, особенно в области IOREF!). Возможно, все пропало! придется их подрезать или отогнуть.

А вот c выходом релиза ArduinoIDE 1.0 по поводу Leonardo наступила некоторая неизвестность. Во-первых, определение Leonardo закомментировано в boards.txt, а во-вторых - ошибки в ядре и бутлоадере исправлены не до конца. А пофиксить их было бы довольно просто - достаточно посмотреть в исходники Teensy. Однако, положительный момент тоже присутствует - есть изменения в правильном направлении, а саму поддержку USB из ядра никуда не удалили. И если бы раньше я заключил, что выход Leonardo откладывается до следующего года, то с таким непредсказуемым развитием событий уже завтра может выйти ArduinoIDE 1.1, где оно будет. Собственно, такое бывало и раньше - выпускали новую IDE ради изменений в boards.txt.

Поэтому, для тех, кто хочет поэкспериментировать с Leonardo до его официального выхода -  плата Freeduino 32u4 R2. Основное отличие от версии R1 - это шелкография, на которой теперь нанесены пины Arduino (сама раскладка осталась совместимой) :
Есть, правда, и один недочет - дополнительный аналоговый пин A11, он совмещен с цифровым D6. Напоминаю, что Freeduino 32u4 имеет на борту:

  • микроконтроллер ATmega32u4 со встроенной поддержкой USB;
  • 32K FLASH, 2.5K SRAM, 1K EEPROM;
  • программирование через USB (ArduinoIDE), ISP и JTAG; 
  • 25 универсальных пинов, которые могут быть сконфигурированы в качестве входов или выходов, со встроенными подтягивающими резисторами;
  • для 12 универсальных пинов (из 25) возможна работа в режиме 10-битного АЦП;
  • для 7 пинов возможна работа в режиме аппаратного ШИМ;
  • 1 х UART, 1 x I2C и 1 x SPI.
Владельцам Freeduino 32u4 R1, при переходе на ArduinoIDE 1.0 настоятельно рекомендую обновиться:
  1. freeduino32u4-variant-arduino1.0.tar.gz - только variant, без измененного ядра - гарантирует аутентичность окружения вашей ArduinoIDE 1.0rc2. Правда, не на всех пинах Freeduino32u4 будет ШИМ.
  2. freeduino32u4-core-arduino1.0.tar.gz - variant + core, чтобы всё работало корректно. Именно его я и рекомендую ставить, перетирая существующее core в дистрибутиве.
В обоих вариантах надо распаковать архивный файл в arduino-1.0/hardware/arduino и исправить boards.txt, добавив туда содержимое файла boards.txt.add:

leonardo1.name=Freeduino 32u4
leonardo1.upload.protocol=arduino
leonardo1.upload.maximum_size=30720
leonardo1.upload.speed=1200
leonardo1.bootloader.low_fuses=0xde
leonardo1.bootloader.high_fuses=0xda
leonardo1.bootloader.extended_fuses=0xcb
leonardo1.bootloader.path=diskloader
leonardo1.bootloader.file=DiskLoader-Leonardo.hex
leonardo1.bootloader.unlock_bits=0x3F
leonardo1.bootloader.lock_bits=0x2F
leonardo1.build.mcu=atmega32u4
leonardo1.build.f_cpu=16000000L
leonardo1.build.core=arduino
leonardo1.build.variant=freeduino32u4

На всякий случай, названия портов ATmega32u4 сохранены с противоположной стороны платы:

(хотя, кто будет туда заглядывать, если она уже вставлена в беспаечную макетку? ;)

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

13.12.2011

Ёлкадуино

Рискуя превратить свой блог в дайджест журнала Радио, в качестве краткого предисловия хочу поделиться содержимым раздела "Радио - начинающим" декабрьского номера: там схемы сразу двух светодиодных ёлок. Такие, знаете - мигалки - чисто for fun. Первая схема родом из Украины (автор - В.Хмара из Житомира, усовершенствовал схему А. Лечкина, опубликованную в 2007 году во все том же Радио):



Схема выполнена на основе трехфазного мультвибратора, управляющего тремя группами светодиодов (суммарно их 20 штук), создающих эффект "бегущий огонь". Схема довольно ортодоксальная простая, настройка не требуется. Единственное, что можно менять - это скорость переключения, подбирая емкости между транзисторами мультвибратора.

Вторая схема более продвинута, поскольку имеет в своем составе "восьминогий" MCU PIC12F675 (автор - Владимир Баландин), управляющий 28-ю двухцветными светодиодами:



Светодиоды разбиты на две группы, каждый цвет группы управляется отдельно - через четыре полевых транзистора. Эффектов реализовано гораздо больше - "плавное зажигание и погасание" (fading),  мигание, переключение цветов. К сожалению, на двух группах светодиодах "бегущие огни" реализовать можно очень и очень условно, но зато для скачивания доступна микропрограмма с исходниками (и даже вместе с видеороликом, но, к сожалению, автор демонстрирует только один эффект).



К чему это я? Ах да - в качестве иллюстрации: думаю, существует туева куча очень много схем новогодних светодиодных елок, но какая из них самая лучшая для повторения? Та, которая светит ярче или та, которая выдает более затейливый эффект? Не наскучит ли она  через пару дней однообразием эффектов? Думаю, читатель уже догадывается, к чему я клоню - было бы прекрасно, если бы внутри такой елки была Arduino-совместимая плата, дающая реципиенту качественно новый простор для творчества. Это была бы, как любят теперь выражаться наши чиновники,  умная елочка.

Памятуя о изобретении велосипеда, я начал искать Arduino-совместимую елку на просторах Интернета, и нашел практически то, что искал - Blinky Christmas Ornaments.


Автор как раз пишет, что I wanted the board to be easily hacked by family and friends that were so inclined - идея, в точности совпадающая с моей.


Полностью уничтожив немного поработав с неприемлемым для меня контуром-кругляшкой, удалось вписать ребристый елочный профиль в размер для бесплатной версии EagleCAD - 100x80 мм:


Основная идея сохранена - использование пары закаскадированных микросхем 74HC595N для индикации на 16 светодиодах (8 зеленых + 8 красных). В центре есть также четыре дополнительных светодиода, непосредственно подключенных к линиям D2, D3, D4, D5 (здесь и далее - нумерация Arduino). В качестве MCU использован ATmega328P-AU с бутлоадером Duemilanova, но вместо USB-порта только вилка для кабеля FTDI - не думаю, что наличие отдельного USB-чипа в таком устройстве слабо оправдано. "Хакнуть" елку несложно: достаточно подключить USB-TTL переходник и  выставить в ArduinoIDE тип платы "Arduino Duemilanova". Если кому-то больше по душе UNO, можно перешить бутлоадер, запаяв гребенку ISP06 и подключив к ней любой ICSP-программатор с помощью 6-пинового кабеля.


Присутствует также и отверстие для подвешивания девайса за ниточку:


Но мне кажется, подвешивать надо за проводочек, по которому приходит +5В ;)

В нижней части HNYDuino (это официальное название, а мне по душе менее благозвучное "Ёлкадуино") - пины для стыковки с подставкой при помощи вилки PLS-R:



Подставка играет не только декоративную роль, но и несет на себе холдер батарейки типа "крона", стандартный для Arduino разъем питания и защитный диод 1N4007.



Но самое главное - туда выведены некоторые неиспользуемые пины - D6, D7, D9 и A0, A4, A5. Это позволяет читать показания аналоговых датчиков, использовать шину I2C и аппаратный ШИМ.


Расположенный слева DPDT переключает источники питания - либо это +5В с кабеля FTDI, либо BATT, приходящий с подставки (напряжение от БП 9..12В или "крона"). Если подключить что-то одно, то он превращается в выключатель.

Что можно сотворить с такой елочкой? Фантазия подсказывает световой датчик (чтобы она зажигалась только с наступлением темноты) и/или датчик звука, реагирующий на хлопки или традиционное "елочка, зажгись!". Более изощренным можно посоветовать подключить по I2C микросхему RTC DS1307 и ровно в 00:00 01.01.201X "неожиданно" замигать всеми огоньками или сыграть гимн через предусмотрительно подключенный пьезодинамик.

Конечно, проект далек от совершенства - тут есть огромный простор для совершенствования. Поэтому, для ищущих even more fun и готовых поработать самостоятельно - выкладываю схему и разводку в Eagle, а также и тестовый скетч для проверки работы.

Happy new hacking! ;)

07.12.2011

LaunchPad unboxing

И все-таки я решил из принципа заказать LaunchPad у TI - со второй попытки у меня получилось. TI не много ни мало... отправляет их FedEx-ом за свой счет! Так что подержать заветную коробочку в руках можно уже через какие-то четыре-пять дней:


Но, что же внутри? Ниже - фотографии, которых мне так не хватало к статье в Радио для полноты ощущений ;)

29.11.2011

Angelino R1

Наконец-то дошли руки и до комплекта Arduino Minimum на печатной плате (безжалостный умеренный плагиат с платы Diavolino):

Плата будет полезна тем, кто периодически занимается проектами на основе Arduino. Предполагается, что основная стадия отладки уже завершена, и требуется постепенно делать проект более автономным. Что значит "постепенно"? В моем понимании - освобождая от ненужного. Перечислю основные моменты:
  1. Ничего лишнего: вместо портов USB и RS232 - только последовательный порт USART на TTL-уровнях. Так что для загрузки скетчей потребуется дополнительный конвертер, типа такого;
  2. Возможность питания напрямую от батарейного отсека, источника стабилизированного питания +5В или от блока питания +7-12В;
  3. Наличие автосброса и возможность его отключения.
Никакой схемы автовыбора источника питания нет - как нет и защитного диода. Почему? Предполагается, что в фазе постпротипизации вы уже определились с источником питания и  не собираетесь тратить, быть может, критичные для проекта 1,1В впустую. Гораздо выгоднее сразу запитаться от пятивольтового блока питания с разъемом 2.1 мм или от переходника USB-TTL. 

Для автономных проектов отлично подходит батарейный отсек 3хAA - в сумме получается 4,5В. В качестве альтернативы можно использовать отсек 4xAA с аккумуляторами (~4,8В). Если не устанавливать светодиод L, то можно добиться  большей четкости  работы LoLShield, что советует даже сам автор - J.P.Rogers.

Заказать набор для сборки за 350 рублей можно здесь. Собрать самому - совсем несложно, пошаговое руководство здесь.

Update по просьбам читателей - схема (кликабельно):


25.11.2011

Книга про Arduino на русском

Спешу поделиться хорошей новостью: издательства наконец-то заинтересовались темой Arduino и выпустили перевод Соммерса (отличилось питерское издательство BHV):



Книгу в руках пока не держал, но доступен небольшой фрагмент в виде PDF (только оглавление и введение). Его хватает, чтобы оценить объем рассмотренных вопросов, но, к сожалению, недостаточно для понимания качества и полноты изложения. Тем не менее, уже сейчас Программирование микроконтроллерных Плат Arduino/Freeduino можно купить:
Если кто-то уже может поделиться впечатлениями - милости прошу в комменты.

18.11.2011

Arduino и журнал Радио

Я стараюсь регулярно просматривать свежую прессу по практике радиолюбительства, и, конечно же, подписан на легендарное Радио. Когда брал свежий номер в руки, сначала даже не поверил своим глазам:



ArduinoIDE 0023

Только что вышла ArduinoIDE 0023 - изменения минимальны:

  • переход на последнюю версию optiboot 4.4 (что уже сделано в Arduino IDE 1.0)
  • поддержка новых ревизий Arduino Uno, Mega 2560 и ADK.
Что это за новая ревизия R3, доподлинно пока неизвестно, но уже понятно, что вместо ATmega8u2 (8K flash) использован ATmega16u2 (16K flash). Видимо, какие-то неотвратимые причины (либо малый размер памяти, либо производственные платы ATMEL) заставили Arduino произвести этот переход.

Других подробностей пока нет - ни CAD-файлов новых плат, ни исходников новой ArduinoIDE - если судить по списку изменений, в ней самой ничего не изменилось. 

Полагаю, что появление Arduino Leonardo и релиз ArduinoIDE 1.0 еще откладываются.

11.11.2011

Freeduino 32u4 в Arduino 1.0rc2

Немного обновил файлы для Freeduino32u4:
  1. В файл с вариантами добавлены константы LED_BUILDIN, SCL, SDA - от последних двух зависит правильная работа встроенной библиотеки TWI, а также они используются в Firmata;
  2. Взято ядро из RC2, затем исправлено под ATmega32u4.
Соответственно, можно скачать:

  1. freeduino32u4-variant-arduino1.0rc2.tar.gz - только variant, без измененного ядра - гарантирует аутентичность окружения вашей ArduinoIDE 1.0rc2. Правда, не на всех пинах Freeduino32u4 будет ШИМ.
  2. freeduino32u4-core-arduino1.0rc2.tar.gz - variant + core, чтобы всё работало корректно. Именно его я и рекомендую ставить, перетирая существующее core в дистрибутиве.
В обоих вариантах надо распаковать архивный файл в arduino-1.0-rc2/hardware/arduino и исправить boards.txt, добавив туда содержимое файла boards.txt.add:

leonardo1.name=Freeduino 32u4
leonardo1.upload.protocol=arduino
leonardo1.upload.maximum_size=30720
leonardo1.upload.speed=1200
leonardo1.bootloader.low_fuses=0xde
leonardo1.bootloader.high_fuses=0xda
leonardo1.bootloader.extended_fuses=0xcb
leonardo1.bootloader.path=diskloader
leonardo1.bootloader.file=DiskLoader-Leonardo.hex
leonardo1.bootloader.unlock_bits=0x3F
leonardo1.bootloader.lock_bits=0x2F
leonardo1.build.mcu=atmega32u4
leonardo1.build.f_cpu=16000000L
leonardo1.build.core=arduino
leonardo1.build.variant=freeduino32u4

Раскладка пинов - прежняя (# означает аппаратный ШИМ):

07.11.2011

Arduino IDE 1.0 RC2

Второй релиз-кандидат Arduino IDE 1.0 вышел 25 октября - и, поскольку это событие никак не было отмечено в блоге arduino, мимо мировой общественности это прошло как-то незамеченным. Кстати, и ссылка для скачивания прежняя.

Специальный список отличий rc2 от rc1 не публиковался, основные изменения можно проследить по исходным текстам. Вот наиболее значимые, которые мне удалось  найти:

1. В список программаторов снова добавлен USBasp, протокол для загрузки Arduino Ethernet изменен с stk500 на arduino.

2.  Включена последняя версия optiboot - в ней поддерживается не только ATmega168/328P, но и старый добрый ATmega8. Кроме того, можно собрать и попробовать альфа-версии для ATmega1280 (Arduino Mega), Sanguino (ATmega644P) и ATmega88. И впервые, кстати, можно увидеть в качестве таргета luminet - это такой проект на ATtiny84, чем-то сходен с BlinkMuino, чем-то - с LilyPad (wearable со светодиодом).

3. В подкаталоге variants макрос LED был заменен на LED_BUILIDIN. Это правильно, дефайны препроцессора из трех заглавных букв, тем более являющиеся общеупотребительными словами - источник странных и трудно выявляемых ошибок.

4. Изменения в ядре совсем малозначительны - в основном, это исправления, связанные с отказом от использования знаковых типов (например, Int) в пользу беззнаковых - когда знак действительно не нужен. Однако, есть и более интересные вещи: добавлен #define с перечислением микроконтроллеров ATtiny24/44/84 и ATtiny25/45/85 - это означает как минимум шаг навстречу ATtiny-проектам типа luminet. А как максимум - что нас ждут новые Arduino на ATtiny ;)

К сожалению, ни одной ошибки в коде для Arduino Leonardo - нет. Следовательно, эта версия - хоть и кандидат, но финальным релизом стать не сможет.  

Что дальше? Очередной RC3 ближе к 01.12.2011 или сразу же финальный релиз? Или все-таки финальный релиз будет под новый год? В любом случае, "редакция будет следить за развитием событий" (с) ;)

25.10.2011

Новости Freeduinoстроения

Пришла пробная партия Freeduino EtherSD Shield 1.0.1:

Изменения весьма незначительные, хотя началось всё с этого сообщения. Я провел тщательное и беспощадное тестирование при помощи подушки - несчастный модуль беспрерывно принимал и передавал пакеты в течение двух часов в условиях подавленной вентиляции, однако каких-либо сбоев выявлено не было. Таким образом, нагрев W5100 в процессе работы (на который обычно жалуются те, кто впервые сталкиваются с Ethernet-шилдами ), является вполне нормальным.

А нагрев, кстати, зависит от потребляемого тока. Пробежавшись по подключением всех ног W5100 в схеме Arduino Ethernet Shield 05, я заметил, что "скопипастил" из нее составной подтягивающий резистор R24+R28 на линиях CS/WR/RD, что в итоге дает 1К+2К2 = 3К2. Авторы просто использовали свободные резисторы в счетверенных микросборках: экономили таким образом место и детали - по крайней мере, надеюсь, фэн-шуй тут не причем ;) Кроме того, в разъеме Ethernet были светодиоды со встроенными токоограничительными резисторами 270 Ом. 

Соответственно, в новой версии подтягивающий резистор стал 10К, а токоограничители - 470 Ом. Согласно последним веяниям Arduino Ethernet Shield 06 снесен светодиод-анахроизм COLL и удалено место под монтаж full SD-карты - а вместе с ней и резисторы-подтяжки линий DETECT и WRITE_PROTECT (зря я волновался на счет совместимости).




Ряды плат-протошилдов пополнил Nano протошилд:
До сих пор считал, что это совершенно бесполезная вещь - все-таки, Nano задуман в первую очередь для беспаечной макетки. Однако, практика показала, что когда схема переходит не следующую стадию и требуется применить секретное оружие паяльник, то нормальный разъем внешнего питания, разведенный USART и I2C в комплекте с макетным полем и условными посадочными местами для светодиодов и кнопок - не так уж и плохо ;)   

16.10.2011

Великий Leonardo

Как я уже упоминал, вместе с выходом Arduino 1.0 мы получим также и плату Arduino Leonardo:



Доподлинно известно, что на этой плате будет всего один чип ATmega32u4 с кварцем 16МГц. Ранее мы могли наблюдать, как старый добрый мост FT232RL был заменен на ATmega8u2 с нативной поддержкой интерфейса USB и прошивкой конвертера USB-TTL. Делалось это под флагом "преврати свой Arduino Uno во что угодно", но креатив USB-части должен был обязательно уложиться в 8К флеш-памяти. Идею продолжил Leonardo - памяти больше, но чипов меньше. 

Сама идея не так уж и нова - платы на ATmega32u4 в роли единственного и главного чипа существуют уже сейчас  - это и Teensy, и ATmega32u4 breakout, и Freeduino ATmega32u4 made by MK90.RU. Появление поддержки в ArduinoIDE перемещает эти платы на принципиально новый уровень - теперь можно использовать "родное" ядро Arduino, которое отныне включает поддержку ATmega32u4. Схема загрузки скетчей остается прежней - через бутлоадер, который принимает скетч по USB и записывает в основную память, а затем передает ему управление. Откомпилированный скетч по-прежнему содержит внутри библиотеку-"ядро" Arduino, и, в случае компиляции под ATmega32u4, туда добавляется поддержка USB.

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

Бутлоадер гарантированно активируется нажатием на кнопку сброса. Замечу, что в большинстве случаев нажимать  ее не придется, ограничиваясь командой Upload из меню File ArduinoIDE. Перед началом загрузки среда инициирует сброс через USB, но тут есть тонкий момент - чтобы это сработало в плате с единственным MCU, необходима поддержка в функционирующем в данный момент скетче.

В принципе - все логично. Если раньше старт бутлоадера осуществлялся через линию DTR, физически подключенную к линии сброса MCU, то теперь такой возможности нет: если скетч завис намертво (предусмотрительно запретив перед этим прерывания), придется вам все-таки нажать на кнопку сброса руками. Однако, если до этого момента туда был загружен и нормально работал какой угодно скетч - встроенный в ядро Arduino обработчик самосброса "подхватит" запрос по USB и вызовет бутлоадер. В документации на ATmega32u4 сообщается, что передача управления бутлоадеру возможна и при обнаружении сброса шины USB, но Arduino использует создание магической ситуации "открытый на 1200 бод порт был закрыт".

ATmega32u4



Приглядимся повнимательнее к самому MCU (разумеется, при помощи даташита). ATMEL выпустил его только в SMD-исполнении, но зато сразу в корпусе TQFP44, что по сравнению с текущим Arduino UNO SMD на ATmega328P-AU в корпусе TQFP32 дает надежду на некий прирост числа пинов.



Чтобы окончательно расставить точки над ё, я набросал небольшую таблицу:

ПараметрATmega328P-AUATmega32u4-AU
Flash32K32K
SRAM2K2.5K
EEPROM1K1K
Пины
универсальные
2326
JTAGнетесть
USBпрограммный/Low Speedаппаратный 2.0 Full/Low Speed
PLLнет32..96 МГц, таймер 
Таймер 8-битный21
Таймер 16-битный12
ШИМ6 каналов4+4+6
АЦП8 каналов12 каналов
USART11
SPIестьесть

Как видите - и вправду чуть лучше. Массу новых функций привносит USB - в частности, на кристалле поселился PLL. Его можно заставить работать вместе со скоростным таймером или ШИМ-каналом.

Под программным USB для ATmega328 я понимаю V-USB от Objective Development, о которой я неоднократно писал. С одной стороны - нельзя сказать, что программный USB уж такой игрушечный, но и аппаратная поддержка FullSpeed - довольно неплохо, особенно в плане совместимости.

ШИМ-каналы у 32u4 могут быть не только строго 8-битными, но произвольной разрядности от 2 до 16 бит. Запись 4+4+6 символизирует 4 восьмибитных, 4 шестнадцатибитных и шесть высокоскоростных 10-битных каналов. Если рассматривать это с точки зрения Arduino - мы получаем в Leonardo плюс один PWM-пин.

Забегая вперед, обращаю внимание на то, что  USART и USB естественным образом занимают разные пины - в отличие от Duemilanova или UNO, где обмен по USART автоматически означает прием/передачу по USB.

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

Вроде бы основные общие моменты кратко разобраны. В сущности, платы MKBoard / Metaboard - это некие предшественники ATmega32U4-плат, построенные по тому же принципу. Перед тем, как переходить к Leonardo, рассмотрим чуть подробнее существующие платы на ATmega32u4.

Teensy

Сейчас существуют два варианта Teensy, все они строятся на MCU ATMEL с поддержкой USB - Teensy 2.0 на 32u4, а Teensy++ 2.0 - на AT90USB1286:



Teensy поставляется с собственным прошитым bootloader-ом, исходников к которому - нет. Зато есть описание протокола обмена и исходники утилиты командной строки, которая по этому протоколу взаимодействует с бутлоадером. Сам бутлоадер занимает всего 512 байт, так что для скетчей остается 32256 байт свободного места.

Светодиод на этой плате подключен к пину PD6 - он же будет digitalPin6 в режиме совместимости с ArduinoIDE. При этом нумерация пинов для скетчей будет следующей:



Не считая казуса с закрытыми исходниками бутлоадера, это отличная плата - поддерживается работа USB в режиме последовательного порта, мыши, клавиатуры, джойстика, MIDI, MASS STORAGE. Поскольку появилась она раньше остальных, то уже успела приобрести расширения синтаксиса по сравнению со стандартными библиотеками Arduino, например Serial.dtr() или Serial.rts(). Да и поддержка Arduino 1.0 уже есть, а значит проект более чем жив ;)

Freeduino 32u4


По сути - это копия платы ATmega32u4 Breakout board+ от ladyada, немного улучшенная в схеме подключения к USB. Идея - та же, что и у Teensy, но применяется  бутлоадер с открытым исходным кодом. Видимо, по этой же причине он занимает все и требует для активизации обязательного нажатия на кнопку. В бутлоадере реализован протокол avr109 - соответственно, для его программирования можно использовать avrdude. После нажатия, в течение ~10 секунд бутлоадер будет готов к приему скетча, сообщая об этом при помощи светодиода "BOOT", подключенного к PE6 (второй светодиод просто включен в цепь питания).

Положительный момент - загрузка происходит практически моментально, программирование всей свободной памяти занимает около 2 сек. И если 28К все-таки не хватает, авторы предлагают воспользоваться программатором (отлично подойдет, например, USBasp) - благо присутствует вилка программирования ISP6.

Для работы с платой в ArduinoIDE можно инсталлировать окружение Teensy, слегка изменив  boards.txt, переписав avrdude более свежей копией, и заменой для порядка VID/PID и дескриптора USB.  Подробно про это написано здесь. Забегая вперед, замечу, что процесс добавления платы в окружение ArduinoIDE 1.0 значительно проще.

Leonardo

На всеобщее обозрение в блоге Arduino была вывешена эта картинка:


Вот так выглядит увеличенный Леонардо:



Стандартный форм-фактор Arduino, но присмотритесь внимательнее: число пинов на верхней левой колодке увеличилась с 8 до 10, а на  нижней левой - с 6 до 8.  То есть - и сверху, и снизу добавлено по два пина. Да и в ширину плата добавила пару-тройку миллиметров...



Попытки расширить нижнюю левую колодку уже предпринималась командной Seeedstudio - они поместили туда два дополнительных входа АЦП, которые присутствуют в SMD-корпусе ATmega328:



Не думаю, что Arduino-вцы скопируют это решение, поскольку заявленное число аналоговых пинов - по-прежнему шесть (см. последнее число на картинке, однако на той же картинке написана откровенная ерунда - например, что в 32u4 SRAM размером 3.3К).

Бутлоадер Arduino Leonardo занимает 2К.

С точки зрения ArduinoIDE, Leonardo имеет 18 цифровых универсальных пинов и 6 аналоговых. Пины с аппаратной поддержкой I2C переехали - теперь это digital3 (SCL) и digital2 (SDA). Пины с поддержкой SPI - с 14 по 17, логично что они и должны попасть на колодку ISP6, за исключением пина №14 - (PB0 или SS), к которому подключен светодиод. Светодиодов у Leonardo более чем достаточно: RX, TX, L - расположенные на портах B0, D5 и C7 соответственно. L по-прежнему подключен на digital13, RX - к digital14, а вот TX почему-то не имеет соответствия в таблице пинов. Неясно, связано ли это как-то с присутствием пинов на внешних колодках; но быть может что-то прояснится после оглашения "изменений в стандартной раскладке колодок Arduino" - найти текущее расположение на официальном сайте не удалось, а все существующие знания приходилось черпать напрямую из board layout-ов официально выпущенных плат.

С точки зрения программирования, для обмена через USB по-прежнему используется Serial. Но USART в этом участия уже не принимает - чтобы обмениваться именно через пины RX/TX, надо использовать Serial1. Разделение USB и USART  - одно из существенных преимуществ платы, по сравнению с Duemilanova и Uno.

При обмене через USB постоянно помаргивают светодиоды RX/TX, но сам факт того, что RX одновременно закреплен за SS, никак не влияет на работу SPI - поддержка этой шины в ArduinoIDE просто инициализирует пин SS в OUTPUT/HIGH и больше "не трогает" - если необходимо организовывать обмен с несколькими slave-устройствами, роль SS может исполнить любой цифровой пин. 

Leonardизация Freeduino 32u4

А что, вообщем-то, мешает превратить Freeduino 32u4 (или любую другую плату с одним 32u4 "на борту") в Leonardo? По большому счету - ничего. Гораздо удобнее не нажимать на сброс всякий раз при загрузке скетча и иметь в запасе два лишних килобайта памяти программ. 

Теоретически, для этого надо всего лишь создать правильную раскладку-соответствие пинов Freeduino 32u4 и Leonardo:
Свой выбор именно такой раскладки я объясняю двумя моментами: цифровые пины 0 и 1 всегда закреплялись за последоватльным портом, а пин 13 - за светодиодом L. Поскльку нет светодиодов RX и TX, можно задействовать PD5 и а) получить дополнительно еще один цифровой пин 18 б) сохранить функции и нумерацию пинов SPI как в Leonardo в) сохранить последовательную нумерацию пинов с 13 по 18. Взамен приходится "жертвовать" пином 12, который неожиданно занял место между последним (digital18) и первым (digital0). Тем не менее, если кому-то захочется все исправить и нарисовать более удобное расположение - милости прошу в форум ;)

Вот, что получилось: freeduino32u4-variant-arduino1.0rc1.tar.gz

Нужно распаковать файл в arduino-1.0/hardware/arduino и исправить boards.txt, добавив туда содержимое файла boards.txt.add:

leonardo1.name=Freeduino 32u4
leonardo1.upload.protocol=arduino
leonardo1.upload.maximum_size=30720
leonardo1.upload.speed=1200
leonardo1.bootloader.low_fuses=0xde
leonardo1.bootloader.high_fuses=0xda
leonardo1.bootloader.extended_fuses=0xcb
leonardo1.bootloader.path=diskloader
leonardo1.bootloader.file=DiskLoader-Leonardo.hex
leonardo1.bootloader.unlock_bits=0x3F
leonardo1.bootloader.lock_bits=0x2F
leonardo1.build.mcu=atmega32u4
leonardo1.build.f_cpu=16000000L
leonardo1.build.core=arduino
leonardo1.build.variant=freeduino32u4

Но есть одна несостыковка, которую надо пофиксить именно в ядре - это касается  аппаратного  ШИМ, который для ATmega32u4 не будет работать на трех пинах из заявленных семи. Причина - ошибки в ядре, которые, видимо, будут исправлены синхронно с выпуском новой платы. Чтобы решить задачу в рамках текущей ArduinoIDE, надо загрузить исправленное core: freeduino32u4-core-arduino1.0rc1.tar.gz и распаковать его в arduino-1.0rc1/hardware/arduino/, заменив существующее cores/arduino на новое.

Все, готово! Мы получили возможность поработать с Leonardo еще до выхода оригинальной платы. Если бы не публикация ArduinoIDE RC1, это было бы невозможно, за что моя отдельная признательность авторам ;)

26.09.2011

ArduinoIDE 1.0 rc1

Первый кандидат в релизы на звание ArduinoIDE 1.0 стал доступен для широкого скачивания еще 17.09.2011. Возможно, существенных изменений уже и не будет, поэтому я решил забежать немного вперед и полюбоваться на наше ближайшее будущее ;)

Итак, начиная с версии 1.0 файлы со скетчами получили новое расширение .ino. Не знаю, как у вас, а у меня сразу стойкая ассоциация с Брайаном Ино ;) Смысл перехода на новое расширение - еще раз подчеркнуть, что это не скетчи processing-а (а стало быть, и расширение у них своё собственное). Означает ли это, что надо бросаться и судорожно переименовывать все скетчи? Естественно, нет ;) Скетчи со старым расширением будут по-прежнему загружаться без проблем, и только при сохранении ArduinoIDE вежливо поинтересуется:



(этот робкий вопрос, кстати, можно отключить в настройках, если хотите).

Второе значимое изменение: теперь для Arduino-совместимой платы можно определять разные варианты расположения пинов. Определения пинов вынесены в отдельные файлы в общей структуре каталогов, а в синтаксис описания плат (boards.txt) добавили строку .build.variant, указывающую, какое определение пинов подключать при компиляции.

Появились интересные макросы, помогающие сделать скетч более универсальным. Например,  чтобы выяснить прямо по ходу программы, поддерживает ли пин PWM, можно использовать  digitalPinHasPWM(номер). Или, если надо понять максимальное число цифровых пинов - теперь оно описано константой NUM_DIGITAL_PINS. Спору нет, повышение универсальности скетчей налицо, но они-то, как правило, намертво привязаны к конкретной схеме - вот и получается, что эта фича для библиотек. В этом 1.0rc1 мне удалось найти определения вышеописанных макросов только для плат класса Uno и Mega.

Библиотеки

Кстати, писателям библиотек придется потрудиться - например, WProgram.h отныне переименован в Arduino.h. Я уже просто повсеместно наблюдаю, как люди бренчуют код своих библиотек в ветки "arduino-1.0-compatible". Так что если вы написали и поддерживаете библиотеку - самое время задуматься об обновлении.

Лайма Фрай (известная также в качестве ladyada) усовершенствовала библиотеку для карт SD - теперь можно открывать несколько файлов одновременно и ходить по подкаталогам.

В основную библиотеку Ethernet добавлена поддержка DNS и DHCP, переименованы классы для сервера и клиента TCP, а также для UDP. Уже одно это повлечет за собой неизбежные правки в скетчах, использующих Ethernet library, но это еще не всё! В "серверном" скетче теперь нельзя проверять подключился ли клиент конструкцией if (client != NULL) - надо писать if (!client).

Проведена также и "идеологическая" работа по правильному наследованию - код для работы UDP и библиотека Wire наследуют потоковому классу Stream. Это позволяет прозрачно использовать для обмена его функции read(), write(), print() и println(). Опять-таки - теоретически - меньше причин менять код, например, при переходе от обмена по Serial к обмену по UDP. Да и сам Stream расширен дополнительными функциями, помогающими в парсинге входного потока информации - find(), findUntil(), parseInt(), parseFloat(), readBytes(), readBytesUntil() и setTimeout(). 

Библиотека Serial теперь не блокируется вызовом write - это значит, что данные кладутся в передающий буфер и работа скетча продолжается, а непосредственная передача происходит по мере освобождения буфера, по прерыванию. Изменился смысл Serial.flush() - теперь он не уничтожает лежащие в приемном буфере данные, а будет ждать, пока не опустошится передающий! (прямо скажу, я бы интуитивно не догадался). Serial.print(byte) печатает символьное представление числа - теперь Serial.print(65) выведет на печать '65', а не 'A'. Чтобы было именно 'A' - надо использовать Serial.write(). Появилась возможность определить callback по приходу  данных в приемный буфер: serialEvent(). Ура, теперь скетчу теперь не надо "тупо" пуллить входной буфер через Serial.available() в ожидании данных, а можно заниматься чем-то более полезным.

Произошло переключение со старой реализации софтварного последовательного порта SoftwareSerial на давно существующую более продвинутую NewSoftwareSerial от Mikal Hart.

Обновлена Firmata до версии 2.3 - теперь аналоговые пины в цифровом применении нумеруются как в Arduino - с цифры 14.

ArduinoIDE

Нас ждут традиционные украшательства - типа новых иконок, цветовой схемы и окошка about. 



Есть и более полезные нововведения: URL-и в комментах стали кликабельны, компиляция и загрузка обзавелись собственным прогресс-баром, в строке статуса пишется тип платы и текущий порт.



Подробный вывод при компиляции теперь не надо включать при помощи текстового редактирования preferences.txt, он заслужил собственный чек-бокс в окне настроек:


(по этому поводу как раз сегодня в форуме спрашивали, кстати). 

И, наконец, самое важное - если удерживать клавишу Shift при нажатии на иконку кнопки Upload, скетч будет заливаться не обычным образом - через bootload-ер - а через программатор (надо предварительно выбрать тип программатора в меню Tools -> Programmer).

Ну и напоследок - в список стандартных программаторов добавлен USBasp, а в состав пакета включена последняя версия "дудки" - 5.11 (та самая, где для него добавили поддержку TPI), а в качестве имени программатора ему теперь сообщается "-c arduino". Это, наверное, самое ожидаемое изменение - для меня лично ;)

23.09.2011

И снова о LoLShield

Спешу довести до владельцев LoLShield информацию о новой библиотеке - LoLShieldRus. Использовать библиотеку с сайта https://code.google.com/p/lolshield/ сильно не рекомендуется, сейчас объясню, почему.

Сам автор - Джимми Роджерс - давно уже переключился на другие проекты,  а доработкой больше всех занимался Matt Mets, который, впрочем, тоже переключался на другие проекты, и вероятно именно поэтому на Google Code можно скачать только версию 0.2 оригинальной библиотеки. Впрочем, Мэтт периодически возвращался и делал какие-то изменения, но - на GitHub:
  • в июле 2010 он пофиксил ошибку с PROGMEM;
  • тогда же - добавил экспериментальные функции изменения яркости (так называемый "grayscale support"), утилиты для конвертации фонтов;
  • в январе 2011 он удалил массу функций из основной ветки - и яркость, и двойной буфер;
  • в феврале 2011 он пофиксил ошибку, из-за которой библиотека не работала с ATmega1280/2560;
  • в июле 2011 немного упорядочил структуру файлов в проекте.
Для поддержки русского языка я решил перенести именно его код в свой проект, но не стал форкаться: есть у меня кое-какие идеи, связанные с будущим развитием и библиотеки, и шилда. Пока же никаких серьезных изменений: присутствует фонт с заглавными русскими символами (для экономии флеш-памяти, идентичные по написанию символы заимствуются из английского алфавита), а также пример для вывода русского текста в виде бегущей строки.


17.09.2011

Новости Arduinoстроения

Команда Arduino объявила, что очень скоро произойдет выпуск новых плат - но на этот раз они не будут ставить общественность перед свершившимся фактом, а собираются пройти финальные шаги вместе с коммьюнити, чтобы их поправили в случае чего.

Arduino 1.0

Наконец-то API и перестанет меняться и будет заморожен. Это же относится и к расположению коннекторов на плате, куда будут внесены небольшие изменения для большей универсальности. Сама ArduinoIDE 1.0 rc1 уже доступна для скачивания, по традиции подробно разберу в отдельном посте.

Arduino Leonardo

Это будет новая простенькая плата на ATmega32u4. По размеру и разъемам она будет как Uno, но с более простой схемой (может быть, там и будет всего один МК, а не два? пока неясно). С программной стороны она будет иметь драйвер мыши, клавиатуры и последовательного порта. 

Arduino Due


Это будет первая официальная ARM-плата на 32-битном процессоре с ядром Cortex M3. По традиции, выбран ATMEL-овский чип SAM3U, работающий на тактовой частоте 96 МГц, имеющий 256 Кб Flash, 50 Кб SRAM, 5 линий SPI, 2 интерфейса I2C, 5 UART, 16 аналоговых входов с 12-битным разрешением и многое другое.



Плата будет выпущена небольшим тиражом и выложена в store.arduino.cc для желающих принять участие в процессе отладки софта/харда. Для широкой публики она будет доступна ближе к концу 2011. 

Arduino WiFi shield

Ну, тут все ясно из названия - плата добавляет возможность коммуникации по WiFi. Однако, в отличии от всех остальных существующих в настоящий момент на рынке шилдов на этом не будет использован готовый модуль. Авторы твердо решили, что это будет комбинация микромодуля WiFi и процессора AVR32, реализующего весь стек TCP/IP со свободной памятью для добавления новых протоколов и возможностью каких-то модификаций. Кроме того, авторы обещают попытаться сделать так, чтобы миграция кода, использующего EthernetShield была максимально простой.

Ну, готовы к изменениям? Редакция будет внимательно следить за развитием событий ;) 

01.09.2011

BlinkMuino

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

Название: BlinkMuino
Процессор: ATtiny45/85
Тактовая частота: 8 МГц
Совместимость с ArduinoIDE: ограниченная
Совместимость с Shield-платами: нет
Авторы: Tobot
Страница проекта: http://todbot.com/blog/2011/03/22/blinkm-smart-led-as-the-smallest-arduino/
Дата первого упоминания: 22.03.2011




Эта крохотная плата называется BlinkM - или "умный" светодиод. Внутри находится ATtiny45 или ATtiny85 c прошивкой, способной изображать разнообразные световые эффекты на встроенном сверхъярком RGB-светодиоде. Но более того - разработчики предоставляют специальный Sequencer - софт, предназначенный для создания произвольных эффектов. В наличии библиотеки для языков программирования Java, C, Processing - так что поддержка весьма серьезная. Однако сразу замечу - лицензия на эту прошивку для персонального (читаем - некоммерческого) использования, и в исходниках они ее не раздают.

Соответственно, поэтому и родилась идея скрестить ее с Arduino. BlinkM+Arduino = BlinkMuino. Что мы имеем?
  • размер платы - всего 15х15 мм 
  • тактовая частота 8 МГц
  • 8К Flash (4К для ATtiny45)
  • 512 байт RAM (256 байт на ATtiny45)
  • 512 байт EEPROM (256 байт на ATtiny45)
  • 5 универсальных пинов ввода-вывода
Пины распределяются так:
  • 3 пина для сверхъярких светодиодов в едином RGB-корпусе
  • 2 цифровых пина  
  • 1 аналоговый пин (совмещен с цифровым)
Теоретически, если не нужно иллюминации, можно высвободить еще три универсальных пина за счет RGB-светодиода - они могут быть и аналоговыми, и цифровыми. Плохая новость состоит в том, что аппаратного последовательного порта у нас нет, скетчам придется довольствоваться эмулированным - SoftwareSerial. А для заливки скетчей, увы, придется использовать ISP-программатор:

В роли программатора может выступить и Arduino со скетчем ArduinoISP:


Дальше надо добавить поддержку BlinkMuino в ArduinoIDE - как это сделать для ATtiny подробно расписано здесь, единым файлом (дополнительное core, добавки в boards.txt) можно скачать тут. После этих манипуляций в скетчах можно будет использовать следующие конструкции Wiring:
  • pinMode()
  • digitalWrite()
  • digitalRead()
  • analogRead()
  • analogWrite()
  • shiftOut()
  • pulseIn()
  • millis()
  • micros()
  • delay()
  • delayMicroseconds()
Назначение пинов определяется следующим образом:


На видео ниже автор подробно объясняет принципы работы и в самом конце демонстрирует работу скетча, который отслеживает потенциометр и поварачивает на соответствующий угол серво.


Я согласен с идеей по поводу компактности - часто получается, что с успешной стадии Arduino-прототипизации проект переходит в следующую стадию - практической реализации. Для этого автор обычно берет в руки паяльник и воспроизводит схему Arduino minimum на макетной плате, избавляясь таким образом от всего лишнего. Остается по большому счету только сам MCU и резонатор на 16 МГц. И вот именно в этом случае применение одного ATtiny в DIP-корпусе со встроенным резонатором может выиграть пару-тройку квадратных сантиметров. Зато придется повозиться со стандартными библиотеками - большинство из них потребует небольшой правки. Стоит ли оно того? Тут каждый решает сам ;) В конце концов - чем больше вариантов, тем лучше. Стоит BlinkM менее 15 USD.

Использованы материалы со страницы http://code.google.com/p/blinkm-projects/wiki/BlinkMuino, картинки распространяются под лицензией CC-BY-NC 2.0