12.01.2011

ArduinoIDE 0022

В ArduinoIDE 0022 нет существенных внешних изменений, поэтому начну с самого главного - ядра. Почему мне это особенно близко, легко понять, если пролистать вторую статью из цикла "Arduino из BM8036", в которой я адаптировал ядро из релиза 0019 для процессора ATmega32.

Изменена идеология ветвления в ядре, учитывающая тип процессора. Собственно - раньше это были макросы #if defined(__ATmega8__) - но со временем число официальных МК  росло, народ портировал ядро на другие МК семейства AVR, злостно чертыхаясь в процессе правки этих самых #if. Дело в том, что у каждого процессора свой набор таймеров, отвечающих за поддержку аппаратного ШИМ на определенных его ногах. И вот, революционная идея: вместо того, чтобы проверять тип процессора (подается gcc при компиляции через ключ -mmcu), проверяют определение регистров! Правда, это чуть-чуть расходует память программ - 14 байт для ATmega328 и 40 для ATmega1280, но зато означает, что теперь портирование на другие МК будет проще. Что ж, подождем всплеска Arduino-подобных проектов :)

Далее, менее значительные исправления:

  • поправили вычисление скорости последовательного порта - проявлялось только на Uno, если инициализировать скорость обмена в 57600;
  • исправили неверную генерацию звука через Tone() - теперь звук не плавает;
  • не компилялась работа с EEPROM под MacOS и Windows в платах Mega2560 - был добавлен кастомный eeprom.h;
  • немного оптимизирован код последовательного порта в плане вычисления указателя буфера - это позволило поднять максимум скорости до 115200;
  • поправлена работа pulseIn - теперь таймаут действует не только на ожидание завершения предыдущего импульса и начала текущего, но и на окончание - раньше бесконечный импульс подвешивал вызов.
Добавлена функция String.toInt, а также макросы определения типа символа - isNumeric(), isControl() и т.п., макросы простых преобразований - toUpperCase() и т.д.

Ряды официальных библиотек пополнила SD library

В плане изменений самой IDE в очередной раз улучшили поведение окна Serial Monitor-а, пофиксили режим копирования в формате html, заменили библиотеку регулярных выражений и поставили компиляцию скетча перед компиляцией ядра, должно ускорить процесс поиска ошибок. 

10.01.2011

Как заЛУТить из Eagle?

Публикуемые мной под лицензией CC-SA схемы и рисунки печатных плат обязательно содержит внутри файлы с расширениями .sch и .brd - результат работы CAD-системы Eagle. Пользующаяся большой популярностью за рубежом, эта система почти не прижилась в России - у нас предпочитают KiCAD, Sprint Layout или P-CAD. Не вдаваясь в религиозные споры о преимуществах того или иного пакета, хочу дать внятное практическое руководство, как использовать Eagle для ЛУТ.

Итак, есть готовый .brd-файл с разводкой под одностороннюю печатную плату для выводных элементов, требуется перевести его в бумажный вид  - распечатать на бумаге для ЛУТ.

Получение и установка Eagle

Не надо искать никаких краков и серийников - есть совершенно бесплатная версия Eagle, имеющая небольшие ограничения. Весь фокус в том, что для наших целей они  несущественны, но, на всякий случай: размер платы, которую можно редактировать бесплатной версией не должен превышать 100 х 80 мм, иметь более двух слоев и более одного листа со схемой. При этом открывать и просматривать можно хоть шестислойные платы со схемами на десятке листов. Поддерживаются Windows, Linuх и Mac OS.

Установка довольно примитивна, если не собираетесь рисовать схемы и разводить платы - вдаваться в нее на данном этапе нет смысла.

Выбор слоев

Откройте .brd-файл командой File | Open | Board из основного окна:



Обычно, схема и разводка должны быть синхронизированы, поэтому может открыться и окно со схемой (если вы позаботились положить в тот же каталог файл .sch). Нас изначально будет волновать лишь окно с разводкой - то, у которого заголовок начинается с Board. Распахните окно пошире, чтобы внимательно изучить то, что нам досталось от заботливого разработчика Open Hardware. 



