Показаны сообщения с ярлыком ArduinoIDE. Показать все сообщения
Показаны сообщения с ярлыком ArduinoIDE. Показать все сообщения

30.03.2014

А все-таки она вертится!

Мельком прочитав проскочившую в октябре прошлого года новость по поводу выхода очередной Arduino-совместимой платы Intel Galileo, я почему-то не особенно и удивился. Но когда узнал, что она получила официальную поддержку от Arduino, не смог удержаться и заказал.



17.04.2013

ArduinoIDE 1.0.4

Новая ArduinoIDE 1.0.4 вышла 11.03.2013, и почти весь ее смысл - исправление ошибок.

Лично мне видится три главных момента:

  • Добавлена новая библиотека GSM, для работы с Arduino GSM Shield. С ее помощью можно не только передавать данные с использованием конструкции Client/Server по аналогии с Ethernet, но и отправлять/получать SMS-сообщения, а также голосовые вызовы;
  • Все драйверы собраны в один пакет, с цифровой подписью для Windows 8. По идее, это упрощает процесс установки, избавляя вас от лишних вопросов и подозрений со стороны операционной системы;
  • Официально исправлены накопившиеся (видимо, за все время) ошибки в бутлоадере Mega2560. Ошибки это были знаменитые, ко многим давно существовали патчи - взять, например, ошибку с незагрузкой скетча, в котором встречается комбинация "!!!". Разумеется, аналогичные изменения войдут и в бутлоадер, прошитый во Freeduino Mega2560.
Впереди - слияние ветки 1.5.x и 1.0.x, но когда именно оно произойдет, пока сказать трудно...

21.12.2012

ArduinoIDE 1.0.3

Вышла очередная версия ArduinoIDE 1.0.3. Самым значимым в списке изменений идет новая плата - Arduino Esplora (Leonardo-совместимая, на основе ATmega32u4):


В отличие от предыдущих плат, на этой есть сенсоры: фоторезистор, акселерометр, датчик температуры. Также есть четыре кнопки, аналоговый джойстик, пьезоизлучатель, трехцветный светодиод и линейный потенциометр. Разъемы для стыковки с LCD и несколько входов / выходов тоже присутствуют: 

Рулить всем этим многообразием помогает Esplora Library. Вообще, конечно же - это просто мечта для гаджетоманов-ардуинокопателей, которым не жалко потратить 65 USD. Но перед покупкой все-таки рекомендую пробежаться по Getting Started With Esplora.

Но вернемся к новой версии ArduinoIDE: нас ожидает пара незначительных фиксов, связанных с Leonardo-совместимыми платами. Один касается бутлоадера, другой - массива digital_pin_to_timer_PGM, описанного в variant-файле. 

Первый фикс реализует запуска скетча сразу после подачи питания (точнее, теперь-то это наконец работает). Что до variant-файла, то там банально восстановили кусок массива, пропавший где-то между версиями 1.0.1 и 1.0.2 - потенциально это могло вызывать фатальные неприятности при попытке включить аппаратный ШИМ на тех пинах, которые такой возможности не имели.


Исправления хоть и мелкие, но вполне разумные, поэтому рекомендую владельцам Freeduino 32u4 а) провести обновление поддержки своей платы в ArduinoIDE с помощью нового variant-файла и б) при наличии программатора, прошить новый бутлоадер. Со старым бутлоадером Caterina, естественно, тоже будет работать, но начиная с этого момента во все Leonardo-совместимые контроллеры в нашем магазине по умолчанию будет прошит новый вариант. Так что смело качайте и распаковывайте этот файл в каталог с установленной ArduinoIDE 1.0.3 (не забудьте ее перезапустить, чтобы изменения актуализировались).

В новостях также сообщается и про обновление кода для бутлоадера ATmega8, а также про поддержку скорости 600 бод библиотекой SoftwareSerial.

Словом, типичный релиз под новую плату, в который число случайно вошли несколько изменений.

И, судя по всему, число клонов Leonardo будет расти. Взять, например, новую "женскую" плату от Seeedstudio:



