пятница, 9 марта 2012 г.

Добавляем поддержку новой платы в Arduino IDE

В процессе переделки своего гигрометра с Arduino на самодельную плату пришлось задуматься о поддержке последней в Arduino IDE. Первый вариант "градусника" был собран на базе Freeduino 2009, который есть аналог Arduino Duemilanove, поэтому проблем не было. После перехода на собственную плату на базе Atmega8a пришлось отказаться от загрузчика и заливать прошивку через программатор. В качестве программатора у меня используется USBAsp v2.0, который был куплен на ebay.


С заливкой простеньких программок вида "помигать светодиодом" проблем не возникло. А вот собрать arduino-проект и залить его оказалось сложнее. Чтобы не писать длинные Makefile'ы я просто решил добавить поддержку своей новой платы в IDE. В этом нет ничего сложного, но есть пара подводных камней, на которые я наткнулся в процессе.

Типичная рекомендация из гугла - добавить описание своей платы и программатора в файлы boards.txt и programmers.txt, поставляемые с Arduino IDE. Мне не понравился такой подход, т.к. при апгрейде IDE мои изменения будут утеряны и придется снова все повторить.

Дальнейшее гугление привело меня на форум, где описывали похожий случай. Оказывается IDE позволяет определить пользовательский конфиг в папке со скетчами. В моем случае это ~/development/arduino, значит конфиги будут лежать в ~/development/arduino/hardware/own/boards.txt и ~/development/arduino/hardware/own/programmers.txt соответственно.

После добавления описаний получилось:
$ cat ~/development/arduino/hardware/own/boards.txt
own.name=Generic ATmega8 board
own.upload.using=usbasp
own.upload.maximum_size=8192

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

Фьюзы были прошиты заранее, когда игрался с простыми примерами. В моем случае lfuse=0xff hfuse=0xd9

$ cat ~/development/arduino/hardware/own/programmers.txt
usbasp.name=USBAsp
usbasp.communication=usb
usbasp.protocol=usbasp

Теперь в IDE появился мой программатор и плата. Запускаю компиляцию и... облом не может инклудить файл WProgram.h. Далее нагуглилось, что WProgram.h - файл принадлежащий платформе "arduino". Это та самая опция own.build.core=arduino, которую я просто скопировал из примера, но не задумывался о ее назначении.

Чтобы не плодить копии сделал символическую ссылку на директорию, поставляемую с arduino ide.
$ mkdir ~/development/arduino/hardware/own/cores
$ ln -s /usr/share/arduino/hardware/arduino/cores/arduino ~/development/arduino/hardware/own/cores/arduino

После этого заработала компиляция и скетч загрузился на плату.

2 комментария:

  1. Здравствуйте, Андрей! Вы занимались с гигрометром, у меня стоит задачка
    построить геймпад (joysticks) типа Mjoy8 (16)
    http://www.joysticks.ru/joysticks/handmade/mjoy.shtml
    Но мне потребуется лишь один аналоговый вход и 3 (или один) логических входа...
    Можно его сделать на USBasp V2.0 ? Если придется программировать USBasp через USBasp , то как их соединить?
    Какой программой удобно это сделать?
    Я программы для контроллеров никогда не писал, но немного работал в BASIC.
    Чужие разработки прошивал с помощью PonyProg. Запускал 3Dпринтер на Ардуино.
    Спасибо!
    Сергей
    skopintsev.sp@gmail.com

    ОтветитьУдалить
    Ответы
    1. Здравствуйте, Сергей. В теории сделать что-то другое из USBasp возможно, но на практике будет сложно подключиться к свободным выводам контроллера. Программировать USBasp другим программатором можно - в схеме для этого предусмотрена перемычка.

      Удалить