31.03.2011

Japanino

Название: Japanino
Процессор: ATmega168V-10AU
Тактовая частота: 8 МГц 
Совместимость с ArduinoIDE: да
Совместимость с Shield-платами:
да
Авторы-разработчики: журнал «Otona no Kagaku»
Страница проекта: http://otonanokagaku.net/japanino/
Дата первого упоминания: 14.05.2010


Эта ArduinoCompatible-плата - родом из Японии. Ее продажи начал японский журнал "Наука для взрослых", в виде набора №27. И, кстати, продается до сих пор. Вот так она выглядит:



Всем известно, что Япония - довольно замкнутая на себе страна, поэтому информацию пришлось собирать буквально по крупицам. В частности, схемы добыть не удалось, но и так вроде бы все ясно - многое позаимствовано у Duemilanova. 

Прежде всего: применен процессор ATmega168V - тактовая частота составляет всего 8 МГц. По этому поводу на родном сайте доступен для скачивания ArduinoIDE с дополненной секцией в boards.txt, где используется LilyPad-овский загрузчик. Традиционно, за счет корпуса TQFP, аналоговых пинов на два больше, чем у плат на основе процессоров в PDIP-корпусе.

Далее, микросхема FTDI заменена на аналогичную от SiliconLabs - CP2104, однако смысл остался тем же - это USB-to-TTL мост с минимальной обвязкой. Набор транслируемых сигналов включает все стандартные COM-портовые и 4 GPIO, однако никакого намека на BitBang-вилку или светодиоды Rx/Tx почему-то нет :( Хорошо, что есть хотя бы отверстия для ICSP-вилки ;)

Напряжение питания Vcc = +3,3В, но не ищите на плате регулятора! Подаваемое с разъема USB или батарейного штекера +5В проходит через два выводных диода 1N400x, которые и "поедают" его до нужного значения. Из этого, кстати, следует, что питание на батарейном штекере не может превышать +7В (а VIN просто ни к чему не подключен).

Налицо попытка сделать плату шилд-френдли: вместо разъема USB-B использован USB-A, а также батарейный разъем питания. Но, на мой взгляд, платы Seeeduino многократно превосходят Japanino во всех отношениях, разве что в комплекте с ними не идет P.O.V:



(замечу в скобках, что на этой картинке какая-то ранняя модификация платы, видимо сделано в демонстрационных целях)

В настоящий момент комплектом Japanino+P.O.V торгует MakerSHED, удовольствие стоит 49 USD. У них же можно просмотреть довольно подробную инструкцию по использованию комплекта.

Источники:
http://knol.google.com/k/curtis-hoffmann/the-japanino/2orqqohq0ljio/17#

29.03.2011

LoL Shield (2)

Продолжение, см начало в LoL Shield(1)

Разберем примеры, которые идут в комплекте с библиотекой LoLShield. Традиционно, они доступны в ArduinoIDE через меню File | Examples.

1. BasicTest

Этот скетч полезно загрузить, чтобы проверить правильность работы всех светодиодов.



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

2. Charli_heart

Смысл этого теста я не очень понимаю, видимо какой-то медитативный:



Словом, матрица какая-то...

3. font_test

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



4. life

Еще одна медитативное развлечение - игра Жызнь ;) если кто в детстве забавлялся с псевдографикой на РК-86 или упражнялся в синклер-бейсике, должен ощутить прилив ностальгии...



Переходим к водным процедурам активным действиям. Если вы уже успели обратить внимание - на шилде выведены два свободных пина - A4, A5. Для полноценного использования их в следующих примерах, придется добыть кнопочку, потенциометр и резистор-подтяжку 10К.


Подключим их следующим образом:

  • нормальноразомкнутую кнопку между A4 и GND;
  • постоянный резистор-подтяжку 10К - между A4 и 5V;
  • потенциометр - традиционно: крайними ногами к GND и 5V, а переменной - к A5 (см. статью про подключение потенциометров на arduino.cc).
Таким образом, у нас появился мини-джойстик. 


5. invader1

Землю атакуют пришельцы, надо отстреливаться и уворачиваться. Тут впервые жалеешь, что поле не цветное и не 100 на 100 ;)



6. tetris

Зато старый добрый тетрис смотрится более, чем органично.


7. pong2

Что касается тенниса, то ракетка в два светодиода длиной - как-то маловато. Но, видимо, если сделать три - играть будет неинтересно (слишком просто).



Я повторяю - количество fun-а, которое генерит этот шилд, меня восхитило. Можно, кстати, сесть и написать модификацию pong3 для игры вдвоем ;)

продолжение обязательно следует! 

20.03.2011

Кленовый лист

Maple - еще одна ArduinoCompatible плата - на этот раз, не совсем обычная.


Авторы-разработчики Leaf Labs использовали в качестве MCU STM32F103RB, 32-битный контроллер с ядром ARM Cortex-M3. Разумеется, ни о какой совместимости бинарных файлов речи идти не может; но благодаря использованию проектом базовых библиотек Arduino, удалось добиться неплохой совместимости. 

MCU

В отличие от 8-битных AVR, процессор Maple оперирует только 32-битными числами. Казалось бы: подобное расточительство приводит к учетверению объема необходимой памяти. Но если часто используются операции над величинами, которые не умещаются в один байт (например, отсчет АЦП или числа с плавающей точкой), то может случиться значительный выигрыш в быстродействии.

Характеристики микроконтроллера:
  • 64 пина, тактовая частота 72МГц, напряжение питания 2,0..3,6В
  • 128KB флеш-памяти
  • 20KB внутренней SRAM 
  • всего 38 GPIO
  • два 12-битных  АЦП, до 16 каналов
  • два интерфейса i2c (SMBus/PMBus)
  • интерфейс CAN 
  • три USARTS
  • два SPI
  • поддержка USB
