28.11.2008

Arduino своими руками

Часть III

(окончание, см. начало - Часть I и Часть II)

Итак, микроконтроллер заработал, но нам этого мало: теперь надо сделать интерфейс для COM-порта, чтобы Arduino мог общаться с PC, в первую очередь для заливания sketch-ей.

Глядим в схему, подбираем детали:
  • Разъем DRB9F на плату, угловой - 12,5 руб.
  • Транзистор T1 - BC547 - 3,8 руб.
  • Транзистор T2 - BC557 - 3,5 руб.
  • Два диода D2,D3 1N4148 - 2 x 2,5 = 5 руб.
  • Два светодиода LED0, LED1 - 2 x 3,3 = 6,6 руб.
  • Резисторы 10K - R5,R8,R7,R10 - 4 x 0,95 = 3,8 руб.
  • Резистор 4К7 R9 - 0,95 руб.
  • Резисторы 1K R1,R2,R6 - 3 x 0,95 = 2,85 руб.
  • Неполярный электролит C9 10 мкФ - 3 руб.
  • Штыревой соединитель PLS40 (из него кусачками отделяется три пина для джампера выключения порта, остальные 37 обязательно пригодятся ;) - 13 руб.
  • Джамперы (стоит поискать на старых материнках, и только если нет под рукой - покупать) - 8,5 руб.
Итого: 63,5 руб.

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

Придется достать сверло на 4..5 мм и просверлить пару дырок для креплений разъема COM-порта (если только вы не купили чудо-макетку с посадочным местом под разъем DRB9F).

Как говорит автор схемы, "иногда поступающая по COM-порту от PC информация может препятствовать запуску скетча", поэтому предусмотрен джампер JP0. У него три положения - "COM-порт работает" - к VСС, "COM-порт блокирован" - к GND и, если снять его вовсе - получили 2 свободных цифровых входа.


Завершающий штрих: подключение внешнего источника питания, например батарейки "Крона". Продолжаем подбирать компоненты:
Итого: 86 руб.



Как и в случае с DRB9F, в плате надо сверлить дополнительные дырки для разъема питания ("плюс" обычно делают в центре). Если подключить выход 7805 к ранее запланированному джамперу (см. Часть II, сборка узла микроконтроллера), то можно переключаться между питанием от батарейки и от USB. Внешний источник может выдавать от +7В до +20В, но больше +16В не рекомендуется, а еще лучше +9В, чтобы не очень сильно грелся собственно стабилизатор.


Вот и все, готово. Перед тем, как приступить к написанию собственных sketch-ей,  осуществим финальную проверку:

File -> Sketchbook -> Examples -> Digital -> Blink

Дальше - Verify/Compile (Ctrl-R), после окончания жмите на кнопку сброса на Arduino, затем File -> Upload to I/O board (Ctrl-U). Полюбуйтесь, как весело перемигиваются светодиоды Rx и Tx, подождите 6 секунд и наблюдайте мигание LED13.

Что еще добавить?
  1. Бюджет разработки, включая программатор не превышает 500 рублей. Цены имеют свойство меняться со временем - может быт, что-то будет дороже, что-то дешевле (некоторые компоненты вообще могут оказаться под рукой или аккуратно демонтированы с ненужных устройств);
  2. Если мало 8К памяти программ, используйте ATmega168-20PU. Микроконтроллеры имеют различный объем Flash и SRAM, но полностью совместимы по корпусам. Тип платы надо будет переставить на Tools -> Board -> Ardiono NG or older w/ATmega168, прошить соответствующий bootloader. С корректно установленным типом платы ArduinoIDE будет правильно учитывать тип МК при компиляции, а текст скетча при этом никак не изменится. Правда, по стоимости будет чуть дороже;
  3. Можно попробовать подключить схему автосброса - Arduino умеет ненадолго устанавливать сигнал DTR перед заливанием sketch-а, и если он соединен со схемой сброса, отпадает необходимость нажимать Reset перед каждой загрузкой скетча. Функция имеет побочный эффект - Arduino может быть сброшен в любой момент программой, которая дергает DTR и даже при отключении или подключении кабеля к COM-порту.
  4. Можно добавить гребенку для непосредственного подключения USB/Serial Converter, если оно у вас есть:


