Показаны сообщения с ярлыком Программатор. Показать все сообщения
Показаны сообщения с ярлыком Программатор. Показать все сообщения

07.09.2012

Ангел для Петьки

Сегодня хочу предложить статью Andrew Doynikov - о том, как превратить Angelino в программатор STK-500 by Petka.

Сломался программатор STK500 by Petka. Можно было изготовить новый, но в наличии не оказалось FT232RL, зато был переходник USB-TTL, купленный давно и используемый во многих проектах для тестирования и отладки:


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


Решено! Будем делать из этого программатор.

Если вниматнльно взглянуть на схему Angelino, практически - это половина программатора. 
Вот что потребуется изменить:
  • кварц 16 МГц надо заменить на тот, что используется в STK500 by Petka, я поставил 14.7456 МГц
  • убрать линию "Автосброса", которая присутствует на всех Arduino-совместимых платах;
  • добавить несколько резисторов, светодиод и разъем для программирования целевого контроллера.


На схеме сохранена нумерация элементов из оригинальной схемы STK500 by Petka, красным отмечены пины Angelino (например, А0 - аналоговый вход, D10 - цифровой).

Дополнительные элементы и разъем программирования было удобно разместить на отдельной Shield-плате, которую я развел в Sprint Layout и изготовил с помощью ЛУТ:



Далее, в Angelino устанавливается контроллер ATmega8-PU, через ICSP-разъем туда загружается прошивка для кварца 14.7456 МГц - от уважаемого Леонида Ивановича, который улучшил и оптимизировал ее. После этого основная плата стыкуется с полученной Shield-платой, подключается USB-TTL переходник (в процессе подключения к Windows может понадобиться установить драйвера FTDI).




Для проверки надо подключиться к программатору гипертерминалом, он должен сразу же ответить. После этого можно смело использовать его с AVR Studio.



Подводя итог: после двух часов неспешной работы - получен прекрасный и быстрый программатор. Мои благодарности автору программатора - Petka и Леонид Ивановичу за доработанную прошивку.

Материалы:

02.05.2012

Анонс

По многочисленным просьбам читателей Artem Volk обновил свою статью 
Минимальный клон Arduino за $3 на ATmega8A с модифицированным bootloader'ом, специально осветив моменты, касающиеся последних изменений в ArduinoIDE 1.0 и дополнив новым вариантом клона, уже за $3.5 :)

28.01.2012

MKboard в качестве программатора STK500

В комментах к посту про Angelino один из пользователей навел меня на интересную мысль: а действительно, как сделать из MKBoard программатор для другой платы? Для стандартных Duemilanova и Uno обычно берут скетч ArduinoISP и дальше действуют в соответствии с этой инструкцией. Но этот скетч совершенно не подходит для MKboard/metaboard, которые не имеют "честного" USB-порта.

Но оказывается - сделать из MKBoard программатор очень даже можно, причем получается практически полноценный STK500-совместимый программатор - AVR-Doper, который можно использовать с AVRStudio (разве что без высоковольтного последовательного программирования). Для этого берете этот хекс: mkboard_avrdoper.tar.gz, замыкаете джампер Upload, нажимаете на сброс и пишите:

avrdude -c usbasp -p m8 mkboard_avrdoper.hex

После завершения процесса вы получаете AVR-Doper в режиме HID.

Соединяйте провода с программируемой схемой, руководствуясь новым назначением пинов:

Для программирования достаточно соединить MKBoard и программируемую плату (target) согласно этой таблице:

MKBoardTarget
RESETRESET
MOSIMOSI
MISOMISO
SCKSCK
GNDGND
+5BVCC

Если схема имеет собственное питание, последнее соединение (VCC и +5В) делать не нужно. 

Откуда брать эти сигналы - с гребенки ISP6 или колодки цифровых пинов - не суть важно, но если соединяете ISP6 у MKBoard и устройства - получается практически "один в один", за исключением сигнала RESET - его надо брать все-таки с цифровой колодки, digital10.



