13.03.2009

AVR910 на макетке

Недавно нашел точку, где можно незадорого обзавестись макетными платами без пайки. В дополнение к маленькой, купил еще одну - побольше, на 630 контактов:


Единственный программатор, который у меня есть - это Parallel Programmer, он экстремально дешев, но требует для работы машину с LPT-портом. Давно уже присматриваю что-то более человеческое, но не подступиться по цене. И дело даже не в том, что "мы бедные студенты" (с), просто отдавать за программатор 1000 рублей немного жалко: он же не универсальный. А универсальный стоит уже больше 5000 рублей, что опять дорого, потому что он каждый день не нужен. Ну и так далее ;)

Вот бы самому что-то смастерить! Чтобы для более распространенных шин, хотя бы и для USB. Схемы есть, но, как правило, на чипе FTDI232 (который, кстати, стоит и на Arduino), у него единственный минус: шаг ножек 0,65 мм и неизбежная необходимость в печатной плате (и в развлекательной пайке с лупой, разумеется).

Но не все так плохо, как кажется с первого взгляда. На просторах интернета выложен проект Андрея Рыжкова под названием "Программатор микроконтроллеров AVR / 89S совместимый с AVR910". Андрей обошелся без отдельного USB-чипа и выполнил схему на единственной ATmega8-16PI, интегрировав в микропрограмму код драйвера USB от Objective Development. Схема получилась такая:


Роль драйвера заключается в следующем: при условии тактирования МК от 12 МГц, этот фрагмент кода эмулирует протокол обмена USB "low speed device" (ровно в восемь раз медленнее - 1,5 МГц, не путать с FullSpeed и HiSpeed скоростями). Далее, Андрей добавил в микропрограмму протокол AVR910, и... получился полноценный программатор, который можно собрать за час на любой макетной плате, а комплект деталей ну никак не будет стоить больше 300 рублей (исключая покупку в Чип и Дип, в плане цены они способны на многое ;)

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

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


Ради справедливости стоит отметить, что без паяльника все-таки не обойтись. Поскольку контакты соединены в рядах группами по пять, установить на эту макетку разъем USB-B-1J нельзя: четыре контакта хоть и на расстоянии 2,54мм, но собраны "в кучку", т.е. неизбежно будут замкнуты, куда не поставь. Тоже самое касается и ICSP-разъема PBS-06, а вот ATmega, как и все микросхемы в PDIP, устанавливается над желобком, по центру.

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


Некоторые соединения вообще выглядят как "взрыв на макаронной фабрике":


Для токоограничительных резисторов 330 Ом не удержался и попробовал сделать "красиво" - благо, это не трудно:


Дальше аппаратная история как бы заканчивается, и начинается программная. В качестве испытуемого выступил все тот же Arduino Diecimila с ATmega328 на борту:


Для работы приложений надо установить драйвер виртуального COM-порта, причем некоторые приложения, типа AVRProg будут искать его исключительно в диапазоне COM1..COM4. Но это еще полбеды, на странице проекта упоминаются Windows XP и 2000, а вот про Vista - нет. Что неудевительно: по давней традиции Microsoft, в новой версии ОС поддержку bulk-transfer для lowspeed USB было решено упразднить. Понятно, что не по стандарту, но ведь работало же, зачем? (еще один риторический вопрос к Micro$oft).

После подключения программатора к Vista устройство опознается (если нет, то вы просто неверно собрали плату), но процесс инсталляции закончится полным провалом. Если вы уже наступили на эти грабли (как я), не расстраивайтесь, выход есть. Первым делом, надо снести под корень установленные inf-файлы для Windows XP (если вы все-таки решили попробовать их установить, см. выше). Под корень - это зайти в диспетчер устройств, отыскать там подключенный программатор и по правой кнопке "Удалить", не забыв поставить галочку про удаление драйверов:


Теперь надо вооружиться драйвером для Vista. Это будет именно драйвер, смотрите здесь для Vista 32. Повторите процесс установки, указав в качестве драйвера для "страшного и непонятного" винде устройства AVR910 каталог с распакованным драйвером для Vista. Может появиться сообщение:


Надо развеять сомнения винды и продолжать до победного конца, он выглядит так:


Победить COM19 довольно просто: идем в диспетчер устройств, находим наше устройство "USB SerialPort COMXX" (удобно искать, переключившись в режим просмотра "по подключению"), затем "свойства", "параметры порта", "дополнительно". Дальше можно выбрать любой номер, даже уже занятый.

В результате, у меня программа ChipBlasterAVR v.1.07 Evaluation благополучно заработала, правильно прочитав всю память ATmega328. Правда, происходило это небыстро, я даже успел выпить стакан чая ;)

Ссылки по теме:
  • prottoss.com - описание программатора AVR910 от Андрея Рыжкова aka prottoss
  • Objective Development - проект драйвера low-speed USB для avr
  • Osamu Tamura - Using Low-speed Bulk Transfer on Windows Vista
  • Arduino - решение для быстрой прототипизации электронных схем

4 комментария:

  1. Под Линуксом этот low speed bulk transfer не работает очень жестоко - молча в корень вешает систему. Так что - это не наш метод :)

    Разорился и купил себе mk2 2000тыр и все что мне надо - шьет.

    ОтветитьУдалить
  2. А где можно недорого такими обзавестись?

    ОтветитьУдалить
  3. А где можно такие макетные платамы без пайки взять не дорого?

    ОтветитьУдалить
  4. Да много где, вообщем-то. И в России, и за рубежом такого довольно много. Можно через "Молоток": макетки и наборы деталей.

    ОтветитьУдалить