27.11.2008

Arduino своими руками

Часть II

(продолжение, см. начало - Часть I)

Итак, программатор готов. Теперь надо выбрать ту схему Arduino, которая лучше всего подходит для самостоятельной реализации (а существует их приличное количество).

По сути, Arduino представляет собой два устройства: интерфейс последовательного порта и микроконтроллер ATMEGA. Последние модификации Ardiono подключаются к PC по USB, используя для преобразования в последовательный порт с TTL-уровнями микросхему FTDI 232R, а у нее неприятная особенность - шаг ножек всего 0,65 мм (варианта в PDIP не выпускается). Я не говорю уже об ArduinoBT, на котором стоит Bluegiga WT11 - не самый легкодоставаемый и дешевый компонент. Наконец, у некоторых Arduino вообще отсутствует интерфейсная микросхема (примеры - Arduino Mini, LilyPad Arduino Main Board) последовательного порта, которым пожертвовали ради миниатюризации. Но в этом случае для загрузки sketch-ей все равно нужен USB Serial Converter, уже готовый модуль с чипом FTDI 232R, что снова возвращает нас к проблеме монтажа 0,65 мм ножек.

Остается Arduino Serial, где используется "настоящий" COM-порт. Цена вопроса - пара диодов и транзисторов, дешево и сердито. Хотя существуют более простые версии 1 и 2, для самостоятельного изготовления наиболее подходит третья версия - Severino.

Если нет желания самостоятельно травить плату хлорным железом, берем "макетку". Я выбрал готовую плату размером 160 х 100 мм, односторонней печатью и стандартным шагом дырок 2,54 мм. Чтобы немного сократить объем пайки, большинство дырок "сдвоено":



Также неплохо иметь группу дырок с шахматным порядком, потому что именно так расположены выводы разъема DB9 для COM-порта. Мне помогла специальная секция на краю платы для монтажа SOIC-корпусов (шаг выводов 1,27мм):



В крайнем случае, можно брать макетку и без такого изыска - на DB9 используется только один ряд контактов 1-5, остальные (4-9) можно смело откусывать.

Вооружаемся принципиальной схемой Severino (я буду ссылаться на нее), начинаем со сборки модуля микроконтроллера. Потребуются детали:
  • Макетная плата - 150 руб.
  • IC1 ATMEGA8-16PU (в корпусе PDIP-28) - 60 руб.
  • Панелька SCS28 (узкая DIP28S) - 3 руб.
  • Кварц Q1 16.0 МГц - 6 руб.
  • Две керамических емкости для кварца по 22pF (C1, C2) - 1 x 2 = 2 руб.
  • Кнопка тактовая 6х6 мм (S1, сброс) - 2 руб.
  • R11 резистор 10К для притягивания сброса к Vcc - 1 руб.
  • Емкость на шину питания 100nF (С6) - 1 руб.
  • Гребенка PLD-6 (разъем ICSP) - 5 руб.
  • Розетки PBS - две 08, две 06 - 5 х 4 = 20 руб.
  • Светодиод LED14 PWR - 2 руб.
  • Светодиод LED13 - 2 руб.
  • Ограничители тока светодиодов - R3,R4 - 1 x 2 = 2 руб.
  • Электролит C5 100uF (мкФ) для фильтрации помех по питанию - 2 руб.
  • Разъем USB-B 1J - 15 руб.
  • Гребенка PLS-3 для джампера "Выбор питания" - 1 руб.
Итого - 274 руб.

Лично я решил не ставить дроссель L1 на плату (уж больно громоздким мне показался приобретенный экземпляр) и использовал решение из версий 1, 2 - один конденсатор 100nF между соединенными попарно лапками Vcc (7) и Aref (21) - к +5В, и GND (22 и 8) - к земле. Вроде работает нормально. Питаться пока придется от USB, поэтому пришлось установить дополнительный разъем и подключить его "+" через джампер-блок, чтобы иметь возможность выбирать источник питания (от USB или от батарейки).

Пара слов по поводу розеток и гребенок с шагом 2,54. С гребенками все просто - из длинной PLS-40 или PLD-80 можно накусать любое количество ножек (и наоборот - составить одну большую гребенку из мелких).



А вот с розетками PBS так просто не получится - они более нежные, придется повозиться с напильником. Поэтому, лучше все-таки покупать розетки на нужное число контактов.

Розетки PBS служат для стыковки с платами расширения (т.н. Shields), если вы собираетесь пристыковывать их к Arduino без лишней возни, надо соблюсти в точности расположение розеток согласно чертежу платы - это стандарт Arduino. Но на макетке с фиксированным шагом 2,54 это сделать практически невозможно, и я просто раскидал их по плате в произвольном порядке, в надежде снабдить в последующем наклейками или надписями.



Итак, собираем все это, уделяя повышенное внимание гребенке ICSP. Подключаем к LPT-программатору (см. первую часть). Запускаем предварительно скачанный софт, в меню ставим Tools -> Board -> Ardiono NG or older w/ATmega8. Потом - Tools -> Burn bootloader -> w/Parallel Programmer. Дожидаемся завершения операции.

Если все правильно, то при каждом нажатии на тактовую кнопку SC1 светодиод LED13 будет радостно помаргивать - так сигнализирует о своем запуске bootloader. Если этого добиться не удалось, проверьте еще раз:
  • правильность монтажа светодиода LED13
  • не подключено ли питание через USB - для ICSP оно не требуется
  • проверить монтаж вообще. пока элементов мало - это несложно
(окончание следует, Часть III)

26.11.2008

Arduino своими руками

Часть I.

Как быть, если надо поэкспериментировать с Arduino, но покупать (по каким-то неуважительным причинам) совершенно не охота? Если вы умеете держать в руках паяльник, не составит большого труда соорудить его самостоятельно. Продвинутые пользователи, имеющие опыт травления печатных плат, могут воспользоваться Severino. Но для начала вполне можно ограничиться "макеткой".

"Сердце" всех плат Arduino - это микроконтроллер ATmega (точнее, ATmega8, ATmega168 или ATmega328P), который требует прошивки, поэтому для начала надо обзавестись программатором. Готовый программатор стоит недорого, но ведь его еще надо заказать и дождаться! Давайте соорудим простейший - на LPT-порту:


Девайс предназначен для программирования контроллера прямо в родной схеме (т.н. In Circuit Serial Programming или ICSP ) - надо организовать на плате гребенку 2x3 контакта, подключить к ней этот программатор и один раз зашить bootloader - специальную короткую программу инициализации, которая принимает по последовательному порту микропрограмму (sketch), прошивает ее в свободную память ATmega, а затем запускает.

Стоимость деталей:
  • разъем DB25 - 10 руб.
  • корпус разъема - 10 руб.
  • три резистора - 1 х 3 = 3 руб.
  • три колодки PBS02 - 2 х 3 = 6 руб.
  • проводки - ну добавьте еще 10 руб.
Итого, 39 рублей. Наверное, вы спросите: где подвох? Не скрою, не без него: на вашей машине должен быть LPT-порт.

Процесс сборки программатора подробно описан в статье на сайте Arduino. Вот что получилось у меня:



Отдельного внимания заслуживает история одинокого желтого проводка.

Как видно из первого рисунка, на оригинальной схеме pin2 разъема ICSP "висит в воздухе". На самом деле, там должно быть Vcc +5В, которое отсутствует в LPT-порту в виде отдельной питающей шины. Авторы предлагают запитать программируемую схему отдельно (я взял +5В с разъема USB того же компьютера, к которому были подключен LPT).

В таком варианте схема работать отказалась, из порта программирования систематически читались 0xff. Когда я снял питание, то с удивлением обнаружил, что контроллер все равно умудрялся что-то высасывать из активных пинов LPT-разъема и - о чудо! - даже начал проявлять признаки жизни: пытался осмысленно отвечать на Power-up sequence. Однако, дальше дело не шло: avrdude удивленно сообщал о том, что обнаруженный процессор имеет нестандартную сигнатуру - 0, 1, 2.

Это натолкнуло меня на мысль покопаться в конфигурационном файле avrdude.conf и внимательно изучить секцию, посвященную моему дешевому программатору:

programmer
id = "dapa";
desc = "Direct AVR Parallel Access cable";
type = par;
vcc = 3;
reset = 16;
sck = 1;
mosi = 2;
miso = 11;


Все элементарно: слева - название сигнала, справа - номер контакта на LPT. Таким образом, предполагается, что программатор использует третий контакт для подачи питающего напряжения Vcc.

Так и появился желтый проводок. Как только я соединил им шину +5В микроконтроллера и DB25 pin3, bootloader для ATMEGA8 прошился на "ура".

Признаюсь, было несколько стремно (перед включением я мысленно помолился за здоровье своего LPT-порта), но, видимо потребность в питании одного-единственного МК в данном случае вполне допустима.

(продолжение следует, Часть II)

18.11.2008

Увеличение объема памяти РК-86

Немного не по теме - копался в гараже и нашел гору манускриптов. Один из них можно датировать 1989-90 годами, когда нынешний рынок Юнона еще назывался "толпа" и обитал в Автово, почти в лесу, на кочках - короче полностью неблагоустроенный.

Статья повествует о том, как пытливому радиолюбителю, неудовлетворенному расширением ОЗУ в Радио-86РК до 32К, получить почти в 2 раза больше:



Полный скан статьи можно скачать здесь.

Автор, к сожалению, неизвестен. Формат - самиздат, напечатано на тонюсенькой бумаге, с виду почти папирусной, при помощи матричного принтера.

14.11.2008

Вид МК-90 изнутри

Изначально калькулятор достался мне с неработающим звуком. Твердо решив докопаться до причины, я полез за отверткой. Калькулятор разобрался на две аккуратных половинки:



Вверху слева - плата ЖКИ, вверху справа - плата клавиатуры. Снизу - видна плата процессора, она же чуть крупнее:



Как видите, это те самые ПЗУ микропрограмм КА588ВУ2А, с номерами 001-004. Слева вверху в белом корпусе - по-моему, резисторная сборка.

Колесико регулировки контрастности крупным планом:



Если откинуть плату процессора "на себя", под ней скрывается плата устройств:



В блестящих корпусах элементы процессора - АЛУ КА588ВС2, контроллер ВГ1 и последняя ПЗУ с микрокомандами контроллера - за номером 005. Справа в однорядном корпусе ПЗУ с BASIC-ом - КА1835РЕ1. Где тут перемычки, которые надо перерезать для программирования (а потом восстанавливать) - понятия не имею, если честно. Видно только пустое посадочное место для "бутербродного" монтажа (как в модуле СМП).



Плата устройств немного не в резкости, но достаточно ясно видно, что сверху к ней подключен единственный наружный разъем, справа - два для модулей СМП.




Красный и белые проводки не случайно такие длинные. Это позволяет без потери контакта откинуть "на себя" и плату устройств тоже:



Динамик - пьезоэлектрический, он виден только наполовину. Как я понимаю, такие вещи не ломаются в принципе. Зато два лепестка, которые припаяны на плату (видите, по центру два контакта один над другим?) за последние лет 15 немного потеряли пружинистость. Я немного отогнул их, и.... после сборки звук снова заработал!

Напоследок, крупным планом кусочек платы от разъема питания. Вверху - контроллер , отвечающий за клавиатуру.

12.11.2008

У страха глаза велики

Обратил внимание, что один из модулей СМП работает как-то нестабильно (ошибки записи/чтения в программаторе СМП на Arduino). Выяснилось, что напряжение на батарейке упало до 0,7В.

Пошел покупать новую батарейку, но элементов 2016 не было, взял от отчаяния 2025 и 2032. Они несколько толще, но я постарался и запихнул 2025. Тут выяснилось, что СМП вообще не работает - кажет все единицы. Причем, и в МК-90, и в программаторе.

"Подох", - подумал я и полез искать элементную базу (КА1835ВГ2, КА537РУ10Б) в интернет-магазинах. Что самое поразительное - нашел! Но прежде, чем нажимать на кнопку "отправить заявку", решил проверить последний раз - не установил ли я батарейку как-то криво.