Далее, для прошивки hex-файла через avrdude можно использовать следующую строку:

avrdude -c stk500 -P avrdoper -p MCU -U flash:w:file.hex

где MCU заменяем на тип программируемого микроконтроллера (более подробно см. справку к avrdude - для ATmega8 - m8, для ATmega328P - m328p и т.д.).

Если требуется совместимость с AVRStudio - снимаем джампер Upload и переподключаем питание. Как вы уже догадались, в данной прошивке программатора этот джампер управляет режимом HID: замкнут = вкл, разомкнут = выкл (и вместо него CDC). Но учтите, что выбор срабатывает один раз при подключении питания - если нажмете на сброс, запустится бутлоадер, который будет делать совершенно другие вещи (представляться как usbasp и пытаться запрограммировать самого себя).

Можно ли программировать через DIP-сокет? Разумеется - можете его установить хоть на макетном поле, но при этом:
  • сделайте все вышеописанные соединения Target и MKBoard за исключением VCC и +5V;
  • подключите SUPPLY1 и SUPPLY2 (оба два) к шине VCC программируемого MCU;
  • подключите CLK к ножке XTAL1 программируемого MCU (замена кварцу и емкостям для создания тактовой схемы у target-а).


Два контакта под питание выглядят перестраховкой, но некое рациональное зерно в этом есть. Перед началом через SUPPLY подается питание на программируемый MCU, а по завершении - отключается. Так делает и оригинальный AVRDoper, только у него есть для этого специальная буферная микросхема, которой в MKBoard, увы, нет.

Во время программирования будет мерцать встроенный светодиод L, поскольку он оказался подключен к пину SCK (тактовые импульсы программирования). Оригинальный светодиод "ONLINE" для наглядности можно прикрутить к PC1 (или analog1 в нумерации Arduino), обязательно через токоограничительный резистор 1К - тогда он будет четко загораться в момент входа в режим программирования и при выходе из него.

В этой прошивке также можно использовать встроенный отладочный порт - если соединить  GND, RX и TX отлаживаемого микроконтроллера с пинами digital 0 и digital1 (разумеется, перекрестив), то можно с ним обмениваться через USB-подключение MKBoard  на скорости 19200 - читать и писать данные с помощью утилиты avrdebug.

Ну и напоследок - если программатор больше не нужен.... разбираете схему, замыкаете Upload, нажимаете сброс - и... плата снова готова к загрузке скетчей через ArduinoIDE! ;)

И, конечно же, скажем спасибо команде Objective Development, позаботившейся о том, чтобы код AVR-Doper компилялся не только под разные MCU и разные тактовые частоты, но и под разные схемы (оригинальная, usbasp, metaboard).

03.08.2011

USBasp и TPI

Thomas Fischl, являющийся автором отличного программатора USBasp (поддерживается avrdude), разразился новой версией прошивки. А я уже и не надеялся на какие-то изменения - просто случайно зашел на страничку проекта USBasp.

По сравнению с предыдущей прошивкой, выпущенной более двух лет назад, в этой изменилось следующее:
  • добавилась поддержка протокола программирования TPI для ATtiny4, ATtiny5, ATtiny9, ATtiny10;
  • теперь поддерживаются MCU, у которых flash превышает 128К;
  • поправлен небольшой косяк с синхронностью последовательности разрешения программирования и сигналом RESET;
  • использовано новое ядро V-USB.
Автор первых двух изменений - Slawomir Fraś, фанатик USBasp. Однажды зимним вечером 2010 года он обнаружил, что его любимый usbasp не желает прошивать свежезакупленные ATtiny10, и не смог отказать себе в удовольствии сделать патч и для firmware, и для avrdude.

