Metaboard - Arduino-совместимая плата с USB, но без USB-чипа

Наткнулся на интересный проект самостоятельной сборки Arduino-совместимой платы. Главное отличие от обычных - поддержка загрузки программы по USB, но с полным отсутствием микросхемы конвертера USB-RS232.

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

Но бесплатный сыр бывает только в мышеловке, за все приходится расплачиваться. В данном случае увеличивается размер загрузчика и соответственно уменьшается до 6К память для загрузки программ...

Название: Metaboard
Процессор: ATmega8/88/168/328P
Тактовая частота: 16МГц
Совместимость с Shield-платами: нет
Совместимость с Arduino IDE: есть, неполная
Страница проекта: http://metalab.at/wiki/Metaboard

Metaboard - Arduino-совместимая плата с USB, но без USB-чипа. USB реализовано в микропрограмме ATmega, код основан на драйвере V-USB от Objective Development (на этом драйвере основаны все реализации протокола USB на AVR). Принципиальная схема:
Специально для этой платы был разработан bootloader, который принимает по USB скомпилированный скетч от Arduino IDE, а потом запускает его. Получается весьма симпатичное и экстремально дешевое решение для Arduino с USB, которое можно собрать своими руками.

На странице проекта можно скачать схему и чертеж односторонней печатной платы в формте Eagle: обратите внимание, что практически все простарнство между колодками входов и выходов Arduino пустое - там насверлили дырок и устроили макетное поле. Кстати, не ищите ICSP-разъем - автор предлагает желающим припаять его на макетное поле, если уж им так его недостает ;)

Однако, не спешите радоваться :( В этой жизни за все приходится расплачиваться.

1. Размер bootloader-а для ATmega8 вырос до 2К. Оригинальный занимал 1К и оставлял для скетча 7168 байт, теперь же будет доступно 6144. Это все еще весьма много, но будет сильно ограничивать при подключении библиотек. Так что надо брать сразу ATmega168 - тем более, что в этом случае размер доступной памяти не изменится.

2. Аппаратный последовательный порт, обитающий на пинах Rx/Tx ATmega, остается "как бы" незадействованным. То есть, использовать-то его можно, но, в отличие от Diecimila / Duemilanova, он никак не связан с USB. Код Objective Development работает по прерывыаниям и обязательным условием является заведение сигнала D- на пин ATmega, поддерживающий прерывания. Таким образом, вместо обычных PD0 и PD1 для загрузки скетчей используются PD2 и PD4.

3. Автосброса - нет. Обычно, Arduino IDE "опускает" перед загрузкой скетча DTR, чтобы сформировать сигнал сброса на МК. Для приложения (в данном случае - ArduinoIDE) это выглядит довольно просто - надо вызвать соответствующую функцию Win32 API. После этого управление получит драйвер FT232RL, который сформирует соответствующий служебный пакет данных и передаст его по USB, далее его примет FT232 и переведет свою специально выделенную ножку "DTR" в состояние логического нуля, что, в свою очередь, вызовет сброс на МК.

Но в Metaboard нет отдельного внешнего чипа, который играл бы роль внешней цепи сброса. Сброс возможен только по нажатию кнопки на плате. По сбросу запускается bootloader, который опрашивает PD7 ( digital 7 по обозначениям Arduino ). Если там логический ноль, то bootloader начинает ожидать ( бесконечно долго! ) заливание скетча, а по окончании передает ему управление. В противном случае управление сразу передается по нулевому адресу.

На первый взгляд кажется, что вы теряете digital 7, но его заземление требуется только на время заливки скетча ( вы еще не успели забыть, что здесь по USB нельзя общаться через Hardware Serial? ). В любом случае, придется стараться собирать схему так, чтобы digital 7 не использовался на вход и был по крайней мере притянут к Vcc.

Кстати, чтобы код Objective Development работал, надо обязательно ставить кварц, никаких керамических или внутренних RC-цепочек использовать нельзя.

Для тех, у кого еще не успело пропасть желание собрать из комплекта деталей и макетки практически полноценный Arduino, для достижения этой цели надо еще чуть-чуть поработать. Разберем на примере ATmega8-16PU.

Скачайте и распакуйте bootloader: http://www.obdev.at/products/vusb/usbasploader.html.

Нам потребуется hex-файл firmware\hexfiles\mega8_16mhz.hex, поместим его в дерево файлов Arduino IDE, в каталог arduino-0015\hardware\bootloaders\atmega8\.

Поскольку этот bootloader работает не по протоколу stk500, то придется заводить отдельную секцию в boards.txt:

meta8.name=Metaboard w/ ATmega8

meta8.upload.protocol=usbasp
meta8.upload.maximum_size=6144
meta8.upload.speed=19200

meta8.bootloader.low_fuses=0xdf
meta8.bootloader.high_fuses=0xc8
meta8.bootloader.path=atmega8
meta8.bootloader.file=mega8_16mhz.hex
meta8.bootloader.unlock_bits=0x3F
meta8.bootloader.lock_bits=0x0F

meta8.build.mcu=atmega8
meta8.build.f_cpu=16000000L
meta8.build.core=arduino


Как видите, кое-что изменилось: название протокола - usbasp, уменьшился на 1К upload.maximum_size, bootloader.file указывает на скачанный на предыдущем шаге бутлоадер, а bootloader.high-fuse задает размер бутлоадера, равный . Теперь можно перестартовать Arduino IDE, выбрать в списке плат "Metaboard w/ ATmega8". Если МК не прошит, то теперь это можно сделать через стандартное Tools->Burn Bootloader->w/ Parallel Programmer ( разумеется, вилка ICSP должна быть установлена ;).

Теперь надо скачать драйвер USBasp, иначе устройство будет обнаружено, но использовать его не получится. Идем на страницу http://www.fischl.de/usbasp/, качаем и распаковываем самый последний архив. При подключении Metaboard, на запрос об обновлении драйверов, подсовываем каталог bin\win-driver\libusb_0.1.12.1.

Все, теперь можно работать, только не забудьте выставить какой-то номер COM-порта, Arduino IDE формально требуется его определить, хотя в данном случае он ну никак не нужен.

Схему лучше чуть-чуть доработать: подтянуть сброс к Vcc через 10К, добавить светодиоды PWR и digital13, и увеличить емкость перед стабилизатором внешнего питания:


 Резюме: самый дешевый способ собрать Arduino с USB самостоятельно. Особенно актуально, если скетчу не надо обмениваться с PC информацией через библиотеку Serial.

Источник: http://mk90.blogspot.com/2009/06/metaboard.html

1 комментарий:

  1. Подскажите где купить набором.
    strigin187@yandex.ru
    Спасибо.

    ОтветитьУдалить