Модуль великолепно заработал в калькуляторе со снятой батареей. Мораль: у страха глаза велики ;) Сижу, думаю - оформлять мне заказ на антикварные микросхемы завода "Интеграл" или нет... А вдруг придется ремонтировать, не дай Бог?

07.11.2008

Читалка СМП на Arduino

Мне удалось заполучить LilyPad Arduino Main Board (полную историю про это читайте здесь), с микроконтроллером ATMega168V и способ быстро подключить его к СМП МПО-10. В итоге получилась читалка/писалка СМП через USB. Ингредиенты этого рецепта:
  • Arduino Board
  • Свободный USB-порт
  • Вилка PLS-6R и 5 проводков для подключения СМП
  • ПО: Arduino IDE, FTDI drivers, Perl с модулем Win32::API, модули Win32::SerialPort, Win32::CommPort
  • Результаты моей работы - программа-sketch для Arduino Board + скрипт на Perl
Теперь разберем последовательно (по шагам):

1. Надо достать Arduino. Плата LilyPad Arduino Main Board попалась мне почти случайно, в основном я купился на возможность приехать с наличными и тут же получить товар. К ней необходим USB Serial Converter, который надо правильно соединить с Arduino 4-х пиновым кабелем минимальной длины. Если вам повезло, и в вашем распоряжении полноценная Arduino-совместимая плата, то к ней ничего не надо - там USB есть прямо на плате.

В моем случае, это выглядит так:


2. Подключите СМП к цифровым входам Arduino (номера pin-ов на СМП согласно картинке, а на Arduino они подписаны):



СМПНазначениеArduino
2Vcc +5V"+5V"
3CLOCKPin 7
4DATAPin 6
5SELECTPin 5
6Gnd"-"

Замечание: батарею (1-ый пин СМП) никуда не подключаем, пины Arduino - цифровые (не путать с аналоговыми).

3. Скачайте и установите Arduino IDE. Попутно установятся драйвера USB-чипа и в системе появится виртуальный COM-порт, его номер надо запомнить.

4. Запустите Arduino IDE. При первом запуске надо установить номер COM-порта из п.3, а также тип платы. Теперь можно открыть исходник (или sketch, "набросок") с моей программой чтения/записи СМП (sketch_081102b.pde в отдельном подкаталоге). Откомпилируйте (клавиша со стрелкой) и загрузите результат в Arduino (нажать кнопку сброса на плате, не позже 5-ти секунд после этого - датйте Arduino IDE команду Upload). Если все в порядке, микропрограмма стартует и зажжет на Ardino тестовый светодиод (подключен к 13-му цифровому выходу).

5. Установите Perl. Для Windows можно воспользоваться дистрибутивом ActiveState Perl. Установить модуль Win32::API через ppm. Далее скачать со CPAN Win32::SerialPort, распаковать в текущий каталог (на всякий случай, я включил его в архив с моей программой).

6. Впишите номер COM-порта (см. п.3) в мой скрипт (в самом начале, переменная $com_number). Например, если у вас FTDI-драйвера "уселись" на COM13, пишите $com_number = 13;

7. Подключите СМП к Arduino, затем Arduino к USB.

8. Запускайте скрипт:

arduino_smp.pl read MK90.BIN

Если все нормально, то через несколько секунд вы получите файл с бинарным имиджем СМП, который можно подключать к эмулятору МК90. Если вместо read написать write, то файл будет записан и прочитан для проверки. Запускать ее до готовности Ardino не имеет смысла, а если прервали по Ctrl-C - не забудьте сбросить Arduino, все-таки sketch крайне примитивный.

Я экспериментировал на скорости 38400, это можно изменить. Меняйте константы в скрипте и в sketch-е одновременно (устанавливайте одинаковые скорости!). При написании sketch-а использованы исходники программы чтения/записи by Piotr Piatek (правда в одном месте пришлось поправить), за что ему отдельное спасибо, потому что, на самом деле, я просто адаптировал его работу для Arduino.

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

05.11.2008

Подмосковные вечера на МК90

Добавил в подборку программ из руководства программу PLAY.BAS, которая приводится на 55-ой странице и проигрывает "Подмосковные вечера". Заодно обновил образы СМП для Бейсика 1.0 и 2.0.