В отличие от стандартного MISO/MOSI/SCK + RESET, режим TPI предназначен для шестиногих MCU и использует сигналы TPIDATA/TPICLK + RESET (то есть, на одну линию меньше). Но если программатор не умеет поддерживать такой режим - увы, запрограммировать шестиногие ATtiny как-то по-другому невозможно :(

Если вы решились использовать последнюю версию, надо знать о паре интересных моментов.

Во-первых, поскольку USBasp поддерживается только avrdude, а новая версия 5.11 пока еще не вышла, для программирования новых ATtiny придется тянуть рабочий срез svn и собирать из исходников (звучит грозно, но на самом деле - несложно). Если поддержка TPI пока не требуется - новая прошивка будет замечательно работать и с версией 5.10.

Во-вторых, результирующая прошивка перестала влезать в 4К и использовать можно только ATmega88 или ATmega8. 

Новую версию прошивки USBasp я буду шить в этот набор - работает она вполне нормально.


С TPI, правда, возможности проверить пока не представилось, но если попадется соответствующий чип - обязательно проверю. Avrdude из svn собирается без шаманства - и вот, например, пакеты для Матерой Машки x64 ( Ubuntu Maverick Meerkat 10.10 ):
Если надо еще какие-то пакеты под иной debian-совместимый дистрибутив - пишите, постараюсь собрать.

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 больше нет необходимости.

03.08.2010

Набор USBasp

Честно говоря, никогда бы не подумал, что будет столько желающих собрать USBasp самостоятельно... Но без печатной платы - сами понимаете - сборка превращается в муторное занятие, раза в 2-3 скучнее вышивания - чем сложнее схема, тем меньше получающийся в финале рисунок из проводков и деталек похож на бумажный эквивалент. То ли дело, когда есть печатная плата - уже просверленная и залуженная! 


И, кстати - пошаговая инструкция тоже есть, чтобы уж наверняка любой смог его собрать...

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 можно, например, здесь.

05.02.2010

JTAG на макетке

Микроконтроллеры ATmega можно условно разделить на две категории: те, что программируются только через ISP (шина из проводов MISO, MOSI, SCK + управление сбросом) и те, что имеют в дополнении к этому интерфейс JTAG.

Из набора "горячо любимых" Arduino-контроллеров к первой категории относятся ATmega8, ATmega168, ATmega328P. Но и во второй категории тоже присутствует один экземпляр: ATmega2560, используемый в Arduino/Freeduino MEGA 2560.

JTAG - это механизм, позволяющий автоматически контролировать качество монтажа печатных плат: не закоротилось ли чего или, наоборот, плохо припаялось. Очень полезная вещь в промышленном масштабе, особенно когда на одной плате "счастливо" уживаются микросхемы разных фирм (стандарт IEEE 1149.1, на котором базируется JTAG - открытый). Тем более логично, что многие производители микросхем добавили возможность программирования и отладки своих чипов через все тот же JTAG.

Для чего может потребоваться JTAG в повседневной жизни?

В моем случае - вдруг потребовалось читать и писать содержимое flash ATmega128, а вместо привычной вилочки ISP наружу торчит только JTAG. В этом случае уже простой программатор типа USBasp, увы, не поможет.

Фирменное устройство от ATMEL стоит немало (а я и так уже прикупил нанопаяльник,   денег после этого осталось ноль отрицательное количество):

Что же делать? Я уже говорил, что стандарт - открытый, а процесс программирования через JTAG хорошо документирован - достаточно открыть любой даташит на микроконтроллер ATMEL с JTAG-интерфейсом.

Кстати, когда-то, на заре появления микроконтроллеров фирмы ATMEL, фирма-конкурент Microchip дразнила ATMEL показательно разобрала какой-то инструментальный девайс для разработчика программ микроконтроллеров ATMEL и демонстрировала, что он собран на микроконтроллерах её производства - то бишь, на PIC-ах. Впрочем, было это невероятно давно, мир теперь уже совсем другой (c).

В интернете есть масса вариантов самодельных копий фирменного AVR JTAG ICE. Одну из таких упрощенных до полного безобразия можно найти, например, здесь. Что самое забавное -  работает, хотя состоит практически из одного МК: ATmega16. Оригинальный программатор использует чип, полностью совместимый с ATmega16, что делает возможным заливание в самопальный программатор прошивок от фирменного (правда, новые навряд ли будут появляться, поскольку AVR JTAG ICE дано снят с производства).

Для начала надо достать основной компонент - микроконтроллер ATmega16-16PU и кварц 7.3728 МГц, после чего собрать на макетке минимальную схему для программирования:



Схема - классическая, необходима для запуска ATmega. Напомню, что обычно делают в таком случае:

  • подключают питание -  все GND и VCC (обычно выводов GND не менее двух);
  • ставят между GND и VCC поближе к ножкам ATmega фильтрующий помехи конденсатор 100 нФ (или 0.1 мкФ - кому как больше нравится);
  • подключают между XTAL1 и XTAL2 кварц и соединяют их через два одинаковых конденсатора на землю (разброс номинала указан в документации, не обязательно использовать 22 пФ, можно, например, и 33 пФ);
  • притягивают линию сброса к VCC через резистор 10К и вешают конденсатор 100 нФ на землю, чтобы обеспечить небольшую задержку линии сброса после подачи питания.

Выглядеть это будет приблизительно так (всё благополучно влезает на макетку 300+100):



Соединяем схему через вилку ISP с программатором и запитываем от него же, затем зашиваем прошивку и выставляем фьюз-биты:

avrdude -C avrdude.conf -c usbasp -p m16 -U hfuse:w:0x1f:m -U lfuse:w:0xcf:m

avrdude -C avrdude.conf -c usbasp -p m16 -U flash:w:miniICE.hex

Если операция прошла успешно, полдела сделано. Можно аккуратно удалить ISP-разъем и преобразовать схему к следующему виду:



На макетке это выглядит так:



Наверное, вы обратили внимание, что в схеме я использовал USB-чип последовательного порта - FT232RL. Это гораздо удобнее, чем COM-порт, по многим причинам. Но в макетку SSOP не воткнешь, поэтому я использую самостоятельно изготовленный переходник USB-TTL:



В классическом варианте линий JTAG чуть больше, чем на схеме:



Обязательные сигналы - TCK, TDO, TDI и TMS (тактовая, выход данных, вход данных и управление режимом теста).

NSRST и NTRST - это управление сбросом на шине JTAG. В нашем случае не обязательны, поскольку сброс МК можно инициировать командной последовательностью на линиях обязательных сигналов.

Теперь разберемся с питанием. Желательно, чтобы внутрисхемный программатор питался от программируемой схемы. Этим сразу решается проблема стыковки уровней программируемой схемы и программатора. С другой стороны, если в программаторе есть конвертер уровней сигналов, различие VCC программатора и target уже не является проблемой (не считая усложнение схемы программатора).

С обязательной линии VTref должно подаваться напряжение питания устройства. По идее, он нужен вышеуказанному чипу конвертера уровней, внутри программатора. Но если JTAG ICE планирует питаться от target-а, то используется линия Vsupply. Для простоты, их можно объединить, но это не обязательно.

В зависимости от положения джампера SV2 на схеме ATmega16 будет питаться либо от USB, либо от target-а. Я на макетку ставить переключающий джампер поленился, ибо предполагалось питание только от target. Зато перед включением три раза проверил, что питание с USB не подается. Для надежности, на плате USB-TTL разомкнул джампер подачи питания. Далее контакт M8RX соединяется с ножкой МК RX, M8TX - с TX.

Подключаемся к программатору через AVR Studio, и если все правильно соединено, то можно будет прочитать сигнатуру и прошивку.



(устройство справа я обязательно рассмотрю позже, пока что могу только повторить, что внутри у него ATmega128)

Единственный минус клона AVR JTAG ICE - сравнительно небольшой список поддерживаемых МК:

  • ATmega128
  • ATmega128A
  • ATmega16
  • ATmega162
  • ATmega165
  • ATmega169
  • ATmega16A
  • ATmega32
  • ATmega323
  • ATmega32A
  • ATmega64
  • ATmega64A
Еще, говорят, поддерживается AT90CAN128, но проверить это нет возможности :(

13.12.2009

Программирование SO-корпусов

Недавно мне подкинули вопрос: нужно запрограммировать ATtiny2313-20SU до пайки, как это сделать? 

Действительно, в отличие от корпуса DIP, предназначенный для поверхностного (SMD) монтажа SO-20 вызывает ряд вопросов, среди которых главный - где брать панельку?!



Переходники на DIP существуют, но стоят около 1000 рублей. И тут я вспомнил про замечательное видео на easyelectronics.ru, где демонстрировали, как пользоваться Розе на примере платы подобного переходника. Недолго думая, я взял Eagle и соорудил простую печатную плату:



Чтобы сделать ее более универсальной, я разместил на ней кварц 4.0 МГц (общеизвестно, что внутрисхемное программирование не запустится без питания и тактовых импульсов) и снабдил разъемом BH-10R, чтобы можно было подключать к любому программатору, а не только к USBasp.

Сначала надо аккуратно установить программируемую "тиньку" на контактные площадки, соблюдая положение первого контакта:



Затем воспользоваться самым обычным канцелярским биндером (зажимом для бумаг), на фото экземпляр 15 мм шириной и с 9 мм "глубиной" захвата:





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



Резюме: в случае промышленного применения для массового программирования, стоит обратить внимание на время установки микросхемы в подобную панельку. Я не знаю, сколько занимает это в "дорогой" панельке-переходнике, но зато переходник, полученный в домашних условиях выглядит значительно дешевле. Ну и всё это актуально только для случая, когда в схеме не предполагается ICSP-разъема.



Как всегда, публикую файлы для Eagle и экспортированное в eps тонер-трансфер изображение для изготовления по технологии ЛУТ. Лицензия - сс sa ;)

13.11.2009

Вариант USBasp

Вдохновленный освоением ЛУТ ;) я решил потренироваться и развести печатную плату для своего любимого программатора USBasp. Кроме тренировки, я преследовал две цели:

  1. Разместить в программатор в корпусе Ganita, дабы не сверлить боковухи под разъемы;
  2. Сделать легкие модификации в схеме.