Последний пункт означает, что на плате нет отдельного чипа USB - для загрузки используется специальный maple-bootloader, представляющийся системе в виде DFU-устройства (по этой причине под Windows требуется установка драйверов).

Пины ввода-вывода умеют подтягиваться не только к Vcc, но и к GND, а также вообще пребывать в режиме открытого стока - что существенно облегчает стыковку со схемами, имеющими иные логические уровни.

Таймеров - целых четыре штуки, ими можно управлять вполне осознанно. Это почти не мешает поддержке PWM: он не будет работать только на пине D10.

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

Board design


Плата выглядит довольно компактной, но за это пришлось заплатить 4-х слойным дизайном. Расположение пинов совместимо с Shield-платами Arduino, за исключением AREF - вместо него выведен дополнительный GPIO - D14. К верхним пинам дан дублирующий ряд отверстий с шагом 0.1" - прямо как в Seeeduino.

Питаться плата может от внешнего источника 7-18В (традиционный защитный диод присутствует), либо от USB, либо от литиевого аккумулятора со стандартным напряжением 3,7В - выбирается при помощи джампера. Аккумулятор можно подзаряжать от доступного источника, для этого также есть джампер и даже индикаторы заряда:


(маленькая квадратная микруха рядом с батарейным разъемом - это контроллер заряда аккумулятора).

В середине платы посадочное место для колодки JTAG. Очень мудрое и дальновидное решение для тех, кто собирается отлаживаться "по-взрослому". Кстати, такого понятия, как ISP-программирование для STM32 не существует (в отличие от AVR, когда в ATmega1280 есть одновременно и ISP, и JTAG).

В дополнении к сбросу, добавлена одна лишняя кнопка:


Учитывая питание от 3.3В, размер пассивных элементов - 0402. 

IDE


На момент написания статьи была доступна IDE на основе ArduinoIDE 0018. В качестве типа платы предлагается дла варианта - Maple Flash или Maple RAM. Разница - в скорости загрузки результата компиляции скетча и его перманентности. Загруженное в RAM будет забыто сразу после отключения питания, зато загрузка произойдет быстрее, чем во flash.

Но самая главная модификация скрыта от глаз пользователя, а именно - AVR toolchain заменена на аналогичную, но для ARM. В данном случае, это все тот же gcc от CodeSourcery для таргета ARM EABI (arm-non-eabi-gcc). 

Синтаксис

Ничего принципиального в синтаксис не превносится, однако надо помнить, что:
  • большинство базвых функций Arduino, которые возвращали 16-битное значение, в Maple вернут 32-битное;
  • pinMode принимает немного другие режимы работы - любой из пинов может быть OUTPUT, OUTPUT_OPEN_DRAIN, INPUT_FLOATING, INPUT_PULLUP, INPUT_PULLDOWN. Плюс - дополнительные режимы пинов с возможностью ШИМPWM и PWM_OPEN_DRAIN, а также пинов АЦП - INPUT_ANALOG;
  • последовательных портов - 4 штуки, почти как в Mega, но использовать просто Serial нельзя - всегда надо уточнять номер - Serial1..Serial3;
  • ШИМ в Maple 16-битный, это важно учитывать при задании константы в analogWrite() - отныне 255 не является граничным значением, используйте диапазон 0-65535;
  • АЦП возвращает 12-битные значения - следовательно, вместо диапазона 0-1023 мы будем получать 0..4095. 
Как видите, отличий довольно много. Но если требуется обработка данных на скорости, которую Arduino не в состоянии вам предоставить - Maple выглядит более привлекательным. При портировании скетчей и тем более библиотек придется потрудиться, но уверен, что в результате все получится ;)

13.03.2011

LoL Shield (1)

Никогда бы не предположил, что столько положительных эмоций заключено в простой  светодиодной матрице! А вот Джимми Роджерсу это удалось не только предположить, но и воплотить в полной мере - именно он является автором LoL Shield:



Что такое LoL Shield? Это матрица индивидуально адресуемых светодиодов 9х14, куда можно выводить все, что душе угодно: начиная с текста и заканчивая изображениями. Принцип действия основывается на т.н. сharlieplexing - в отличие от обычного мультиплексирования, используется свойство микроконтроллеров поддерживать свои выходы в трех состояниях. Наглядно этот эффект можно продемонстрировать на такой схеме:



Когда вы переводите пин MCU в состояние входа, то практически отсоединяете его от схемы. Следовательно, чтобы заставить зажечься светодиоды LED5 или LED6, надо подать разные логические уровни на pin1 и pin3, но чтобы при этом не загорелись остальные - перевести pin2 в состояние входа (иначе говоря - high impendance - высокого сопротивления).

Теоретически, имея в распоряжении N свободных пинов MCU, можно заставить работать Nx(N-1) светодиодов. Сам автор утверждает, что решил не жадничать и использовать только 12 выходов Arduino. И хотя это давало возможность использовать 132 светодиода, по факту  на стандартную Shield-плату влезло только 126 трехмиллиметровых - хотя и это неплохо. Схема состоит из блоков следующего вида:


Автор аккуратно объединил их и получил вот такую схему:



К сожалению, соорудить такое при помощи ЛУТ не представляется реальным: во-первых, развести такую плату в чисто односторннем варианте сложно, во-вторых - надо сойти с ума сверлить более 250 отверстий. Поэтому, пришлось брать комплект деталей LoL-Shield с печатной платой:


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

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



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

В статье использованы материалы из Википедии - свободной энциклопедии.

См. продолжение про примеры к LoL Shield (2)