Оригинальный 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
Схема:
Программирование Arduino, оживление микроэвм Электроника МК-90, аппаратный хакинг.
30.04.2009
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/
Но умные люди в этом разобрались: надо освободить нужные пины Ethernet Shield:
И подключить их в нужное место:
Коряво, конечно, но - работает. Придется еще поправить номера пинов в Ethernet Library, это подробно расписано на страничке автора хака (nkcelectronics):
http://mcukits.com/2009/04/06/arduino-ethernet-shield-mega-hack/
23.04.2009
Соединители Shield-плат
При стыковке Shield-плат с помощью разъемов PLS / PBS периодически приходится сталкиваться с двумя проблемами:
Если нельзя понизить высоту компонентов, можно использовать вместо обычной PLS межплатный соединитель PLH:
Он добавляет 8 мм к межплатному расстоянию, и в сумме вы получите уже 8 + 10.5 = 18.5 мм! (на фото вверху - PLS, внизу - PLH).
Правда, растут габариты конструкции, да и сам соединитель довольно редкий и недешевый - стоит в 8-10 раз дороже обычной вилки.
Вторая проблема возникает в том случае, когда надо соединить не две, а три или четыре платы в эдакий многослойный бутерброд. Необходимость в этом возникает довольно часто: каждая Shield-плата выполняет свою законченную функцию, а на все случаи жизни не заложишь ;) Но вот беда - в один ряд дырок не напаять одновременно и PBS, и PLS.
Тут приходят на помощь т.н. пин-экстендеры, специальные колодки типа PBS, но с удлиненными выводами:
После установки на плату, это выглядит так, как будто бы в одних и тех же отверстиях поселились и PLS, и PBS стандартных размеров:
От такого решения сплошные плюсы, но сам разъем не очень стандартный, и я его встречал только в специализированных иностранных магазинах.
Однако, самое нестандартное решение применено в Arduino Ethernet Shield: пин-экстендеры с длиной ножек, как в PLH!
Где купить такие - понятия не имею, если вы знаете - буду благодарен за коммент ;)
- Высокие компоненты в межплатном пространстве;
- Необходимость "многоэтажного" соединения плат.
Если нельзя понизить высоту компонентов, можно использовать вместо обычной PLS межплатный соединитель PLH:
Он добавляет 8 мм к межплатному расстоянию, и в сумме вы получите уже 8 + 10.5 = 18.5 мм! (на фото вверху - PLS, внизу - PLH).
Правда, растут габариты конструкции, да и сам соединитель довольно редкий и недешевый - стоит в 8-10 раз дороже обычной вилки.
Вторая проблема возникает в том случае, когда надо соединить не две, а три или четыре платы в эдакий многослойный бутерброд. Необходимость в этом возникает довольно часто: каждая Shield-плата выполняет свою законченную функцию, а на все случаи жизни не заложишь ;) Но вот беда - в один ряд дырок не напаять одновременно и PBS, и PLS.
Тут приходят на помощь т.н. пин-экстендеры, специальные колодки типа PBS, но с удлиненными выводами:
После установки на плату, это выглядит так, как будто бы в одних и тех же отверстиях поселились и PLS, и PBS стандартных размеров:
От такого решения сплошные плюсы, но сам разъем не очень стандартный, и я его встречал только в специализированных иностранных магазинах.
Однако, самое нестандартное решение применено в Arduino Ethernet Shield: пин-экстендеры с длиной ножек, как в PLH!
Где купить такие - понятия не имею, если вы знаете - буду благодарен за коммент ;)
22.04.2009
Несовместимость Mega и Ethernet Shield
Вчера изучал описание Shield-платы Ethernet на сайте магазина Arduino, и увидел вот такое замечание:
NOT COMPATIBLE WITH ARDUINO MEGA BOARD.
Интересно, почему так... И лечится ли это программно, разумеется.
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, у нас на работе именно так и распаивают ;)
Важные моменты:
О цене: PCB стоят по 5 USD, а киты - 25 USD и 17.50 USD за USB- и DC-варианты соответственно. К последнему необходим USB-to-TTL кабель.
Процессор: 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, у нас на работе именно так и распаивают ;)
Важные моменты:
- ручной выбор питания (джампер);
- применен трехпиновый керамический резонатор 16 MHz - не такой точный, как кварцевый (будет сказываться на наносекундных задержках);
- есть неотключаемый автосброс на DTR;
- влезло два светодиода - PWR и led13.
О цене: 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). Если все равно не хватает, надо подумать о графическом дисплее, но про это - как-нибудь в другой раз ;)
Семисегментный 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. Взглянем на основные характеристики процессора:
По идее, именно так и надо было бы удваивать память Arduino, но увы: скорее всего, корпус PDIP-40 помешал бы поместился в форм-факторе оригинального Arduino. Следовательно, с Shield-платами можно попрощаться.
Вот так выглядит Sanguino на собственной макетной Shield-плате с клеммниками:
Схема:
Продается в виде KIT-а:
Но можно собрать на беспаечной
... или обычной макетке:
Основные фичи:
Основные преимущества:
Резюме: можно предложить тем, кто не хочет платить 49 EUR за Arduino mega: 25 USD за KIT - дешево и сердито, если не стоит проблема совместимости с Shield-платами.
Процессор: ATmega644P
Тактовая частота: 16MHz
Совместимость с Sheild-платами: нет
Совместимость с Arduino IDE: да (поставляется в виде заменяемых в ArduinoIDE 0013 файлов)
Веб-сайт проекта: sanguino.cc
Блог проекта: blog.reprap.org
Название происходит от sanguine, которое имеет два значения: 1) бодрый, надежный, уверенный 2) кроваво-красный. И правда, печатная плата, на которой он выполнен - красного цвета ;)
В своем роде, Sanguino являлся предшественником Arduino Mega. Взглянем на основные характеристики процессора:
Память программ | 64K |
RAM | 4K |
EEPROM | 2K |
Аппаратные UART | 2 |
Цифровые пины | 32 |
Шим-выходы | 6 |
Аналоговые пины | 8 |
По идее, именно так и надо было бы удваивать память Arduino, но увы: скорее всего, корпус PDIP-40 помешал бы поместился в форм-факторе оригинального Arduino. Следовательно, с Shield-платами можно попрощаться.
Вот так выглядит Sanguino на собственной макетной Shield-плате с клеммниками:
Схема:
Продается в виде KIT-а:
Но можно собрать на беспаечной
... или обычной макетке:
Основные фичи:
- Свтодиоды: два - питание, pin 13
- Исполнение выходов: штекер PLS (удобно устанавливать в макетку)
- Автосброс: есть, на RTS
- Отключение автосброса: есть, джампером
- Выбор источника питания: есть, переключатель USB/DC
- Разъем ICSP: есть, 2x3
- Разъем JTAG: есть, 2x5
- Порт для программирования: TTL (требуется USB2TTL-кабель)
Основные преимущества:
- относительная компактность;
- увеличен размер ОЗУ;
- возможность самостоятельной сборки на 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.
Пользователи 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, в той или иной степени совместимого с оригинальным :)
Совместимость бывает разной степени:
После очередного "у меня есть 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. Последовательность действий такая:
Итак, вот мой результат компиляции: 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 - выписал целую упаковку из-за границы, и, как всегда, раздаю остатки через "молоток"...
Строго говоря, 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. Последовательность действий такая:
- Берется новый исходник bootloader-а, компиляется в .hex
- Результат зашивается в память ATmega, корректируются fuse-биты
- Чтобы ArduinoIDE поняла, что у нее стало больше памяти для результата компиляции, правится boards.txt.
Итак, вот мой результат компиляции: 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 - выписал целую упаковку из-за границы, и, как всегда, раздаю остатки через "молоток"...
Подписаться на:
Сообщения (Atom)