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

30.01.2014

Freeduino 32u4 R6

Вышла очередная ревизия нашей платы на ATmega32u4, уже шестая по счету.


(слева направо - Freeduino 32u4 R4, Freeduino 324u4 R6, Freeduino Nano)

Основная борьба шла за уменьшение размеров, поскольку плата в первую очередь предназначена для беспаечной макетки. Ура, теперь будет закрыт на один ряд отверстий меньше (и по вертикали, и по горизонтали). Разъем USB тоже уменьшился (mini -> micro).

К сожалению, продолжать уменьшать размеры мешает осознанная необходимость размещать удобочитаемую шелкографию с названиями пинов (без нее придется подглядывать в картинку с обозначениями). Не исключаю, что в будущем перейдем на QFN-корпус и получится что-то наподобие Arduino Micro. Напоминаю, что  сейчас на плате отсутствует вход VIN, и питать её можно только от USB или источника +5В.

Немного модифицирован бутлоадер. Нам пришлась по душе идея SparkFun: одиночное нажатие на сброс теперь перезапускает скетч, а вот для активизации бутлоадера надо нажать на сброс дважды:


Это удобно, если надо быстро перезапустить скетч, не теряя 8 секунд на ожидание завершения бутлоадера. 

Для владельцев предыдущих ревизий платы, желающих прошить новый бутлоадер Freeduino32u4: это можно сделать через ArduinoIDE или через avrdude:

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 3 -B 1.1 -p atmega32u4 -F -U flash:w:file.hex -U lock:w:0x2f:m

Конечно, для этого потребуется программатор (строки программирования приведены для AVRDoper).

25.07.2013

Freeduino One c microUSB

Однажды, в комментах мне попеняли на "любовь к большим разъемам USB". В другой раз услышал в личной беседе пожелание использовать microUSB, потому что "к нему проще найти кабель".

"Ну что же..." - подумал я, и:


Старшие товарищи тут же меня обсмеяли, заметив, что microUSB - крайне ненадежный и хлипкий разъем, который обязательно сломается или сгорит. То ли дело, например, такой:


Но если серьезно, меня сильно порадовало высвободившееся на плате место, это дает определенный простор для творчества (в прямом и переносном смысле).

07.06.2013

TV-out для Arduino

Если вы когда-нибудь почувствуете, что вашему Arduino-проекту стало тесно на алфавитно-цифровом дисплее 1602, обязательно обратите внимание на проект TellyMate Shield. Он позволяет выводить ту же алфавитно-цифровую информацию на обычный телевизор, через видео-вход.

При определенном везении можно заполучить весьма внушительных размеров дисплей (если телевизор имеет прилично дюймов в диагонали), работающий в режиме телетайпа  38 x 25 знакомест. Впрочем, бросив первый взгляд на схему, ловишь себя на мысли о розыгрыше. В самом деле:


Обычный ATmega8 на тактовой частоте 16 МГц формирует два компонента видеосигнала, которые смешиваются нехитрой схемой из двух резисторов и двух диодов. Группой переключателей S1 устанавливаются режимы работы; согласующий резистор 75 Ом подключается через перемычку и добавлен, скорее, для универсальности (думаю, в большинстве случаев не понадобится).



Arduino выводит информацию для отображения через последовательный порт - пины RX/TX. Если вас смущает, что по ним же происходит загузка скетча и во время этого процесса на экране появляется некая "ерунда", можно уйти на любой пин с помощью библиотеки SoftwareSerial. Поддерживаются разные скорости, а также есть возможность автоопределения. Простейший скетч выглядит так:


        Serial.begin(57600); //57k6 baud
        Serial.println("Hello, world!");


К сожалению, изображение формируется исключительно черно-белое. Зато внутри имеем полноценный знакогенератор кодовой страницы 437, в котором есть псевдографика:


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


Кроме вывода обычных символов, поддерживаются так называемые ESCAPE-последовательности, которые управляют курсором, удваивавают высоту и/или ширину символов и даже переключают банки шрифтов и переопределяют символы (что, впрочем, возможно только на ATmega328P, где памяти гораздо больше, чем у ATmega8). Таким же образом можно получить версию прошивки и прочую диагностическую информацию.

