28.07.2010

Arduino и Python

Теперь можно использовать Arduino из программ на Python. Сказать спасибо за это надо г-ну SingAlong, выложившему свой код  на сайте github.com.

Для использования надо загрузить специальный скетч prototype.pde в Arduino и подключить библиотеку к скрипту. После этого можно писать так:

#the blink program 


#import the lib 
from arduino import Arduino 

import time 

#specify the port as an argument 
my_board = Arduino('/dev/ttyUSB1') 

#declare output pins as a list/tuple 
my_board.output([11,12,13]) 

#perform operations 
i=0 
while(i<10): 
  my_board.setHigh(13) 
  time.sleep(1) 
  my_board.setLow(13) 
  i+=1

Пока что библиотека находится в самой ранней стадии - версия 0.1, умеет мапить вызовы pinMode, digitalWrite и digitalRead, а также analogRead и analogWrite. Собственно, я бы на месте товарища взял бы сразу библиотеку Firmata - хотя бы не надо изобретать велосипед собственный скетч с протоколом обмена. 

Сам предпочитаю Perl, и если для него еще не сделана адаптация - может быть так и придется поступить (если руки дойдут, конечно же :)

26.07.2010

Arduino 1.0

Вот, оказывается, с чем связан более чем полугодовой перерыв в выпуске ArduinoIDE - полным ходом идет подготовка к версии ArduinoIDE 1.0. Полный список предлагаемых изменений можно посмотреть в google Code. Авторы упоминают, что есть досадные раздражающие мелочи, которые они давно хотели "подчистить", но на самом деле некоторые из них мелочами вовсе и не выглядят. Мало того, в ближайшей перспективе нам грозит потеря 100%-ой совместимости синтаксиса (что вообщем-то не смертельно). 

Итак, вот что планируется по поводу самой IDE:
  • сменить расширение файла '.pde', доставшееся по наследству от Processing, чтобы наконец внести ясность и перестать в них путаться;
  • облагородить тулбар, перерисовав иконки;
  • добавить возможность загружать скетчи и через ISP-программатор (пока так можно только зашивать бутлоадер), а также из командной строки;
  • сделать автоопределение последовательного порта и причесать не совсем логичное (а зато - какое привычное ;) меню выбора платы;
  • возможность добавлять, линковать и распространять с проектом HTML-документацию;
  • улучшенная диагностика, если плату все-таки перепутали (выбрали одну, а подключили другую).
Грядущие изменения языка:
  • добавить функцию sleep() для приложений, вынужденных экономить энергию (я и сам подумывал о подобном, поскольку расточительное потребление холостого loop категорические несовместимо с батарейным питанием);
  • оптимизировать digitalWrite() - споры про это идут давно; в общем случае, она отвечает за трансляцию номера пина Arduino в конкретный порт и пин ATmega;
  • новое API для работы с временем - hour(), second(), minute() и т.п;
  • добавить новые функции для манипулирования аппаратными таймерами - пока что таймеры распределяются под тики и pwm и это полностью скрыто от скетчеписателя;
  • переименовать analogWrite() в pwm();
  • добавить специальные функции для отключения / подключения подтягивающих резисторов типа pullup() / noPullup();
  • добавить функции чтения / записи порта целиком portWrite() / portRead() (правда, не совсем понимаю - зачем, такая возможность заложена в самом avr-gcc);
  • возможность callback-функций для последовательного порта - наподобие serialEvent() в Processing, сделать write() неблокирующим.
Ну и по поводу библиотек:
  • добавить в Ethernet поддержку DHCP и DNS;
  • добавить библиотеку SPI;
  • переименовать LiquidCrystal в LCD;
  • переименовать Wire в что-то другое ;)
  • вынести Sprite и Matrix из ядра;
  • сделать автовычисление зависимостей между библиотеками.
На этот список еще пока можно повлиять, если есть такое желание - подпишитесь на список рассылки разработчиков и внесите свои 5 копеек ;) ибо сила сообщества суммируется из усилий каждого его участника ;) 

23.07.2010

Уроки Wiring (5)

Урок 5. Нажми на кнопку!

(продолжение, начало см. Урок 4, Немного о синтаксисе Wiring)

... получишь результат!" - пела когда-то группа "Технология". На Ардуино, к сожалению, всего одна кнопка: бесспорно важная, но малоинтересная.  Нажимая на нее, мы просто перезапускаем скетч с самого начала.

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

21.07.2010

AVR-Doper

До недавнего времени я пользовался для программирования своих МК USBasp и не знал никаких проблем. Но однажды приключилась необходимость запрограммировать ATmega1280 на плате Arduino Mega, и каково же было мое удивление, когда avrdude... выругался на несовпадение записанных и считанных данных в процессе верификации.


При этом зашитый в Mega бутлоадер функционировал корректно, скетчи заливались и исправно работали -  скорее всего ошибку можно было игнорировать, но - с другой стороны - а что, если при программировании случится настоящая ошибка? Как я об этом узнаю?

Пришлось лезть в интернет и искать что-то для самостоятельного изготовления. Честно говоря, мне хотелось двух вещей - программное управление скоростью прошивки и совместимости с AVRStudio. Первый пункт - весьма важная деталь, когда надо программировать партию МК: чтобы это произошло быстро, на USBasp надо сначала поставить перемычку "SLOW SCK", зашить фьюзы - чтобы МК перешел с внутренней RC-цепочки 1МГц на внешний кварц, потом снять эту перемычку и шить на нормальной скорости. Вот именно это "снять-поставить" слегка раздражало. Ну а про AVRStudio - тут все ясно, чтобы не страдало удобство работы в родной для МК ATMEL среде. Бывает нужно крайне редко, но все-таки полезная вещь.

В такой ситуации многие посоветовали бы мне схему Андрея Рыжкова, использующую libusb и релизующую функционал AVR910. Спору нет, отличная конструкция (даже в наборах МастерКит видел), но лично меня она в свое время опечалила скоростью работы. Однако стоит учесть тот момент времени, когда Андрей опубликовал свою разработку - это было очень сильно востребовано. Поэтому я еще раз мысленно поблагодарил его за труд, но поиски - продолжил.

К моему сильному удивлению, необходимое мне устройство нашлось на просторах все того же проекта V-USB, и называется это чудо техники  AVRDoper:


Первое и самое главное - он совместим с протоколом STK500 v2, а значит будет работать с AVRStudio. Далее, кроме внутрисхемного последовательного программирования, он умеет последовательное высоковольтное - было бы актуально, если бы я собирал схемы на ATtiny. Программное управление скоростью программирования - есть. Есть даже возможность считывания через USB отладочной информации с подключенного МК - именно это хотел сделать автор USBasp Thomas Fischl, но так у него, видать, руки и не дошли.

Вот схема с выброшенным из нее узлом высоковольтного программирования:



Программное обеспечение у него построено в любимом стиле Objective Development - блоками. То бишь, фичи можно включать и отключать выборочно, "втискивая" в доступный объем памяти МК необходимый набор. В классическом варианте есть режимы STK500 и USB-HID, но нет возможности обновить прошивку самого программатора без извлечения из схемы его МК. Однако, можно чем-то пожертвовать (например, функцией прозрачной передачи последовательных данных для отладки МК) и включить возможность обновления прошивки по USB через bootloader (требует навыков обращения с компилятором avr-gcc ;)

Кстати, это еще не всё ;) Предусмотрены программные конфигурации для работы AVRDoper-а внутри родственных ему проектов USBasp и metaboard. Правда, для этого надо, чтобы USBasp был собран на ATmega8. Готовые прошивки лежат в тарболле с исходниками - остается только залить и протестить ;)

Построить прототип на макетке, к сожалению, не представлялось возможным - авторы использовали микруху 74AC126, которую мне не удалось достать в DIP-корпусе. Так что сразу пришлось травить плату, которая, по счастью, оказалась полностью работоспособной.

Краткий итог: по скорости AVRDoper не уступает USBasp, шьет ATmega1280 "на ура", схема без  высоковольтной части влезла на одностороннюю плату под корпус GAINTA 403:


Единственное, не смог заставить работать в режиме STK500 под Linux - есть какие-то заморочки с  /dev/ttyACM0. Разбираться лень, тем более, что под Windows оно работает во всех режимах, а под Linux я пользую avrdude и меня вполне устраивает USB HID.

Основную часть скриптов уже переделал - наслаждаюсь отсутствием надобности передергивать SLOW SCK ;)

Купить AVRDoper можно, например, здесь.

18.07.2010

Систематизация

После очередных вопросов от читателей решил просмотреть блог и понял, что написал я уже порядочно, но кроме тегов заметок всё это никак не систематизировано. Решил завести статические страницы, в которых буду группировать информацию для более удобного доступа - типа тематических оглавлений - ссылки на них расположены в шапке страницы (прямо под названием блога). Также наметил несколько новых статей-уроков по Arduino, для совсем начинающих и не только ;)