Вот оригинал:



Из него я решил исключить R7 и посадить выводы 6 и 7 разъема X2 на землю. Автор собирался сделать поддержку отладки, но за несколько лет как руки у него до этого не дошли. Разводить плату без них проще, тем более, что для Arduino гораздо удобнее иметь 6-ти контактный разъем ICSP в дополнение к 10-контактному. Ну и давно хотел добавить во все решения на USB самовосстанавливающийся предохранитель. Стандартный плавкий 5x20 и места больше занимает, и замены требует при перегорании. Финальная схема:



На гетинаксе это выглядит так:



Предохранитель попался фирмы Bourns, на 300 мА. Специально посмотрел, как это работает - при коротком замыкании за 1-2 секунды ток в цепи питания падает практически до единиц мА, сам элемент ощутимо нагревается. Правда, на выбранном для бесчеловечных экспериментов лаптопе тоже самое происходило и без предохранителя, что указывает на то, что он уже и так установлен и в цепи питания USB-хоста. Тем не менее, пусть будет - так спокойнее:



Внутри добавилась вилка ICSP:



А вот десятиконтактную вилку программирования пришлось взять угловую (BH10R), как и джамперы - чтобы они были доступны с торцов. Вид в корпусе:



Виды с торцов:





Итак, джамперов там три, напоминаю, что:

  • JP1 подает питание в разъем программирования (программируемая схема питается от программатора);
  • JP2 устанавливается для режима программирования самого программатора при первой прошивке или последующих ее обновлениях;
  • JP3 устанавливается для МК, у которых низкая (менее 1,5 МГц) частота тактирования. Например, таковыми являются все чистые МК Arduino - фьюз-биты в них установлены по умолчанию на внутреннюю калиброванную RC-цепочку. Я в этом случае обычно программирую в два приема - сначала с этим джампером ставлю фьюзы для "быстрого" внешнего кварца, затем снимаю джампер и заливаю микропрограмму. Даже ATmega8 шить на пониженной скорости очень тоскливо, а для ATmega328 вообще можно уходить пить чай.