Если присмотреться, то видно несколько моментов:
  • есть колодки пинов и вилка программирования, так что скорее всего предполагается стыковка с шилд-платами;
  • присутствует холдер с батарейкой и переключателем питания - следовательно, возможна автономная работа и трехвольтовое питание платы/схемы;
  • на плате - ATmega328P и FT232RL (авторы утверждают, что в продажу пойдет плата  именно с ATmega32u4);
  • присутствует пара SMD-светодиодов ;)
Плата все еще не имеет названия, и если на языке вертится что-то подходящее - напишите им немедленно! ;)

01.12.2012

ArduinoIDE 1.0.2

В конце октября - начале ноября произошло сразу несколько событий: была официально выпущена в продажу и почти сразу же распродана Arduino Due, вышла ArduinoIDE 1.5 специально для поддержки этой самой Due, затем вышла ArduinoIDE 1.0.2 - не поддерживающая Due, но содержащая много полезных фиксов для платы Leonardo.

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.

02.05.2012

Анонс

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

15.03.2012

ArduinoIDE в Ubuntu 11.10

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

Например, после апдейта своей Ubuntu до 11.10, я обнаружил у себя такие версии:
  • binutils-avr: 2.20.1
  • gcc-avr: 4.5.3
  • avr-libc: 1.7.1
В то время как в комплекте с ArduinoIDE 1.0 для Windows, который и поныне можно скачать на сайте arduino.cc, версии выглядят более консервативно:
  • binutils-avr: 2.19
  • gcc-avr: 4.3.2
  • avr-libc: 1.6.4
Что с этим делать и как бороться?...

14.02.2012

Проблемы Ethernet в ArduinoIDE 1.0

Только что столкнулся с проблемами использования Ethernet Shield на W5100 в рамках ArduinoIDE 1.0. Великолепно до этого работавшие скетчи решительно отказались работать, что меня привело в панику слегка озадачило.

Формально, чтобы перенести скетч со "старых" ArduinoIDE 0022/0023 под 1.0, надо исправить названия классов "Server" и "Client" на "EthernetServer" и "EthernetClient" соответственно. Идеологически, классы Server и Client теперь сделаны полностью абстрактными и перенесены в ядро Arduino. И поскольку они не имеют ни одной реальной функции, библиотека должна  породить от них свой класс, "наполнив" его реальным содержимым. Думаю, делается это с прицелом на будущее, но предсказывать его пока не берусь ;)

К сожалению, даже после успешной компиляции, надо обязательно залить скетч и проверить его работу. Скорее всего, проблемы (если они действительно есть) вскроются сразу же - речь идет о неверном обмене с  Ethernet-чипом Wiznet W5100. Первым делом, открывайте файл arduino-1.0/libraries/Ethernet/utility/w5100.h и ищите в нем строки:

#define __SOCKET_REGISTER16(name, address)                   \
  static void write##name(SOCKET _s, uint16_t _data) {       \
    writeSn(_s, address,   _data >> 8);                      \
    writeSn(_s, address+1, _data & 0xFF);                    \
  }                                                          \
  static uint16_t read##name(SOCKET _s) {                    \
    uint16_t res = readSn(_s, address);                      \
    res = (res << 8) + readSn(_s, address + 1);              \
    return res;                                              \
  }

Вместо них поставьте полностью аналогичные (но, удивительным образом - работающие):

#define __SOCKET_REGISTER16(name, address)                   \
  static void write##name(SOCKET _s, uint16_t _data) {       \
    writeSn(_s, address,   _data >> 8);                      \
    writeSn(_s, address+1, _data & 0xFF);                    \
  }                                                          \
  static uint16_t read##name(SOCKET _s) {                    \
    uint16_t res = readSn(_s, address);                      \
    uint16_t res2 = readSn(_s,address + 1);                     \
    res = res << 8;                                             \
    res2 = res2 & 0xFF;                                         \
    res = res | res2;                                           \
    return res;                                              \
  }