Разводка платы состоит из набора слоев. Стандартных слоев довольно много, вдобавок можно создавать свои собственные. Отображать их на экране одновременно не всегда удобно, но для первого знакомства с чужой разработкой следует сначала увидеть всю картину целиком. Включите все слои: File | View | Display/hide layers (в окне кнопка All или Ctrl-A).

Чего только не рисуют на этих слоях! Тут тебе и документация, и копирайты авторов, и диаметры отверстий... Важно отсечь ненужное (с) Микеланджело. 

А что, собственно, нужно? Для ЛУТ нам потребуются следующие слои:
  • Bottom (16) - именно на нем (по умолчанию синим цветом) рисуют дорожки для односторонних плат;
  • Pads (17) - посадочные площадки для выводных элементов;
  • Vias (18) - переходные отверстия между слоями (для однослойных плат - место пайки перемычек);
  • Dimension (20) - контур платы.
(все слои пронумерованы - для стандартных  можно смело пользоваться вместо названий номерами)

В большинстве случаев, этого набора достаточно. 

Перед отключением лишнего, советую присмотреться повнимательней - возможно, на плату нанесен какой-нибудь дополнительный текст, который должен быть вытравлен на медном слое. Это может быть дополнительный пользовательский слой, с номером от 100 и выше. Например, на плате Arduino Severino заботливый Эдилсон Акаши нанес номера пинов Arduino и поместил их в слой "CopperText". Если сомневаетесь, попробуйте включать и выключать разные слои и посмотреть на результат. Имейте ввиду, что рисунки слоев не должны пересекаться, иначе получите вместо правильного рисунка печатных проводников один сплошной брак. Поэтому, в случае любых сомнений - вращайте колесико мыши для увеличения масштаба или нажимайте F3/F4 (через меню - View | Zoom in и View | Zoom Out).

Замечание по поводу визуализации: когда вы рассматриваете плату в окне Board Editor, вы смотрите на нее так, как смотрели бы на настоящую плату, если бы текстолит был прозрачный. Поэтому, слой Top вы видите в точности так же, как и в реальной жизни, а вот Bottom - в зеркальном отображении. 

CAM-процессор 

Итак, после предыдущего шага запомните, какие слои в итоге требуется распечатать. Если боитесь забыть, выпишите на бумажку.

Выполните команду File | CAM Processor, появится его окно:


Сперва надо выбрать целевой формат. Я предпочитаю eps (enhanced post script) - векторный формат, известный практически всем графическим редакторам. К тому же, в нем содержится информация о размере изображения, что крайне важно: если в итоге масштаб отпечатка не будет 1:1, это тоже будет практически верный брак. 

Обязательно выберите имя файла, в поле Scale должна быть единица.

Отключите все слои, затем включите Bottom, Pads, Vias, Dimension и дополнительные (если вы их все-таки обнаружили на предыдущем шаге). 

В группе Style проверьте, что:
  • очищен флажок Mirror
  • очищен флажок Fill pads
Теперь отважно жмите кнопку "Process Job". Eagle может выругаться и на то, что некоторых слоев "не положено, а они положены" (с) анек; что он, бедный, потратит много времени на такую-то фигуру, и т.п. Игнорируйте это нытье - нам же ЛУТить надо, а он про это даже не догадывается.

Отпечаток

Для подготовки отпечатка потребуется любой графический редактор - одинаково хорошо подойдут и PhotoShop, и GIMP. Откройте полученный на предыдущих шагах файл, предварительно пояснив редактору, что:

  • требуется черно-белая палитра цветов;
  • разрешение - 600 dpi
Этим вы сэкономите энное количество памяти своего компьютера и драматически ускорите обработку. Хотя, если ваш принтер способен на большее, чем 600 dpi - можете установить и больше, но смысл это делать имеет только при наличии SSOP и TQFP корпусов в схеме - т.е. таких, где ножки тоненькие и расстояние между ними - крошечное. Для старого доброго PDIP это будет излишеством.

После импорта полюбуйтесь тем, что увидите на экране. Оно должно быть зеркальной черно-белой копией того, что вы видите в Eagle. Особенно легко это угадывается, если на рисунке есть текст. Помните, что, в противном случае, этот текст окажется зеркальным после переноса на стеклотекстолит, что порадует максимум поклонников Л.Кэролла. 

Обязательно сделайте пробный отпечаток на обычной бумаге. По возможности, перед печатью еще раз проверьте размер бумаги и разрешение печати - последнее должно быть именно таким, как задано при импорте (600 dpi или около того). 

Кстати, проверить, что все получилось в нужном масштабе - несложно. Для этого надо вернуться в Eagle и сделать следующее:
  1. Переключиться с вражеских дюймов и милов в нашенские сантиметры и миллиметры. В командной строке наберите: "GRID mm 0.01";
  2. Для простоты, отключить все слои, кроме Dimension;
  3. Перейти в режим получения информации (Show object properties);
  4. Открывать свойства интересующих линий границы и сравнивать с тем, что говорит линейка, приложенная к отпечатку. 

Все хорошо? Тогда заряжайте глянцевую плотную фотобумагу и печатайте - только не забудьте установить тип бумаги "Card Stock" или что-то в этом духе, ибо бумага будет - толстая. 

Маркировка

Хорошо, если плата небольшая или вы уже выстрадали каждый миллиметр при разводке. Но в суровой реальности подсказки в виде маркировки противоположной стороны помогут избежать глупых ошибок при установке элементов. К сожалению, редко кто применяет самодельную маску - поэтому поясняющие надписи наносят только на противоположный (неомедненный) слой при помощи того же ЛУТ - только не травят ;)

Для создания "лицевой" стороны односторонней печатной платы, надо выполнить предыдущие шаги, но с другим набором слоев. Нам потребуются:

  • Dimension - чтобы не промахнуться, орудуя ножницами;
  • Holes - монтажные отверстия (не путать с отверстиями для выводов элементов);
  • tPlace - контурный слой элементов с лицевой (Top) стороны;
  • tNames - слой названий элементов (типа R1, C10 и т.п.);
  • tValues - слой со значениями номиналов (10К, 100 нФ и т.п.);
  • tDocu - слой документирования (функциональный смысл джамперов, названия сигналов - обычно на плате не печатается, но может пригодиться); 
  • Top - верхний слой, для односторонней платы полезен, если есть перемычки.
Быть может, какие-то из надписей вас вообще не устроят - тогда не обойтись без редактирования. Например, сначала можно включить слой tPlace и отделить Name и Value от элемента командой Smash (нажимайте на крестики-центры элементов, в замен образуются еще два - для имени и номинала). Далее, ненужное можно убрать командой Delete или передвинуть командой Move. Добавляют текст командой Text, после чего при помощи Properties надо заменить шрифт на "Vector" нужного размера (Size) и толщины (Ratio).

Наконец, дело сделано - сохраняйте файлы (обязательное условие запуска CAM-процессора), можно под другим именем, чтобы не "портить" оригинал. В окне CAM-процессора включите только те слои, которые будете печатать (см. выше), а в Style - обязательно нужен Mirroring. Перед распечатыванием не забудьте снова убедиться, что надписи зеркальные!

После травления заготовки с помощью первого отпечатка, смойте тонер и совместите (желательно на свет)  второй отпечаток так, чтобы они совпадали по углам, затем накатывайте утюгом. Все, плата готова для залуживания в Розе, сверловки и монтажа.

Сверловка

Есть ряд моментов, которые сначала далеко не очевидны, среди них - центр сверловки больших отверстий, диаметром 2-3 мм. Если вы недостаточно аккуратно совместили верхний информационный отпечаток с протравленными дорожками, сверлить по нему нельзя - есть риск промахнуться и повредить печать. Да и контуры отверстий до обидного тоненькие, могут легко утратиться при снятии бумаги с заготовки. 

В состав Eagle входит много замечательных скриптов (ULP - User Language Programs), которые могут помочь в разнообразных вопросах. Среди них - скрипт drill-aid.ulp. Для его активизации перейдите в главное окно программы, раскройте пункт "User Language Programs", найдите его и по правой кнопке запустите на плате - "Run in Board" (не забудьте сохранить CAD-файлы под другим именем перед этой операцией, если хотите иметь возможность возврата к предыдущему состоянию).