Чем-то все это напоминает LoL-Shield, особенно приложениями - взгляните на список доступных .ino. Здесь найдется не только классика Life и Snake, но и более изощренные - Maze и даже простейший "графический редактор"!

Поскольку все материалы доступны и открыты для доработки, мы решили немного поэкспериментировать и создать на базе этого шилда русифицированный вариант. Имя "TellyMate", подобно Arduino, является торговой маркой - поэтому пришлось назвать наш вариант Freeduino Teleсhat:


Все детали - PTH, поскольку шилд задумывался изначально в формате кита для самостоятельной сборки - и что может быть лучше, чем собрать всё самостоятельно? ;) Пины RX/TX имеют перемычки под пайку с обратной стороны платы, так что при желании их можно перерезать и подпаять к любым другим пинам. Аналогичным способом  отключается и кнопка сброса - если не хотите, чтобы МК шилда сбрасывался синхронно со  скетчем Arduino.

Краткое руководство по сборке шилда:


Шутка, конечно ;) просто там действительно все элементарно. На howtomakekit.blogspot.ru, как всегда, выложена подробная пошаговая инструкция.

Русифицированный шрифт мы разместили точно таким же способом, что и автор - в виде ссылки на документ в GDocs, копию которого при необходимости можно сохранить у себя. В открытом документе надо зайти на последнюю закладку, генерирующую hex, и скопировать ее содержимое в файл  fontbank0.c, подменив его в исходниках (можно скачать со страницы проекта). После компиляции получите прошивку c поддержкой кодовой страницы 866. Именно она и зашивается в ATmega8, входящие в комплект наборов Freeduino TeleChat. 

Для вывода русского текста потребуется еще кое-что сделать. Как известно, ArduinoIDE хранит все символы в кодировке UTF-8, и для нормальной работы потребуется их транслировать в кодировку 866. Делать это в оригинальной прошивке нам показалось святотатством - авторы очень скрупулезно рассчитали все задержки в коде. Предлагаем самый простой вариант перекодирующей функции:

byte c1 = 0;

void tele_print_char(char cd) {
  byte c = cd;
  if (  c >= 0x80) { // UTF-8 handling
    if (!c1) {
      c1 = c;
    } else {
      if (c1 == 0xd0) { 
       if (c == 0x81) Serial.print(char(0xf0)); // Ё
        else Serial.print( (char) (c - 0x10));
      }
      if (c1 == 0xd1) {
       if (c == 0x91) Serial.print(char(0xf1)); // ё
        else Serial.print( (char) (c + 0x60));
      }
      c1 = 0;
    }
  } else Serial.print(cd);
} 

void tele_print_str(char *s) {
  for(int i=0;i<strlen(s);i++) tele_print_char(s[i]);
}

void setup()
{
  char letter[]="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
  Serial.begin( 57600 ) ;
  Serial.println( "Hello World!" ) ;
  tele_print_str( "Привет, мир!\n\r" ) ;
  tele_print_str( letter );
}

void loop()
{
    // do nothing!
}


Купить шилд в собранном виде или в виде комплекта деталей можно здесь.

Для тех, кто любит почитать оффлайн - про TellyMate упоминается в книге У. Соммера "Программирование микроконтроллерных плат Arduino/Freeduino".

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-светодиодов ;)
Плата все еще не имеет названия, и если на языке вертится что-то подходящее - напишите им немедленно! ;)

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


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

25.02.2012

ATmegaU breakout

По многочисленным  просьбам телезрителей знакомых, выпустил микроплатку (в народе - "брикаут") с ATmega8U2:


Идея создания была навеяна платами USB-Serial Light Adapter от Arduino и ATmega8U2 Breakout от Sparkfun (в итоге за основу был выбран второй вариант). 