(это исправление взято отсюда: http://code.google.com/p/arduino/issues/detail?id=605)

В большинстве случаев это помогает; мало того - говорят, что некоторые PPA в Ubuntu уже содержат пакет "arduino" с этим патчем, но давать на них ссылки не буду - я не понимаю смысл создания пакета для программы, которая великолепно работает, будучи распакована в одну папку. Гораздо удобнее качать и ставить дистро непосредственно с arduino.cc, не мучаясь вопросами "а чой-то они там наменяли-то?!"

Тем, у кого после вышеописанного патча все равно не заработает - рекомендую посмотреть на версию кросс-компилятора gcc-avr в составе вашего дистрибутива Linux. Если это, например, 4.5.3 - причина может быть в этом, и стоит позаботиться об откате на 4.3.2 или создании собственного окружения. Возможны разные варианты действий, но я пока выбрал наиболее тупой простой - развернул в виртуальную машину под Windows дистрибутив 0023 и временно работаю в нем. И вообще - пользователям Windows в этом плане проще, поскольку хоть их дистрибутив ArduinoIDE и выглядит чрезмерно "пухленьким", в него уже включен порт avrgcc - WinAVR, что драматически повышает стабильность по сравнению с Linux, где пакет gcc-avr "приходит" вместе с дистрибутивом ОС.

Тем, кто уже начал использовать включенные в состав ArduinoIDE библиотеки DHCP, стоит обратить внимание на другой патч: http://code.google.com/p/arduino/issues/detail?id=742

Сейчас при формировании DHCP-запроса, код из библиотеки Ethernet не совсем корректно формирует уникальное имя хоста, генерируя псевдослучайный суффикс в том числе и из "непечатных" символов: это может создавать потенциальные проблемы при работе DNS.


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 можно здесь.

18.11.2011

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 или сразу же финальный релиз? Или все-таки финальный релиз будет под новый год? В любом случае, "редакция будет следить за развитием событий" (с) ;)

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". Это, наверное, самое ожидаемое изменение - для меня лично ;)

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 была максимально простой.

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

12.01.2011

ArduinoIDE 0022

В ArduinoIDE 0022 нет существенных внешних изменений, поэтому начну с самого главного - ядра. Почему мне это особенно близко, легко понять, если пролистать вторую статью из цикла "Arduino из BM8036", в которой я адаптировал ядро из релиза 0019 для процессора ATmega32.

Изменена идеология ветвления в ядре, учитывающая тип процессора. Собственно - раньше это были макросы #if defined(__ATmega8__) - но со временем число официальных МК  росло, народ портировал ядро на другие МК семейства AVR, злостно чертыхаясь в процессе правки этих самых #if. Дело в том, что у каждого процессора свой набор таймеров, отвечающих за поддержку аппаратного ШИМ на определенных его ногах. И вот, революционная идея: вместо того, чтобы проверять тип процессора (подается gcc при компиляции через ключ -mmcu), проверяют определение регистров! Правда, это чуть-чуть расходует память программ - 14 байт для ATmega328 и 40 для ATmega1280, но зато означает, что теперь портирование на другие МК будет проще. Что ж, подождем всплеска Arduino-подобных проектов :)

Далее, менее значительные исправления:

  • поправили вычисление скорости последовательного порта - проявлялось только на Uno, если инициализировать скорость обмена в 57600;
  • исправили неверную генерацию звука через Tone() - теперь звук не плавает;
  • не компилялась работа с EEPROM под MacOS и Windows в платах Mega2560 - был добавлен кастомный eeprom.h;
  • немного оптимизирован код последовательного порта в плане вычисления указателя буфера - это позволило поднять максимум скорости до 115200;
  • поправлена работа pulseIn - теперь таймаут действует не только на ожидание завершения предыдущего импульса и начала текущего, но и на окончание - раньше бесконечный импульс подвешивал вызов.
Добавлена функция String.toInt, а также макросы определения типа символа - isNumeric(), isControl() и т.п., макросы простых преобразований - toUpperCase() и т.д.

Ряды официальных библиотек пополнила SD library

В плане изменений самой IDE в очередной раз улучшили поведение окна Serial Monitor-а, пофиксили режим копирования в формате html, заменили библиотеку регулярных выражений и поставили компиляцию скетча перед компиляцией ядра, должно ускорить процесс поиска ошибок.