Все кружочки заданного вами диаметра будут нарисованы на слое 116 - лишние можно удалить.



Также рекомендую посмотреть на скрипты drill-legend.ulp и drillegend.ulp - они создают специальный слой, отмечающий диаметры отверстий, включая легенду. Так, по крайней мере, сразу можно понять сколько и каких сверл потребуется ;)

В целом же, Eagle - далеко не самая худшая система, позволяющая рисовать электрическую схему и производить ручную / автоматическую разводку платы с последующим экспортом в Gerber274x, так что с ее помощью плату можно подготовить и для реального производства.

Кстати, меня поразило руководство пользователя - как человек, близкий к программным разработкам, я с завистью читал этот мануал и поражался - как же им удалось написать такую великолепную документацию, отвечающую не на банальные вопросы "для чего нужен пункт File|Open", а предоставляющее поэтапно усложненное описание процесса решения задач. Поэтому, если соберетесь изучить Eagle - читайте именно его, не пожалеете ;) 

09.01.2011

Минимальный клон Arduino за $3 на ATmega8A с модифицированным bootloader'ом

Сразу признаюсь, что заголовок призван привлекать внимание — конечно, за $3 полноценную Arduino-плату не собрать, но минимальное решение вполне можно.

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

В качестве отправной точки использовались статьи Minimal Arduino with ATmega8 (внимание: в этой статье есть ошибка, значения fuse-битов неверны) и страница об ArduinoISP из официальной wiki. К сожалению, ни одна из этих статей в своё время не ответила на все мои вопросы, кроме того появилось желание немного «подкрутить» стандартный bootloader, но об этом ниже.

Поддержка новых плат и IDE
(дополнение от 01.05.2012
, файлы исправлены 27.05.2012)

Действия, описанные в статье, проверялись на Arduino IDE 0023 и клоне Arduino Duemilanove. С момента написания статьи были выпущены новые платы и обновлена среда. Судя по комментариям пользователей к этой записи, всё работало если в качестве платы-программатора использовались Arduino Uno и Arduino Mega 2560. Для новой версии среды Arduino IDE 1.0.1 я подготовил обновлённый архив (доступен в конце статьи), обновление необходимо из-за незначительных изменений в формате файла boards.txt
 
Минимальная Arduino-конструкция за $3.5
(дополнение от 02.05.2012) 

Этот способ является альтернативным описанному в статье ниже!
В комплекте Arduino IDE 1.0 поставляется новый бутлоадер Optiboot, который занимает всего 512 байт (бутлоадер, описанный в этой статье в два раза больше — 1 Кб) и работает на высоком бодрейте — 115200 (в статье ниже — 38400). Для работы этого бутлоадера дополнительно к описанным в статье компонентам нужен внешний кварц на 16МГц и два конденсатора на 22пФ его обвязки (этим объясняется увеличение стоимости на $0,5 :)). В комплекте с Arduino IDE 1.0 есть уже скомпилированная версия для ATmega8, достаточно только добавить в boards.txt следующее и прошить бутлоадер:
##############################################################
atmega8optiboot.name=ATmega8 (optiboot, 16Mhz XTAL)

atmega8optiboot.upload.protocol=arduino
atmega8optiboot.upload.maximum_size=7680
atmega8optiboot.upload.speed=115200

atmega8optiboot.bootloader.low_fuses=0xBF
atmega8optiboot.bootloader.high_fuses=0xCC
atmega8optiboot.bootloader.path=optiboot
atmega8optiboot.bootloader.file=optiboot_atmega8.hex
atmega8optiboot.bootloader.unlock_bits=0x3F
atmega8optiboot.bootloader.lock_bits=0x0F

atmega8optiboot.build.mcu=atmega8
atmega8optiboot.build.f_cpu=16000000L
atmega8optiboot.build.core=arduino:arduino
atmega8optiboot.build.variant=arduino:standard
 
В версии файлов к статье от 14.07.2012 настройки для этого способа добавлены в состав архива, поэтому править главный boards.txt больше нет необходимости.