С одной стороны - этот девайс с успехом заменяет FTDI friend, исполняя роль USB-TTL конвертера для связи с целевым MCU через UART или программирования в среде ArduinoIDE. С другой -  вполне себе самостоятельная отладочная плата для ATmega8U2, на которой разведены все его пины, а прошивку можно заливать через ISP6 или вообще по USB через DFU (т.е. без использования программатора). 

Некоторые моменты, на которые хотелось бы обратить внимание:

1. Джампер выбора напряжения питания - по умолчанию установлен в +5В. Если есть желание  поработать на +3.3В, можно перепаять - однако в этом случае предельная тактовая частота по паспорту будет ограничена 8 МГц, в результате может потребоваться переключиться  на внутреннюю калиброванную цепочку (надо менять фьюзы,  программатором);

2. Регулятор +3.3В. Он нужен для питания MCU от +3.3В (см. выше) и дополнительно может выдавать его наружу через соответствующий пин - всего до 150мА. Не путайте его с внутренним регулятором ATmega8U2, который служит для формирования правильного напряжения на линиях D+/D-, когда сам MCU питается от +5В. Кстати, если уж выставили Vсс = +3.3В, этот внутренний регулятор обычно отключают - через регистр REGCR,  экономя таким образом немного на энергопотреблении;

3. Предохранитель 500 мА, выручит вашу схему в случае короткого замыкания по питанию, а специальные диоды - уберегут линии D+/D- ATmega от статического разряда.

4. Гребенка выводов совместима с FTDI friend и вообще с кабелями FTDI. Можно особо не задумываясь использовать, например, с Angelino.

5. Кнопка сброса - с одной стороны - как обычно, замыкает RESET на GND. Однако, если в момент сброса линия DTR (она же пин PD7) была подтянута к земле - активизируется DFU. По крайней мере именно так ведет себя DFU в платах Freeduino ONE и Arduino UNO - но при помощи программатора и собственной прошивки это, конечно же, можно изменить.

6. Светодиод STATUS, в чем-то по функциям похожий на светодиод L в Arduino-совместимых платах Arduino - подключен к линии PB4.

Вот так рекомендуется подключать ATmega8/168/328 к этой плате по первому варианту (в режиме конвертера USB-TTL):



R2 (подтягивает DTR к GND) - необязателен при условии, что вы не прикасаетесь к кнопке сброса на ATmegaU (и действительно - зачем прерывать работу вечного двигателя прошивки конвертера USB-TTL?). Небольшой резистор R3, включенный последовательно в линию TX, защищает пин от перегрузки по току в случае, если его ошибочно посадили на VCC или GND с другой стороны (не забывайте - если на встречной стороне другая ATmega - такое можно сотворить и программно).

Если в MCU уже прошит бутлоадер, схему можно соорудить хоть на беспаечной макетке, например так:



В настройках ArduinoIDE надо выставить правильный порт и тип платы - "Arduino Uno"  (пользователи Windows дополнительно устанавливают .inf-файл от Freeduino ONE).

Программирование через DFU можно осуществлять через FLIP или dfu-profgrammer, указывая тип MCU at90usb82 - именно его и заменил (с более, чем скромными усовершенствованиями) ATmega8U2.

Приобрести плату ATmegaU можно здесь, только имейте ввиду, что по умолчанию она продается в комплекте с единственной и ненапаянной вилкой ISP6, все прочие вилки или розетки вам придется выбирать дополнительно, исходя  из своих конкретных потребностей.

Схема:



Репозиторий на github, где можно получить исходники прошивки: https://github.com/a1ronzo/SparkFun-USBtoSerial

19.02.2012

Freeduino Mega 3.0.0

MK90 выпустил новую ревизию Freeduino Mega2560 (соответствует Arduino Mega2560 R3), изменилось следующее:

  1. Разведены четыре дополнительных дырки для bit-bang;
  2. Колодки соответствуют arduino pinout 1.0;
  3. ATmega16u2 в качестве контроллера USB.