Кстати, одна очевидная деталь, которая обычно ускользает от внимания: чтобы запрограммировать МК этого программатора, надо не только установить JP2, но и позаботиться о питании - например, получить его с разъема программирования, замкнув JP1.

Вот одним таким программатором я прошиваю другой:



В остальном - никаких хитростей, программатор поддерживается avrdude и работает как часы, совместим с Windows и Linux.

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

08.06.2009

USBasp

Когда писал статью про Metaboard, обратил внимание на программатор USBasp, по набору деталей и возможностям сильно напоминающий AVR910:



Ради интереса решил повторить на макетке:



По моим впечатлениям, обмен идет гораздо быстрее, чем с AVR910 от prottoss-а.

По причине прямой поддержки со стороны avrdude ( >= 5.2.0), программатор можно использовать с Arduino IDE. Для этого надо дописать несколько строк в файл arduino-0016\hardware\programmers.txt:
usbasp.name=USBasp
usbasp.communication=usb
usbasp.protocol=usbasp

После этого появляется соответствующее меню в ArduinoIDE:



Работает, что характерно ;)

Firmware с исходниками и чертежи печатных плат можно найти на сайте автора (Thomas Fischl).

Традиционные минусы дешевого программатора:
  • не умеет питаться от программируемой схемы
  • нет предохранителя на линии питания USB (ну, это легко добавить)
