30.04.2009

Freeduino MaxSerial

Оригинальный Arduino Serial, печатную плату которого все еще можно купить на сайте авторов проекта, увы, не лишен недостатков.

1) Расположение стабилизатора +5В L7805CV - вертикальное. На практике это означает, что будут проблемы с установкой Shield-плат. Не помогут даже т.н. pin-экстендеры - межплатные соединители, которые могут приподнять подсоединяемый Shield на 5-7 мм. Единственный разумный выход - установить стабилизатор на обратной стороне платы: эксцентрично, но проблема будет хоть как-то решена.





2) Необходимость установки неполярного электролита C8: он стоит в цепи эмиттера Т2, где изменяется полярность сигнала, а значит, обычному электролиту рано или поздно поплохеет. Найти неполярный электролит под выводное исполнение сложно, но можно - я нашел единственный вариант, но он имеет высоту 7 мм и мы снова упираемся в п.1 (проблемы с Shield-платами). Намного проще найти неполярный конденсатор в smd-исполнении и, при должной сноровке, припаять его на посадочное место выводного.



3) Некая ненадежность ключей на транзисторах как таковых: говорят, к ним есть претензии. Я слишком мало работал с приложениями Arduino по последовательному порту, поэтому комментировать эти слухи не буду.

4) Нет функции автосброса, как в Delicima и более старших платах. А ведь так удобно не тянуться к Reset-у при очередном заливании sketch-а.

5) Мелочи и придирки :) На колодку POWER не выведен reset (опять же, актуально для shield-плат) и, тем более, нет источника 3.3В (обычно около 50 мА можно взять с USB-чипа  FT232RL). И даже светодиод - всего один, питания. А хотелось бы видеть хотя бы стандартный, на pin-е digital 13.

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



Автор - небезызвестный Spif, решил все проблемы довольно просто: установил в качестве преобразователя COM-TTL микросхему MAX232. В одном корпусе этой микросхемы четыре конвертора на две приемных и две передающих линии, поэтому хватило не только на Tx/Rx, но и на DTR для автосброса. Из схемы сразу "улетели" резисторы в цепях транзисторов, сами транзисторы, зато добавились коденсаторы (Spif щедро повесил на питание ATmega аж два 100пФ-конденсатора). Мало того, есть возможность установить вместо двух конденсаторов 22пФ и кварца 16МГц трехпиновый керамический резонатор, слегка сэкономив на компонентах и числе паек.

Я заказал печатную плату (версия 2.5), подобрал компоненты, и... Вот результат:



Вполне надежно работает, я доволен. По стоимости получается почти столько же, сколько и "оринигальный" Arduino Serial.

Придраться можно только к одному моменту: расстояние для ножек конденсаторов - 2,5 мм, а хотелось бы 5 мм - такие проще достать. Впрочем, это легко решается аккуратным подгибанием ножек.

Выложил Kit с ATmega328P на "молоток", в ближайшее время опубликую подробное руководство по сборке с картинками.

Да, чуть не забыл:

Название: Freeduino MaxSerial
Процессор: ATmega168/328
Тактовая частота: 16MHz
Совместимость с Sheild-платами: есть
Совместимость с Arduino IDE: есть

Веб-страница проекта: spiffie.org/electronics/archives/microcontrollers/Build%20a%20MaxSerial%20Freeduino.html
Блог автора: spiffie.org/electronics/
Дата первого упоминания: 08.03.2008

Схема:

24.04.2009

Хак Arduino Mega и Ethernet Shield

И действительно, Ethernet Shield не будет работать с Arduino Mega. Всё из-за того, что для общения с чипом W5100 используется аппаратный SPI, а он уехал в Mega на пины 50..53.

Но умные люди в этом разобрались: надо освободить нужные пины Ethernet Shield:



И подключить их в нужное место:



Коряво, конечно, но - работает. Придется еще поправить номера пинов в Ethernet Library, это подробно расписано на страничке автора хака (nkcelectronics):

http://mcukits.com/2009/04/06/arduino-ethernet-shield-mega-hack/

23.04.2009

Соединители Shield-плат

При стыковке Shield-плат с помощью разъемов PLS / PBS периодически приходится сталкиваться с двумя проблемами:
  1. Высокие компоненты в межплатном пространстве;
  2. Необходимость "многоэтажного" соединения плат.
В первом случае зазор между платами должен быть не более 10.5 мм - именно столько получается после соединения вилки PLS (2.5 мм) и розетки PBS (8.5 мм). В свою очередь, это накладывает ограничение на высоту элементов в межплатном пространстве - например, надо позаботиться о том, чтобы высота электролитов была 7 мм.

Если нельзя понизить высоту компонентов, можно использовать вместо обычной PLS межплатный соединитель PLH:



Он добавляет 8 мм к межплатному расстоянию, и в сумме вы получите уже 8 + 10.5 = 18.5 мм! (на фото вверху - PLS, внизу - PLH).

Правда, растут габариты конструкции, да и сам соединитель довольно редкий и недешевый - стоит в 8-10 раз дороже обычной вилки.

Вторая проблема возникает в том случае, когда надо соединить не две, а три или четыре платы в эдакий многослойный бутерброд. Необходимость в этом возникает довольно часто: каждая Shield-плата выполняет свою законченную функцию, а на все случаи жизни не заложишь ;) Но вот беда - в один ряд дырок не напаять одновременно и PBS, и PLS.

Тут приходят на помощь т.н. пин-экстендеры, специальные колодки типа PBS, но с удлиненными выводами:



После установки на плату, это выглядит так, как будто бы в одних и тех же отверстиях поселились и PLS, и PBS стандартных размеров:



От такого решения сплошные плюсы, но сам разъем не очень стандартный, и я его встречал только в специализированных иностранных магазинах.

Однако, самое нестандартное решение применено в Arduino Ethernet Shield: пин-экстендеры с длиной ножек, как в PLH!



Где купить такие - понятия не имею, если вы знаете - буду благодарен за коммент ;)

21.04.2009

BoArduino

Название: BoArduino
Процессор: ATmega168/328
Тактовая частота: 16MHz
Совместимость с Sheild-платами: нет
Совместимость с Arduino IDE: есть

Веб-сайт проекта: www.adafruit.com
Блог проекта: www.adafruit.com/blog/

ladyada - довольно известный в электронно-инженерных кругах автор, именно она первой прикрутила ATmega328 к Arduino.

BoAdruino, также как и sanguino, ориентирован на комплект с макетной платой, поэтому розетки PBS заменены на штыри PLS. Есть два варианта исполнения: с USB на борту и без.

Вариант BoArduino DC:



Схема:



Вариант BoArduino USB:



Схема:




Есть интересная идея по поводу того, что вместо PLS можно поставить клеммник:







Оба варианта можно купить в виде KIT-ов, при этом USB-чип напаян (но только в ките, если брать только печатную плату - увы, нет).

Немного отклоняясь от темы: ladyada любит вести свой блог, и тут вы можете просмотреть забавное учебное видео по поводу того, как она напаивает FT232RL на BoArduino USB. Однако, не принимайте близко к сердцу :) Ради справедливости заметим, что управление "сковородкой" необязательно делать именно на основе motor shield (это такая своеобразная реклама сконструированного ladyada устройства): достаточно транзисторного ключа. А по большому счету, можно обойтись флюсом ЛТИ-120, у нас на работе именно так и распаивают ;)

Важные моменты:
  1. ручной выбор питания (джампер);
  2. применен трехпиновый керамический резонатор 16 MHz - не такой точный, как кварцевый (будет сказываться на наносекундных задержках);
  3. есть неотключаемый автосброс на DTR;
  4. влезло два светодиода - PWR и led13.
Резюме: можно посоветовать тем, кто не переживает о совместимости с Shield-платами и любит возиться с беспаечными макетками: еще компактнее, чем sanguino ( 75 на 20 мм ).

О цене: PCB стоят по 5 USD, а киты - 25 USD и 17.50 USD за USB- и DC-варианты соответственно. К последнему необходим USB-to-TTL кабель.

19.04.2009

LCD для Arduino

Ранее я уже расписывал, как подключить семисегментный дисплей к Arduino.

Семисегментный LED-дисплей прежде всего хорош тем, что имеет достаточно простую и надежную конструкцию, а при опытно подобранном токе через сегменты, легко читаем и с нескольких метров, и в кромешной темноте ;)

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

Но гораздо проще использовать знакосинтезирующие ЖКИ-дисплеи, которые благодаря китайскому трудолюбию можно приобрести теперь на каждом углу.

Для экспериментов возьмем WinStar WH1602B-YYH-CTK:







Как видите, на самом деле - это модуль, состоящий из совместимого с Hitachi HD44780U контроллера, ЖКИ-матрицы и светодиодной подсветки.

Дисплей имеет две строки по 16 знакомест в каждой, параллельный интерфейс доступа, память, русский шрифт и даже возможность загрузить свой собственный знакогенератор.

Главное - не забыть, что на него подается три питания: одним питается контроллер со всей логикой (обязательно), вторым - LED-подсветка (опционально), а третьим - сам LCD-дисплей, и последнее напряжение надо уметь регулировать.

Для начала, вооружимся datasheet-ом и соберем типовую схему:



Мне для этого потребовался фрагмент вилки PLS на 16 контактов, чтобы дисплей легко стыковался с беспаечной макетной платой:



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



Дальше надо выбрать ширину параллельного интерфейса: 8 или 4 бит. Дело, конечно, не в скорости обмена, а в количестве цифровых входов Arduino, которые будут потеряны после подключения дисплея. Если выбрать 8-битный режим, то потребуется 11 выходов: к 8-битной шине данных добавляются линии RS, R/W и E(nable).

4-битная шина, соответственно, займет 7 выходов (если цифровых выходов все-таки не хватает, можно использовать и аналоговые, после переключения их в соответствующий режим), передача байта происходит в два цикла по линиям DB7-DB4, сначала старший ниббл, потом младший.

Хорошая новость состоит в том, что все эти тонкости нам не особенно важны: в основном, благодаря библиотеке LiquidCrystal (входит в Arduino IDE). Вот простой способ соединить Arduino и LCD-дисплей без паяльника:



В качестве тестового скетча можно использовать HelloWorld.pde из LiquidCrystal:

#include <LiquidCrystal.h>

// LiquidCrystal display with:
// rs on pin 12
// rw on pin 11
// enable on pin 10
// d4, d5, d6, d7 on pins 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

void setup()
{
// Print a message to the LCD.
lcd.print("hello, world!");
}

void loop()
{
}

Самая главная строка - это конструктор объекта lcd. Параметрами надо указать, к каким цифровым выходам Adruino подключены соответствующие выводы дисплея. Основное тело loop() пустое, поскольку инициализация и вывод текста в дисплей целиком происходит в setup(). Для нас это означает, что sketch отработает один раз после нажатия на reset, сразу после включения питания или же сразу после загрузки sketch-а в Arduino.

Итак, все готово, можно включать. Если дисплей пуст, обратите внимание на VO (питание сегментов, пин 3). Я взял потенциометр 20К, включил его между GND и 5V, а среднюю точку подключил к VO. Немного повращав отверткой ползунок, я легко добился читаемости символов:



Светодиодная подсветка "сидит" на двух последних пинах дисплейной колодки: 15 и 16 (анод и катод). Подключать ее вовсе не обязательно, но, при желании можно также воспользоваться типовой схемой:



Я использовал R = 34 Ом, яркость была средняя...

Подводя итог: LCD к Arduino можно подключить довольно быстро: есть библиотека для работы, хоть и максимально упрощенная (читать из дисплея, а также загружать знакогенератор она не умеет). Если верить документации, ток потребления дисплея = 1,2 мА, а LED-подсветки @ 4,2 В = 130 мА.

Встречаются модификации с разным цветом и типом подсветки (или вообще без нее), другим количеством рядов (1,2,4), другим количеством знакомест в ряду (8,16). Если все равно не хватает, надо подумать о графическом дисплее, но про это - как-нибудь в другой раз ;)

13.04.2009

Sanguino

Название: Sanguino
Процессор: ATmega644P
Тактовая частота: 16MHz
Совместимость с Sheild-платами: нет
Совместимость с Arduino IDE: да (поставляется в виде заменяемых в ArduinoIDE 0013 файлов)

Веб-сайт проекта: sanguino.cc
Блог проекта: blog.reprap.org

Название происходит от sanguine, которое имеет два значения: 1) бодрый, надежный, уверенный 2) кроваво-красный. И правда, печатная плата, на которой он выполнен - красного цвета ;)



В своем роде, Sanguino являлся предшественником Arduino Mega. Взглянем на основные характеристики процессора:









Память программ64K
RAM4K
EEPROM2K
Аппаратные UART2
Цифровые пины32
Шим-выходы6
Аналоговые пины8


По идее, именно так и надо было бы удваивать память Arduino, но увы: скорее всего, корпус PDIP-40 помешал бы поместился в форм-факторе оригинального Arduino. Следовательно, с Shield-платами можно попрощаться.

Вот так выглядит Sanguino на собственной макетной Shield-плате с клеммниками:



Схема:



Продается в виде KIT-а:



Но можно собрать на беспаечной



... или обычной макетке:



Основные фичи:
  • Свтодиоды: два - питание, pin 13
  • Исполнение выходов: штекер PLS (удобно устанавливать в макетку)
  • Автосброс: есть, на RTS
  • Отключение автосброса: есть, джампером
  • Выбор источника питания: есть, переключатель USB/DC
  • Разъем ICSP: есть, 2x3
  • Разъем JTAG: есть, 2x5
  • Порт для программирования: TTL (требуется USB2TTL-кабель)
Полный список отличий от оригинального Arduino авторы указали здесь.

Основные преимущества:
  • относительная компактность;
  • увеличен размер ОЗУ;
  • возможность самостоятельной сборки на PCB или макетной плате;
  • JTAG
Основные недостатки:
  • нет полноценного USB/COM для заливания sketch-ей.
Мне особенно понравился переключатель питания (до этого везде ставили джампер):



Резюме: можно предложить тем, кто не хочет платить 49 EUR за Arduino mega: 25 USD за KIT - дешево и сердито, если не стоит проблема совместимости с Shield-платами.

11.04.2009

Итоги голосования по Arduino

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

Пользователи Arduino BT (Bluetooth), BoArduino, LilyPad в мой блог не заходили. У меня самого пока еще есть LilyPad, но для чистоты эксперимента я в голосовании участия не принимал. Всего проголосовало 34 человека.

Самая популярная модель на текущий момент - Duemilanove (26%), далее идут Freeduino и Diecimila (по 20%), потом самодельные Arduino Serial (14%). Наконец, у кого-то есть оригинальные Arduino Serial и Arduino Nano (по 2%).

Абсолютным победителем является ответ "нет никакого" (32%). Я могу только пожелать этим людям все-таки поскорее обзавестись этим великолепным инструментом, тем более, что его можно легко собрать самостоятельно, а также заказать в России или за рубежом.

И, конечно же, я должен признать, что набор вариантов в списке голосования был далеко не полным... Возможно, у кого-то есть аналоги Arduino, которые в него не попали. Приношу свои извенения и постараюсь частично исправить эту оплошность под тегом ArduinoCompatible.

09.04.2009

Arduino-совместимые

Иногда мне приходят письма с самыми разнообразными вопросами по поводу Arduino.

После очередного "у меня есть Freeduino, но я про него толком ничего не знаю, нет документации, только диск", я решил посвятить в моем блоге немного места аналогам Arduino под тегом ArduinoCompatible. Среди них попадаются и достойные решения, и не очень, но в целом - чем их больше, тем всем нам лучше.

В чем причина появления аналогов, и почему они не называются "Arduino"? Тут все относительно просто.

Схемы, чертежи печатной платы, а также софт доступны для Arduino под лицензией Creative Commons Attribution Share-Alike 2.5. Это, конечно, не BSD-лицензия, но все-таки довольно свободная.

Однако, авторы "застолбили" за собой название "Arduino", сделав собственной торговой маркой. Стоит ли их порицать за это? Не думаю. Тем более, что они предлагают присоединиться к сообществу и внести свой вклад всех желающих.

Через некоторое время появился Freedino, который уже торговой маркой не являлся. Вообще, я убедился: редкий блоггер-электронщик не имеет собственного аналога Arduino, в той или иной степени совместимого с оригинальным :)

Совместимость бывает разной степени:
  • полная: пишем с помощью Arduino IDE, пристыковываем Shield-платы;
  • программная: пишем с помощью Arduino IDE, но Shield-платы не подойдут;
  • никакая: роднит с Arduino только сама идея.
(продолжение следует...)

05.04.2009

+1К свободной памяти для Arduino

Как известно, в Arduino используется bootloader - специальная подпрограмма, которая постоянно находится в самом конце памяти программ. После сброса она получает управление и через последовательный интерфейс (SPI, пины Rx и Tx) зашивает новую микропрограмму (sketch) в верхние адреса памяти, а затем и вовсе отдает ей управление.

Строго говоря, bootloader необязателен. В готовом изделии можно одним легким движением поставить FUSE-бит BOOTRST в 1, и управление после сброса будет передаваться непосредственно программе, по адресу 0x0000 (именно так я и сделал с ATmega в светодиодном индикаторе).

Испокон веков ;) размер bootloader-а Arduino был 2048. Конечно, реально-то он был чуть меньше, но размер bootloader-а кодируется двумя FUSE-битами BOOTSZ1 и BOOTSZ0. Таким образом, для ATmega168P есть четыре фиксированных размера: 256, 512, 1024 и 2048 байт. Для ATmega328P тоже четыре размера, но поскольку памяти программ у него в два раза больше, то разработчики чипа "сдвинули" размеры bootloader-а в сторону увеличения: 512, 1024, 2048, 4096.

Те, кто писал программы на ассемблере, обычно загадочно улыбаются в ответ на мою фразу "скетч занял пять килобайт в памяти программ". Оно и понятно - при программировании на C память программ съедается стремительно, зато и сама программа пишется значительно быстрее. Именно поэтому ATmega328P заменил на боевом посту ATmega168 - в некоторых случаях просто не хватало 16К памяти программ.

Стоп-стоп, не 16, а 14-ти ( минус 2К на бутлоадер ). После замены процессора становится свободно 30К:



Но что делать, если скетч занял 30936 байт? Переходить на ассемблер?

Старшие товарищи давно бились над задачей сокращения размера bootloader-а хотя бы до 1К. Совместными усилиями они этого достигли, о чем и написал в своем блоге уважаемый Spiff. Последовательность действий такая:
  1. Берется новый исходник bootloader-а, компиляется в .hex
  2. Результат зашивается в память ATmega, корректируются fuse-биты
  3. Чтобы ArduinoIDE поняла, что у нее стало больше памяти для результата компиляции, правится boards.txt.
Результаты компиляции можно взять у Spiff-а в блоге, но есть одна беда - он выложил неправильно скомпилированные результаты. Я неделю некоторое время помучился с его .hex-файлом, пока не принял решение "чисто на всякий случай" перекомпилять. Помогло!

Итак, вот мой результат компиляции: bootloader_1k_0015.zip. Его надо распаковать в каталог с Arduino IDE 0015, при этом изменятся две секции в списке плат, станет так: "Arduino Duemilanove w/ ATmega 328P 1k" и "Arduino Diecemila or Duemilanove w/ ATmega 168 1K". Выбирайте нужную, затем можно прошить новый bootloader через Arduino IDE, дальше - как обычно.

Сами понимаете, что если прошить 1К-bootloader, то даже немодифицированная Arduino IDE будет замечательно работать, но не наоборот :(

Более правильно было бы добавить секции, но тогда Arduino IDE не сможет корректно отобразить в своем окне информацию об ошибках, сославшись на длинную цепочку исключений java - согласитесь, это не очень удобно.

Я скомпилировал bootloader-ы для тех процессоров, для которых смог 100%-но убедиться в работоспособности - с трудом, но нашел таки ATmega168P :) Во всех моих Arduino сейчас работает ATmega328P - выписал целую упаковку из-за границы, и, как всегда, раздаю остатки через "молоток"...