Замена ATmega8u2 на ATmega16u2 добавит 8К flash для программ, расширяющих функциональность стандартной прошивки-конвертера последовательного порта - по сути, это просто приглашение к возможности реализаций ваших идей. Кроме дополнительной памяти, предлагаются и дополнительные линии ATmega8u2/16u2 (расположены на Freeduino ONE и Mega2560 одинаково):



В последних версиях Arduino UNO и Freeduino ONE линия DFU уже притянута к GND, поэтому для смены прошивки и входа в режим DFU достаточно кратковременно соединить линию сброса с землей:



После этого, на шине появляется устройство 03eb:2ffa, и можно воспользоваться утилитами FLIP или dfu-programmer (первая больше подойдет владельцам Windows, вторая - Linux). Далее все выглядит аналогично описанию в этой статье, только в качестве типа MCU надо писать at90usb82.  

Всем скептикам, мучающимся вопросом "а зачем менять прошивку в AtmegaU?" посоветую пока этот небольшой блог: http://hunt.net.nz/users/darran. В следующих постах постараюсь осветить тему использования DFU более подробно.

Также, справедливости ради, замечу - в версиях Arduino Uno/Mega2560 R3 применена новая схема сброса:


Авторы окрестили ее термином "более надежная". В принципе - да, если на линии сброса присутствует некоторая емкость - диод D2 помогает быстро ее "обнулить".  Как они набрели на это гениальное усовершенствование, история умалчивает - но копировать его я пока не спешу. 

На всякий случай, еще раз повторюсь, в чем отличие Freeduino от MK90 и Arduino от arduino.cc:
  • оба резонатора Freeduino - кварцевые, у Arduino резонатор основного MCU - керамический, что ухудшает точность вычисления задержек в ваших скетчах;
  • у Freeduino исключены все дополнительные резисторы из схем подключения обоих микроконтроллеров (последовательный 27 Ом и параллельный 1МОм), поскольку они явно лишние (и потенциально вредные);
  • к стабилизатору +3.3В у Freeduino добавлен шунтирующий конденсатор, согласно типовой схеме включения, что положительно сказывается на работе шилдов и любых схем, берущих питание с колодки POWER/3V3;
  • отсутствует диод в схеме сброса основного MCU.
Купить Freeduino Mega2560 v3.0.0 можно здесь: http://mk90.ru/store/ru/microcontrollers/50-freeduino-mega-2560.html

Схема:




01.01.2012

Freeduino ONE smd

Вслед за другими производителями Arduino-совместимых плат, вынужден констатировать: ATmega328 в DIP-корпусе и дороже, и сложнее доставаем. Именно это и стало одной из причин появления платы Freeduino ONE smd. 
Попутно внесены мелкие изменения, соответствующие Arduino UNO R2:
  • линия HWB притянута резистором к GND - джампер UBOOT пропал с тыльной стороны платы. Это позволяет упростить загрузку новой прошивки через DFU, более подробно см. в статье DFU. В отличие от оригинального итальянского решения с номиналом подтяжки 1К, в нашем варианте выбрано более правильное 10К. 
  • Добавлено посадочное место четырехконтактной вилки bit-bang (пины PB4,PB5,PB6 и PB7). Правда, каких-либо вменяемых примеров альтернативного firmware для ATmega8u2, которые бы их использовали, я пока не встречал:

По-прежнему сохраняются отличия от оригинала в тактовой схеме - не используется керамический резонатор для основного MCU (хоть он меньше и легче, но менее точный) - оба резонатора кварцевые; резистор 1М параллельно кварцу не устанавливается (все отличия версии R1 уже обсуждались в статье Новости Arduinoстроения). 

С одной стороны - девайс получился немного дешевле. С другой - да, если что-то случится с основным MCU, поменять его будет несколько сложнее. Но, как я уже неоднократно говорил - чем больше альтернатив, тем лучше.


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

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

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



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

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

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, но применяется  бутлоадер с открытым исходным кодом. Видимо, по этой же причине он занимает все 4К и требует для активизации обязательного нажатия на кнопку. В бутлоадере реализован протокол 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, это было бы невозможно, за что моя отдельная признательность авторам ;)