Как обычно, выложил комплект деталей на "молоток".

08.05.2009

Arduino-программатор

Как сделать из Arduino программатор?

Наверное, у многих подобная мысль связана с желанием найти как-нибудь время, чтобы реализовать, например, скетч с набором команд AVR-910. Расслабьтесь, все гораздо проще, если в вашем распоряжении Arduino Diecimila, Duemilanove или Mega. Подойдет и любой другой USB-аналог, если у него рядом с USB-чипом FT232RL есть посадочное место для 4-х контактного разьема X3:


Японец Mr.Suz Обратил внимание, что чипы FT245R/FT232R (последний является мостом USB-TTL и установлен на Arduino), имеют помимо всего прочего прямое управление выводами, или т.н. BitBang режим. Появилась идея добавить его в avrdude в качестве дополнительного программатора, и таким образом появился на свет avrdude-serjtag.

А другой японец - Kimio Kosaka - создал подробное руководство о том, как получить из Arduino простой программатор. Итак...

1. Добавим гребенку X3 (PLS4) на ваш Arduino

Как правило, посадочные дырочки залиты припоем, который придется удалить. Если под рукой не оказалось оловоотсоса, подойдет деревянная зубочистка или заостренная спичка.


Устанавливаем PLS4, аккуратно паяем.



2. Делаем кабель X3-ICSP

В минимальном варианте необходимо одно гнездо PLS4 и одно PBS6. Наглядная диаграмма соединений:


Я использовал то, что нашел под рукой (плоский кабель):


Как видите, ничего сложного. Вместо PLS/PLD можно использовать также обжимные гнезда BLS4 и BLD6, получается более симпатично, да и паять не надо.

3. Скачиваем и конфигурируем serjtag

Архив оригинальной программы для Windows можно скачать у меня или у автора, затем распаковать. Также скачайте avrdude.conf, в него добавлены чипы ATmega328P и ATmega88, а плюс новый программатор "diecimila". Перепишите его поверх avrdude-serjtag\binary\avrdude.conf.

4. Меняем родной МК на свежий

Отключите Arduino от USB и источника питания, аккуратно извлеките родной МК из панельки (тут спешить не надо, потихоньку - поддевать тонкой отверткой то с одного края, то с другого):


