24.09.2012

TinyDuino

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


Название: TinyDuino
Процессор: ATmega328P-MU
Тактовая частота: 8 МГц
Совместимость с ArduinoIDE: да, требуется USB-TTL
Совместимость с Shield-платами: собственный стандарт шилдов
Авторы: TinyCircuits
Страница проекта: http://tiny-circuits.com/products/tinyduino/
Дата первого упоминания: 22.08.2012

На фото - основная плата TinyDuino Processor Board. Из интересных особенностей я бы отметил возможность питания от литиевой батареи, с автовыбором источника (можно припаять на тыльную сторону разъем-холдер):



Если на плату подано внешнее напряжение питания +5В, питание будет осуществляться от него, и только при его пропадании - от батарейки.



Другая особенность - все пины ATmega выведены на миниатюрную двурядную колодку:



Что характерно, есть и три неиспользуемых контакта (для организации схем между шилдами - RSV0..2).

И, конечно же, для TinyDuino есть свои TinyShield-ы. Например, для подключения USB и программирования есть TinyShield USB & ICP:




Идея LoL-shield, реализованная для полноразмерных Arduino, существует и здесь, в виде TinyShield 16 Edge LEDs (с помощью пяти пинов управляем 16-ю светодиодами):

Если размер 20x20 мм все-таки великоват, есть и TinyLily - совсем миниатюрная LilyPad:

Ее диаметр - всего 14 мм, и именно поэтому наружу по краю выведено только по четыре цифровых и аналоговых пина (зато уже не так страшно стирать! Все-таки она в 12 раз меньше оригинального LilyPad ;) В спецификациях процессорной платы указано, что она по умолчанию сконфигурирована на 8 МГц, однако внешнего резонатора ни на фото, ни по схеме не видно. Следовательно, используется внутренняя RC-цепочка, которая хоть и доступна для калибровки, однако сильно зависит от напряжения питания и температуры окружающей среды (не очень удачное решение для носимых на одежде устройств).


Проект TinyDuino чем-то напомнил  мне советские микромодули - в те времена уже начали задумываться о миниатюризации схемы и была предпринята попытка делать их на типовых элементах в виде модулей на пластинке размером примерно 10x10 мм. Это позволяло достигнуть плотности монтажа аж до 20 элементов в 1 см3, но как таковое не прижилось - к концу 60-х годов их вытеснили более надежные и технологичные интегральные схемы, а затем добили микросхемы ;)




Тем не менее, радиолюбители со стажем могут гордо продемонстрировать внукам эдакую диковину - усилитель или триггер по размеру и форме напоминающий палец ;) Станет ли такой же диковиной TinyDuino через несколько лет? Время покажет, а пока ребята собирают через kickstarter деньги на начало массового производства. Если идея нравится - помогите  им осуществить задуманное материально, они в долгу не останутся ;)

19.09.2012

Netduino

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

Я уже рассказывал о Leaf Maple от leaflabs.com, и проект, кстати, успешно существует до сих пор. На фоне массы преимуществ остаются недостатки, связанные с совместимостью шилдов и библиотек. Работа продвигается неспешно, но зато это первая в истории Arduino-совместимая плата на ARM.

В этом году Google выпустил ARM-плату ADK 2012 - она может быть задействована с помощью одноименного приложения ADK 2012 для Android. Доступны как исходники самого Android-приложения, так и того, что находится внутри платы, а также схема, разводка и тулчейн. Поддержка в ArduinoIDE ожидается этой осенью, вместе с выходом Arduino Due - однако все мы помним, как итальянцы умеют выдерживать драматическую паузу ;)

Существует и еще одна популярная ARM-плата - Netduino. Повторяя  форм-фактор Arduino, тем не менее программируется она на Microsoft C#, на базе специального .NET Micro Framework. Исходные тексты и CAD-файлы - открыты (в том числе и для улучшений). И поскольку экземпляр такой платы недавно попал ко мне в руки, хочу воспользоваться случаем и поделиться опытом.

Внешне это выглядит так:





Как видите - всё честно, можно стыковать с шилдами для Arduino, и даже вилку программирования, столь важную для совместимости SPI-ориентированными шилдами не забыли. На негодование по поводу отсутствия поддержки в ArduinoIDE могу только развести руками и напомнить о паре положительных моментов:
  1. По отношению к новичку .NET выглядит более-менее дружественно (оценим это ниже, в примерах кода);
  2. Micro Framework хоть и урезана, но все-таки поддерживает многопоточность, события и пошаговую отладку.
Первым делом надо установить программное окружение, способное компилировать код на языке Microsoft C#, начнем с платформы Windows (для Linux и Mac OS X есть возможность использовать Mono, про это в следующий раз):
  1. Установите бесплатный Microsoft Visual C# Express 2010 
  2. Скачайте и установите Microsoft .NET Micro Framework v4.1 SDK 
  3. (в инсталляторе можно выбрать вариант "Typical")  
  4. Скачайте и установите Netduino SDK v4.1 
Установка протекает скучно и, как правило, вопросов не вызывает. Конечно, Express нужен только если не установлена платная версия студии. Можно использовать и версию SDK 4.2, но потребуется 1) дополнительно повозиться с перепрошивкой платы, 2) использовать версию студии не ниже 2010.

После запуска MSVC выбираем в меню File | New Project, и далее в появившемся окне - Micro Framework, затем Netduino Application.



В окне Solution Explorer-а справа дважды щелкам на созданной из дефолтового темплейта Program.cs, это будет приблизительно так:

using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;

namespace NetduinoApplication1
{
    public class Program
    {
        public static void Main()
        {
            // write your code here
        }
    }
}

Теперь вместо строчки "write your code here" вписываем:

OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);

while (true) {
  led.Write(true);
  Thread.Sleep(500);
  led.Write(false);
  Thread.Sleep(500);
}

Самое время опробовать этот "Blink" в работе, однако по умолчанию среда компилирует и загружает результат в эмулятор от Microsoft. Вещь это красивая, но для нас бесполезная - специального эмулятора для Netduino вместе с SDK не устанавливается (хотя, существует как минимум одна попытка его создания, здесь можно ознакомиться подробнее).

Поэтому, самое время подключить Netduino к компьютеру и установить драйвера из папки Netduino SDK (по умолчанию это Program Files/Secret Labs/Netduino SDK/Drivers). После этого в студии щелкаем правой кнопкой по имени проекта (имя проекта располагается сразу под именем солюшена, т.е. второй строкой), в появившемся окне меняем Transport с "Emulator" на "USB", и, если плата подключена, в строке Device увидим "Netduino_netduino".


Теперь можно вернуться на закладку с программой и проверить, успешно ли она компилируется (F6), после чего загрузить ее в плату (F5). При этом произойдет тоже самое, что обычно происходит в ArduinoIDE - скомпилированная программа будет записана во флеш. Если же надо начать пошаговую отладку - нажимайте F11.

После успешного запуска Blink-а можно взглянуть на плату поподробнее:
  • "сердцем" является AT91SAM7X512 - ARM7TDMI с 512К FLASH, 128К RAM, аппаратной поддержкой USB 2.0, Ethernet MAC 10/100 base-T, CAN, I2C, I2S, SPI, USART, JTAG. Все пины 5В-совместимые, в том числе четыре - с повышенной нагрузочной способностью (до 16мА). МК работает на частоте 48 МГц и питается от +3.3В;
  • для пользовательских программ доступно 128К FLASH и 60K RAM;
  • аналоговых пинов - 6 (как и в Arduino, они могут быть переведены в цифровой режим);
  • цифровых пинов -  14;
  • кнопка сброса, которая может быть использована и в качестве генератора внешнего события в  программе (то есть, не обязательно строго сбрасывает устройство);
  • светодиод, индицирующий подачу питания (кстати, белый) и еще один - доступный пользователю (так же, как светодиод L в Arduino);
  • разъем внешнего питания 2.1/5.5, плюс в центре, защитный диод от переполюсовки;
  • microUSB с предохранителем 0.5 мА;
  • специальный erase pad для обновления прошивки. 
Разъем Ethernet присутствует только на плате Netduino Plus, и на ней же есть слот microSD, с которого можно грузиться. И, напротив - существует модификация Netduino Mini, которая по  аналогии с Freeduino Pro Mini - хорошо подходит для беспаечной макетки, но не содержит даже порта USB. 

Несколько слов о нагрузочной способности портов. Привычные для Arduino и ATMEL/AVR 40 мА на пин здесь оказыаются недостижимой роскошью - большинство пинов выдерживают максимум 8 мА, так что возьмите на заметку значение токоограничительного резистора для светодиода с падением напряжения 2.1В - около 150 Ом. Более подробно про назначения пинов можно прочесть здесь.

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

InputPort button = new InputPort(Pins.ONBOARD_SW1, false, Port.ResistorMode.Disabled);

Обычная кнопка инициализируется аналогичным способом:

InputPort button = new InputPort(Pins.GPIO_PIN_D1, false, Port.ResistorMode.PullUp);

(обратите внимание на последний параметр - это управление встроенными подтягивающими резисторами). Далее чтение состояния производится простым button.Read(), которое возвращает true или false.

Аналоговые входы, позволяющие оцифровывать величину приложенного к ним напряжения, работают в диапазоне 0..+3.3В в дестиразрядном режиме (т.е. возвращают значения от 0 до 1023) :

AnalogInput pot = new AnalogInput(Pins.GPIO_PIN_A0);

и далее, для считывания - pot.Read(). Если диапазон значений 0..1023 не выглядит удобно, можно его масштабировать таким способом: pot.SetRange(0, 100).

Возможность аппаратного ШИМ-а есть на пинах 5, 6, 9, 10, инициализировать его можно так:

PWM led = new PWM(Pins.GPIO_PIN_D5);

Затем передаем potValue - число от 0 до 100 в качестве аргумента, меняя скважность импульсов (или яркость свечения светодиода, соответственно): led.SetDutyCycle((uint) potValue). Или, прямо указываем длительность всего импульса и его  - led.SetPulse(duration * 2, duration).

Кстати, с помощью Thread.Sleep можно приостановить выполнение "навсегда": Thread.Sleep(Timeout.Infinite);

Подводя краткие итоги по использованию моего Netduino c Windows XP (запущенном в Oracle VirtualBox, совместимость с которым прямо декларирована в спецификациях платы), отмечу явное подтормаживание во взаимодействии студии с платой. Программы исправно компилировались, но процесс загрузки был инфинитным - такое впечатление, что программа загружалась, но не запускалась (приходится жать на сброс). Также мне не удалось войти в режим пошаговой отладки :( Возможно, это какая-то особенность работы в виртуальной машине или сочетание версий софта и firmware - надеюсь ее победить в ближайшее время.

Для кого Netduino будет полезен? В первую очередь, для приверженцев C# от M$. В основном, конечно, эффектно будет смотреться перенос существующих исходников, работающих с сетевым интерфейсом (насколько я могу судить - изменения там минимальные). Но, с другой стороны, не стоит забывать о том, что Netduino Plus со встроенной сетевой поддержкой дает пользователю еще меньше свободы -  64К FLASH и 42K RAM.

Для начинающих может пригодиться Getting Started with Netduino, написанная Крисом Уолкером (Chris Walker) - собственно автором железки и главой сообщества Netduino.

07.09.2012

Ангел для Петьки

Сегодня хочу предложить статью Andrew Doynikov - о том, как превратить Angelino в программатор STK-500 by Petka.

Сломался программатор STK500 by Petka. Можно было изготовить новый, но в наличии не оказалось FT232RL, зато был переходник USB-TTL, купленный давно и используемый во многих проектах для тестирования и отладки:


Также под рукой оказалась плата Angelino - самая дешевая, наверное, Arduino-совместимая плата - без USB:


Решено! Будем делать из этого программатор.

Если вниматнльно взглянуть на схему Angelino, практически - это половина программатора. 
Вот что потребуется изменить:
  • кварц 16 МГц надо заменить на тот, что используется в STK500 by Petka, я поставил 14.7456 МГц
  • убрать линию "Автосброса", которая присутствует на всех Arduino-совместимых платах;
  • добавить несколько резисторов, светодиод и разъем для программирования целевого контроллера.


На схеме сохранена нумерация элементов из оригинальной схемы STK500 by Petka, красным отмечены пины Angelino (например, А0 - аналоговый вход, D10 - цифровой).

Дополнительные элементы и разъем программирования было удобно разместить на отдельной Shield-плате, которую я развел в Sprint Layout и изготовил с помощью ЛУТ:



Далее, в Angelino устанавливается контроллер ATmega8-PU, через ICSP-разъем туда загружается прошивка для кварца 14.7456 МГц - от уважаемого Леонида Ивановича, который улучшил и оптимизировал ее. После этого основная плата стыкуется с полученной Shield-платой, подключается USB-TTL переходник (в процессе подключения к Windows может понадобиться установить драйвера FTDI).




Для проверки надо подключиться к программатору гипертерминалом, он должен сразу же ответить. После этого можно смело использовать его с AVR Studio.



Подводя итог: после двух часов неспешной работы - получен прекрасный и быстрый программатор. Мои благодарности автору программатора - Petka и Леонид Ивановичу за доработанную прошивку.

Материалы: