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

30.03.2014

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

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



25.07.2013

Freeduino One c microUSB

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

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


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


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

07.05.2013

Web-термометр

"Погодная станция своими руками" - вот как можно было бы назвать статью, но я решил пока просто рассказать о том, как соорудить web-термометр, подключить его к домашней LAN  и наблюдать показания через браузер ;)

Для этого нам потребуется Arduino-совместимая плата, поддержка Ethernet и несколько температурных датчиков.


21.01.2013

Используем HNYDuino R2

Новогодние праздники давно окончились, а после крещения многие уже избавились от своих новогодних деревьев. Конечно, если только это не HNYDuino R2 - с ней можно развлекаться хоть круглый год. Рассмотрим более подробно, как именно это делается ;)




08.01.2013

Как подключить шилд к Nano

Все, кто потратил на сравнение Arduino-совместимых плат хотя бы минут десять, успели усвоить простые истины:
  1. Полноразмерные платы типа Arduino UNO удобны для пристыковывания шилдов;
  2. Миниатюрные платы типа Arduino Nano чудо как хороши в комплекте с беспаечной макеткой.
Но что, если требуется ровно наоборот?...

Существуют полноразмерные Arduino-совместимые платы, на которые не напаяны колодки - вместо них можно впаять штыри и воткнуть таким образом в макетку (как правило, на них даже два ряда отверстий - одно для стандартного arduino pinout, второе - на сетке 2,54 мм), хотя по смыслу такое подходит скорее для обычной макетной платы - к которой без паяльника лучше не подходить.

Nano-совместимые платы можно соединить с шилдом либо проводами на той же беспаечной макетке, либо непосредственно (без участия макетки), но, в любом случае, получится не самого приятного вида колтун.

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

Вот что она умеет:
  • изображать arduino pinout 1.0, включая ICSP-вилку для стыковки с последними Ethernet-платами (и прочими вариантами, которые используют для коммуникаций пины с аппаратной поддержкой SPI);
  • разъем питания с защитным диодом и опциональной возможностью запитывания от стабилизированного источника +5В;
  • посадочные места для пинов A6 и A7 - если они все-таки используются в конструируемом вами устройстве;
  • посадочные места для резисторов-подтяжек I2C, если вдруг понадобится;
  • кнопку сброса (хотя она и кажется бесполезной на первый взгляд).
Когда я разводил этот вариант, то довольно скоро сообразил, что поместить Nano сверху не получится из-за недопустимой высоты - она просто не даст возможность нахлобучить шилды , при стандартной высоте колодок в 8 мм.

И хотя вопрос решался увеличением высоты колодок, я решил отказаться от этой затратной со всех точек зрения идеи (стоимость этих экзотических высоких колодок и результирующая высота и прочность конструкции) и поместил Nano с противоположной стороны ;) Иными словами -  колодки для шилдов и для Nano смотрят в разные стороны:


Я, конечно, понимаю - истинный фанат платформы Arduino просто обязан иметь в своем арсенале как минимум Nano, UNO, и Mega, а следовательно - в таком переходнике не нуждается. Тем не менее, по себе знаю, что прототипизация происходит очень спонтанно и результат качественно зависит от того, что оказалось под руками в конкретный момент времени. В результате это может выглядеть так:




Что до меня лично - я, наконец, получил возможность питать и Nano, и UNO от одного блока питания - быть может, эта идея еще кому-то понравится ;)

Купить кит или собранную плату можно здесь. А руководство по сборе кита (поясняющее отдельные моменты конструкции) - прочитать здесь.

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

12.12.2012

Ёлкадуино R2

Опять наступает декабрь, и снова хочется чего-то новогоднего. Если уважаемый читатель еще не забыл - в прошлом году был представлен проект новогоднего Arduino-совместимого дерева HNYduino. Практически сразу появились замечания и дополнения, и через год родилась версия R2:


Из предыдущей версии были унаследованы две 74HC595, к которым подключены по 8 зеленых и красных светодиодов (более подробно об увеличении числа пинов Arduino этим способом я уже писал). 

Но кое-что, конечно же, было изменено.


Первым делом ATmega328P была заменена на ATmega32u4, так что можно было бы сразу гордо писать Leonardo-compatible. Это сразу же добавило возможность и питать, и программировать ёлку напрямую от miniUSB (никаких дополнительных переходников USB-TTL не требуется). Возможность батарейного питания по-прежнему сохранена, переключение выполняется при помощи механического переключателя.


Расположенные в прежней версии по центру светодиоды убраны, а их место занял трехцветный пятимиллиметровый светодиод, подключенный к выводам, поддерживающим аппаратный ШИМ - таким образом можно подбирать практически любое сочетание цветов, плавно управляя яркостью через analogWrite().


Ближе к вершине располагается электретный микрофон, играющий роль датчика звука (чувствительность настраивается с помощью потенциометра, расположенного с противоположной стороны).


Выход датчика, кстати, подключен к аналоговому входу A0

Количество выводов, которые выведены на подставку сокращено до четырех - оставлены два аналоговых и два цифровых. Кроме них в вашем распоряжении вилка программирования ISP6 и отдельно выведенный UART.



Ну что, скажете "опять ерунда какая-то"? ;) 

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

Чертежи, схема, библиотека и примеры появятся в самое ближайшее время здесь и в wiki, купить готовый экземпляр можно здесь.



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 деньги на начало массового производства. Если идея нравится - помогите  им осуществить задуманное материально, они в долгу не останутся ;)

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


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

02.05.2012

Анонс

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

04.04.2012

Freeduino wireless (1)

Однажды мне повезло выкроить время на посещение мероприятия Hard StartUp в рамках нашего провинциального hackspace. Сам я от выступления категорически отказался под предлогом бессистемного расстройства вокабулярия к концу рабочего дня, но послушал выступающих с интересом; явно бросалось в глаза, что докладчики испытывали недостаток в пульте дистанционного управления презентацией: приходилось просить листать слайды сидящего за ноутбуком человека.

Ясно, что радиокружок хакспейс выруливает в основном за счет энтузиазма его активистов и базы ИТМО, и у ребят просто могло отсутствовать нужное оборудование. Уверен, что это было не последнее их мероприятие с проведением презентаций, поэтому предлагаю свой Arduino-вариант аналогичного устройства - надеюсь, оно пригодится не только им.

Ингредиенты

Сначала создадим прототип - из того, что найдется под рукой. Мне всегда несколько проще, потому что у меня под рукой целый mk90.ru/store ;)

1. Плата Freeduino32u4 - содержит единственный чип ATmega32u4, который может изображать из себя клавиатуру, и поэтому именно ее мы будем подключать к компьютеру с презентацией;
2. Плата Freeduino Nano - будет находиться в руке у докладчика, считывая нажатия на кнопки прокрутки и передавая их Freeduino 32u4;
3. Кнопки, проводки и пара беспаечных макеток, чтобы не хвататься за паяльник по пустякам.
4. Комплект модулей беспроводной связи - наверное, самые дешевые устройства для передачи низкоскоростного информационного потока через эфир для небольших расстояний.


Немного теории

Прежде всего, вот заранее мой ответ фанатикам  IEEE 802.11, на вопрос "почему в списке нет wifi?!": не палите из пушки по микробам! В нашей задаче не нужна маршрутизация, одновременная коммуникация между несколькими устройствами и повышенная проникающая способность радиоизлучения. Нас устроят гораздо более простые устройства  - т.н. RF-трансиверы. В основном, они отличаются мощностью, несущей частотой и способом модуляции. Возьмем недорогой маломощный модуль, используемый в самоходных радиоуправляемых игрушках и работающий на нелицензируемой в России частоте 433 МГц, с модуляцией ASK.

"ASK" означает, что частота и фаза сигнала остаются постоянными, а для кодирования единицы и нуля варьируется амплитуда. Подобные приемники и передатчики можно собрать и самостоятельно, подробнее об этом можно прочесть, например у Алексея Кравченко в книге "10 практических устройств на  AVR, книга 2".

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

Что-то решается программно, что-то - схемотехнически, но самое главное - такие приемопередатчики поддерживаются ArduinoIDE с помощью специальной библиотеки VirtualWire.

Схема

Рисуем схему, которая будет подключаться к USB:


И ту, которая в руке у лектора (с кнопочками):


Предполагаем пока, что обе платы питаются от компьютера, через USB.

Макет

Как бы не ругали беспаечную макетку за надежность контактов, на несложных схемах работать с ней весьма удобно. Я использую сочетание жестких и гибких проводов (вообще, это дело вкуса - гибкими быстрее, но менее наглядно). С платой 32u4:


С платой Freeduino Nano:


Кнопки устанавливать я поленился, выбрав в качестве имитации их нажатия втыкание проводка в дырочку рядом с соответствующим контактом Nano (естественно, другим концом провод воткнут в GND).

Скетчи

Как уже упоминалось, существует библиотека VirtualWire. Она будет делать за нас всю нудную работу - не только управлять приемником и передатчиком, но и кодировать наше сообщение помехоустойчивым кодом, а также считать/проверять контрольную сумму всего сообщения. Выбирая пины Arduino-совместимой платы для подключения приемника и передатчика, я вполне сознательно выбрал те, с которыми библиотека работает по умолчанию (помните об этом, если будете менять схему - не забудьте передать соответствующие параметры библиотеке).

Скетч передатчика:

#include <VirtualWire.h>

#define buttonsCount  3
int bState[buttonsCount];
int bNum[buttonsCount] = {2,3,4};

void setup() {
  // buttons
  for (byte i=0;i<buttonsCount;i++) {
    bState[i] = HIGH;
    pinMode(bNum[i],INPUT); // для ясности, после сброса все пины и так уже входы
    digitalWrite(bNum[i],HIGH); // pullup
  }
  // инициализируем последовательный порт - только для отладки
  Serial.begin(9600);
  // инициализируем библиотеку VirtualWire
  vw_setup(2000);      // скорость обмена в бит/сек
}

void loop() {
   for  (byte i=0;i<buttonsCount;i++) {
     if (digitalRead(bNum[i])!=bState[i]) {
       if (bState[i] == HIGH) {
         char key[2] = {i+1,'\0'}; 
         vw_send((uint8_t *)key, strlen(key));
         vw_wait_tx();
         bState[i] = LOW;
       } else bState[i] = HIGH;
     }
   }
   delay(100);
}

Перед началом использования кнопок, в setup включаем подтягивающие резисторы (зачем нужны подтягивающие резисторы, я уже писал). Далее, сканируем изменение состояния кнопки и, если она перешла из состояния "свободна" в "нажато", генерируем и передаем через беспроводной модуль сообщение с номером кнопки (единственный байт со значением 1, 2 или 3). Задержка в конце - примитивная борьба с дребезгом.

Скетч приемника:

#include <VirtualWire.h>

#define KEY_LEFT 80
#define KEY_RIGHT 79
#define KEY_ESC 41
#define KEY_F5 62


void setup() {
  pinMode(13, OUTPUT); // для индикации приема
  vw_setup(2000); // скорость обмена в бит/сек 
  vw_rx_start();  // инициализация и запуск приемника
}

void loop() {  
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  if (vw_get_message(buf, &buflen)) // неблокирующее чтение
  {
     digitalWrite(13, HIGH); // Зажигаем светодиод L - принято сообщение  
     byte key = buf[0];
     
     if (key==1) Keyboard.print(' ');
     else {
      { 
        KeyReport kbd = {0};
        if (key==2) kbd.keys[0] = KEY_LEFT;
         else kbd.keys[0] = KEY_RIGHT;
        Keyboard.sendReport(&kbd);
      }
      {
        KeyReport kbd = {0};
        Keyboard.sendReport(&kbd);
      }                        
     }     
     digitalWrite(13, LOW);
   }
   delay(200); 
}


Этот скетч будет корректно работать (и вообще скомпилируется) только с последним пропатченным ядром ArduinoIDE для Freeduino 32u4 - там функция sendReport сделана публичной, чтобы скетч был способен генерировать нажатия не только на символьные клавиши (буква 'A', цифра '8' или пробел), но и управляющие коды - (стрелки, F-клавиши и т.п.). После вызова sendReport с кодом нажатой клавиши, нужно всегда делать еще один, чтобы сообщить о ее отпускании, в противном случае через некоторое время получим режим повтора.

В данном скетче кнопка №1 транслируется в пробел, кнопка №2 - стрелка влево, кнопка №3 - стрелка вправо. Функция vw_get_message вернет нам полученное сообщение только в том случае, если совпала подсчитанная контрольная сумма - но для нас это полностью прозрачно, просто учитывайте, что она избавляет нас от необходимости проверять достоверность принятой информации с точки зрения эфирных искажений нашего примитивного ASK-сигнала ;)

Roadmap

Итак, макет завелся. Что дальше?

Устройства для реальной жизни можно делать и на основе готовых плат Freeduino, и с помощью ЛУТ-а. Но имейте ввиду, что ATmega32u4 выпускается только в SMD (в отличие от ATmega328P).

По питанию приемника все понятно - экономить не надо. А вот с передатчиком придется повозиться - продумать батарейную схему питания, позаботиться об экономном расходовании ее ресурса.

Наконец, если будут донимать помехи, можно попробовать улучшить помехоустойчивость (повторять сообщение о нажатии в эфир несколько раз или припаять антеннки).

Все это вы уже можете начинать самостоятельно или же подождать моего продолжения, если когда оно появится ;)

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

Схема:




02.02.2012

Angelino R2

Следуя моде, выпущена Angelino R2 - теперь тоже с arduino 1.0 pinout:


Отличия от R1 - только в добавлении колодок SCL/SDA/IOREF и появлении аутентичных русских названий :) К сожалению, неудачно отрезался фрагмент маски, на котором была нанесена полярность и напряжение батарейного питания - пришлось сделать бумажную наклейку. По этой же причине часть пошла в магазин в виде печатных плат, а часть - в виде недорогих китов для самостоятельной сборки с ATmega8.

28.01.2012

MKboard в качестве программатора STK500

В комментах к посту про Angelino один из пользователей навел меня на интересную мысль: а действительно, как сделать из MKBoard программатор для другой платы? Для стандартных Duemilanova и Uno обычно берут скетч ArduinoISP и дальше действуют в соответствии с этой инструкцией. Но этот скетч совершенно не подходит для MKboard/metaboard, которые не имеют "честного" USB-порта.

Но оказывается - сделать из MKBoard программатор очень даже можно, причем получается практически полноценный STK500-совместимый программатор - AVR-Doper, который можно использовать с AVRStudio (разве что без высоковольтного последовательного программирования). Для этого берете этот хекс: mkboard_avrdoper.tar.gz, замыкаете джампер Upload, нажимаете на сброс и пишите:

avrdude -c usbasp -p m8 mkboard_avrdoper.hex

После завершения процесса вы получаете AVR-Doper в режиме HID.

Соединяйте провода с программируемой схемой, руководствуясь новым назначением пинов:

Для программирования достаточно соединить MKBoard и программируемую плату (target) согласно этой таблице:

MKBoardTarget
RESETRESET
MOSIMOSI
MISOMISO
SCKSCK
GNDGND
+5BVCC

Если схема имеет собственное питание, последнее соединение (VCC и +5В) делать не нужно. 

Откуда брать эти сигналы - с гребенки ISP6 или колодки цифровых пинов - не суть важно, но если соединяете ISP6 у MKBoard и устройства - получается практически "один в один", за исключением сигнала RESET - его надо брать все-таки с цифровой колодки, digital10.



Далее, для прошивки hex-файла через avrdude можно использовать следующую строку:

avrdude -c stk500 -P avrdoper -p MCU -U flash:w:file.hex

где MCU заменяем на тип программируемого микроконтроллера (более подробно см. справку к avrdude - для ATmega8 - m8, для ATmega328P - m328p и т.д.).

Если требуется совместимость с AVRStudio - снимаем джампер Upload и переподключаем питание. Как вы уже догадались, в данной прошивке программатора этот джампер управляет режимом HID: замкнут = вкл, разомкнут = выкл (и вместо него CDC). Но учтите, что выбор срабатывает один раз при подключении питания - если нажмете на сброс, запустится бутлоадер, который будет делать совершенно другие вещи (представляться как usbasp и пытаться запрограммировать самого себя).

Можно ли программировать через DIP-сокет? Разумеется - можете его установить хоть на макетном поле, но при этом:
  • сделайте все вышеописанные соединения Target и MKBoard за исключением VCC и +5V;
  • подключите SUPPLY1 и SUPPLY2 (оба два) к шине VCC программируемого MCU;
  • подключите CLK к ножке XTAL1 программируемого MCU (замена кварцу и емкостям для создания тактовой схемы у target-а).


Два контакта под питание выглядят перестраховкой, но некое рациональное зерно в этом есть. Перед началом через SUPPLY подается питание на программируемый MCU, а по завершении - отключается. Так делает и оригинальный AVRDoper, только у него есть для этого специальная буферная микросхема, которой в MKBoard, увы, нет.

Во время программирования будет мерцать встроенный светодиод L, поскольку он оказался подключен к пину SCK (тактовые импульсы программирования). Оригинальный светодиод "ONLINE" для наглядности можно прикрутить к PC1 (или analog1 в нумерации Arduino), обязательно через токоограничительный резистор 1К - тогда он будет четко загораться в момент входа в режим программирования и при выходе из него.

В этой прошивке также можно использовать встроенный отладочный порт - если соединить  GND, RX и TX отлаживаемого микроконтроллера с пинами digital 0 и digital1 (разумеется, перекрестив), то можно с ним обмениваться через USB-подключение MKBoard  на скорости 19200 - читать и писать данные с помощью утилиты avrdebug.

Ну и напоследок - если программатор больше не нужен.... разбираете схему, замыкаете Upload, нажимаете сброс - и... плата снова готова к загрузке скетчей через ArduinoIDE! ;)

И, конечно же, скажем спасибо команде Objective Development, позаботившейся о том, чтобы код AVR-Doper компилялся не только под разные MCU и разные тактовые частоты, но и под разные схемы (оригинальная, usbasp, metaboard).