Установите новый МК на место старого, подключите кабель, изготовленный на шаге 2, и только после этого подключите USB и запитайте Arduino.

5. Зашиваем свежий МК

Зашивание состоит из трех основных этапов: фьюз-биты, микропрограмма (он же бутлоадер), лок-биты. Разберем последовательность на примере ATmega8-16PU:

5.1 Фьюз-биты

Если ATmega только-только с завода, то он будет использовать свой внутренний RC-резонатор, откалиброванный на частоту 1МГц. Поэтому, чтобы не шить бутлоадер на черепашьей скорости, сначала зашьем правильные фьюзы - "внешний кварц > 8МГц". Вот так будет выглядеть командная строка:

avrdude -c diecimila -P ft0 -p m8 -B 4800 -U hfuse:w:0xca:m -U lfuse:w:0xdf:m

Назначение ключей:

-с diecimila

Выбор типа программатора из конфигурации. "diecimila" будет соответствовать такой секции в avrdude.conf:



programmer
id = "diecimila";
desc = "FT232R Synchronous BitBang";
type = ft245r;
miso = 3; # CTS X3(1)
sck = 5; # DSR X3(2)
mosi = 6; # DCD X3(3)
reset = 7; # RI X3(4)
;


-P ft0

выбор порта операционной системы - в данном случае имя устройства USB

-p m8

тип микроконтроллера, соответствует ATmega8

-B 4800

скорость передачи данных, специально понижена до 4800

-U hfuse:w:0xca:m

команда программирования: записать в HIGH fuse байт со значением 0xca

5.2 Микропрограмма

Зашиваем микропрограмму на нормальной скорости:

avrdude -c diecimila -P ft0 -p m8 -U flash:w:ATmegaBOOT.hex

5.3 Lock-биты

Защищаем bootloader от записи со стороны микропрограммы (sketch-а). Мало ли чего может произойти по причине ее ошибочного поведения ;)

avrdude -c diecimila -P ft0 -p m8 -U lock:w:0x0f:m

Чтобы прошить остальные типы процессоров, используйте параметры из файла arduino-00XX\hardware\boards.txt:



diecimila.bootloader.low_fuses=0xff
diecimila.bootloader.high_fuses=0xdd
diecimila.bootloader.extended_fuses=0x00
diecimila.bootloader.path=atmega
diecimila.bootloader.file=ATmegaBOOT_168_diecimila.hex
diecimila.bootloader.unlock_bits=0x3F
diecimila.bootloader.lock_bits=0x0F

atmega328.bootloader.low_fuses=0xFF
atmega328.bootloader.high_fuses=0xDA
atmega328.bootloader.extended_fuses=0x05
atmega328.bootloader.file=ATmegaBOOT_168_atmega328.hex
atmega328.bootloader.unlock_bits=0x3F
atmega328.bootloader.lock_bits=0x0F


Надо только не забыть несколько моментов:
  • взять нужный файл прошивки из hardware\bootloaders;
  • выставить значение ключа -p в соответствующее МК: Atmega168 - m168 или ATmega328P - m328p;
  • прошить расширенные фьюз-биты - добавить еще один параметр -U efuse:w:0xNN:m, где NN - 00 для ATmega168 и 05 для ATmega328

6. Проверка

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

Усовершенствования

Первым делом, спешу заметить, что простая модификация кабеля дает возможность программировать уже не только то, что находится в панельке PDIP-28 Arduino, но вообще любую схему методом ICSP:


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


К ней можно подключать и питать от +5В схему, у которой есть шестиконтактный ICSP-разъем, например другой Arduino:


Не так давно я писал про +1К к памяти программ для Arduino. В этом случае надо использовать значения фьюз- и лок-битов, а также файлы бутлоадеров из той статьи. И будет вам на 1К больше свободного места для скетча ;)

Итог: благодаря торжеству японской инженерной мысли, мы получили простейший программатор ICSP на USB. Вот так выглядит комплект, который понадобится для апгрейда: