Tag Archives: Программатор

Универсальная плата FT2232

Вот уже два года я юзаю маленькую платку с FT2232 в качестве программатора и отладчика. Я выкладывал ее проект еще давно. Как видно, это интерфейсная часть выдернутая из Pinboard II. И вот я решил запилить себе его фабричный образец и, чуток подредактировав, сунул в общий заказ с модулями. Теперь у меня их под 300 штук.
 


 
Комплектуха уже в пути, монтажники уже нервно потирают рукоятки паяльников. Так что скоро оно появится в моем магазинчике.
 
(далее…)

Read More »

Прошивающий щуп

Все любят внутрисхемное программирование. Ну, а чего? Удобно же — воткнул провода в девайсину и прошил. Красота. Один минус — надо выводить разъем для программирования. Хорошо когда плата большая и есть куда дороги кинуть. А если тесно? А если лень петлять и круголять, чтобы вывести разъем? Тогда на помощь приходит прошивающий щуп!
 

Принцип прост — лепим дорожки как нам надо, не заморачиваясь группировкой выводов программирования в одном месте. Просто в удобных местах на них оставляем пустые пады и сверлим дырки. Потом дырки под программирование в том же порядке дублируем на еще одной платке — той которая будет щупом, а уже на ней спокойно разводим дорожки под колодку нашего любимого программера. Либо просто припаиваем провода, как удобней. Платки травим одновременно, собственно какая проблема вытравить еще одну небольшую вспомогательную плату? Да никакой!
 

А чтобы щуп надежно контачил применяем пружинный контакт. Вот таким макаром:

 

Пружинки можно намутить из одноразовых зажигалок (они там кремень поджимают) или из цилиндрового замка наковырять, для особо тонких случаев. В моем случае, я их штук 50 выковырял из какого то разьема для принтера — они там массив контактов межблочных прижимали. В общем не большая это проблема пружинку нарыть.
 

А дальше просто. Вжимаем щуп в нашу плату, чтобы обеспечить надежный контакт, шьем, убираем. Удобно и быстро.
 

А таким же макаром удобно и на логический анализатор или осциллограф, или еще куда диагностическую инфу тащить. Делов то — дырку на плате предусмотреть. И не надо крючками курочить выводы микросхем. А чтобы щуп не отсреливался, можно предусмотреть еще одну дырочку и туда ввинтить стоечку какую, прикрутив отладочную конструкцию к ней.

З.Ы.
Мне тут подсказывают, что сия приблуда по умному зовется как «pogo pin» и продается в виде россыпи пружинных иголочек. Если не хочется колхозить.

Read More »

Проектирование печатной платы и изготовление устройства в Eagle Cad на примере PICKit2

Предыстория
На днях возникла необходимость собрать программатор PicKit2, да и сам программатор хотелось сделать маленьким, дабы можно было удобно с собой таскать. Как раз на форуме видел несколько тем про двухсторонние платы по методу ЛУТ или ЛЛТ, в частности про изготовление двухсторонних плат, в которых основная засада это совмещение двух сторон идеально точно. Постараюсь на конкретном примере именно этого программатора рассказать, как это делаю я. Разумеется, в своем повествовании буду использовать программу Eagle Cad.

Недавно DI HALT на своем сайте публиковал ряд статей по Eagle Cad (Часть 1, Часть 2 и часть 3)

Программа сама по себе довольна интересна, хотя и заточена на автоматическое производство и сравнивать ее с Sprint Layout не имеет смысла, т.к это две абсолютно разные программы. Каждая из которых хороша для своих масштабов.

Например, мне в Eagle нравится то, что и схема и плата все вместе. Как отмечал DI HALT, при разводке очень удобна подсветка связей которые в данный момент трассируешь, если есть желание то можно сразу, после того как плата готова, создать выходные файлы и отдать на производство. В итоге получить красивую зелененькую плату, но в данной статье речь пойдет не об этом.

Но я немного отвлекся… Итак, скачали Eagle Cad, установили ту версию какая нравится (Demo или порыскали и нашли ключик), прочитали прошлые статьи и получили примерное представление о том что же представляет из себя Eagle Cad.

Последняя версия на данный момент Eagle Cad 5.10.0, вот в ней и будем рисовать, трассировать, печатать и потом делать наш программатор PicKit2.

(далее…)

Read More »

AVR. Учебный Курс. Архитектура Программ

Все учебные курсы по микроконтроллерам которые я встречал (в том числе, к сожалению, и мой ассемблерный, но я надеюсь это постепенно поправить) страдают одной и той же проблемой.
В курсе бросаются строить дом не заложив фундамент. Только показав на примере как мигнуть светодиодом, сразу же кидаются в периферию. Начинают осваивать ШИМ-ы, таймеры, подключать дисплеи и всякие термодатчики.
С одной стороны это понятно — хочется действа и результата мгновенно. С другой — рано или поздно такой подход упрется в тот факт, что программа, надстраиваемая без четкой идеологии, просто обрушится под своей сложностью. Сделав невозможным дальнейшее развитие.
Итогом становится либо рождение жутких программных уродцев, либо миллионы вопросов на форуме вида «а как бы мне все сделать одновременно, а то частоты контроллера уже на все не хватает».
 

Самое интересное, что правильной организации программы учат программистов в ВУЗах, но вот только к микроконтроллеру народ обычно идет не от программирования, а от железа. А, как показала практика обучения в ВУЗе, электронщиков толковому программингу практически не обучают :( Приходится все додумывать самостоятельно.

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

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

 

Итак, я для себя выделяю следующие структуры, по порядку возростания сложности конструкции и количеству управляющего кода:
 

  • Суперцикл
  • Суперцикл+прерывания
  • Флаговый автомат
  • Диспетчер
  • Приоритетный диспетчер
  • Кооперативная RTOS
  • Вытесняющая RTOS

 

А теперь подробно по каждому пункту: (далее…)

Read More »

AVR. Учебный Курс. Программирование на Си. Работа с памятью, адреса и указатели

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

Итак, начну по порядку.
Инфа, любая инфа (команды, данные) лежит в памяти по ячейкам. У каждой ячейки есть порядковый номер — адрес.

Мы можем напрямую сказать процессору — возьми данные из ячейки с адресом 0xA0 и положи его в ячейку с адресом 0x11. Это будет прямая адресация. Здесь адреса 0xA0 и 0x11 содержатся напрямую в машинном коде. Это очень быстро, просто и не требует никаких дополнительных телодвижений. Один минус — адреса 0xA0 и 0x11 нельзя изменить, как мы их впишем в код, так они там и останутся.

Но может быть и другой способ. Когда у нас есть еще две ячейки памяти. Например, А и Б в которые мы предварительно положим числа 0xA0 и 0x11 соответственно. И тогда предыдущая операция будет выглядеть так.

Возьми число из ячейки адрес который лежит в А и положи в ячейку адрес которой узнаешь из Б.

Результат тот же, но возникло множество дополнительных телодвижений. Во первых положить первоначальные адреса 0xA0 и 0x11 в ячейки А и Б. Потом, при совершеннии операции, используая данные ячеек А и Б как адреса, взять уже оттуда нужные нам данные и совершить обмен.

Но прелесть вся в том, что при этом мы можем как угодно менять А и Б (ведь это такие же переменные как и любые другие) и они будут указывать на разные данные.

А один и тот же кусок кода становится универсальным. Он может работать с любыми данными адреса которых нам укажут переменные А и Б.

А сами эти переменные и будут указателями.
(далее…)

Read More »

Скоростной AVR USB программатор на FT232RL без вспомогательного контроллера

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

Дело в том, что для работы простейшего программатора, не требующего в своем составе микроконтроллера, нужен компьютер с COM или LPT портом, причем желательно с частотой процессора не выше гигагерца-двух. Да операционную систему подревней — WinXP или Win2K. А это ныне редкость.
 

С другой стороны, для USB программаторов нужно предварительно прошить контроллер. А чем его прошить? Вот тут и возникает проблема курицы и яйца — как прошить контроллер программатора не имея программатора.
 

Не так давно появилось решение позволяющее сделать надежный и быстрый USB программатор AVR на базе тупой, непрограммируемой, логики.
 

Bitbang, что это такое и с чем его едят
Это не что иное как прямое управление выводами какого либо порта. В COM порт можно отправить байт через какой либо высокоупровневый API и он просто выйдет через линию TX потоком стандартого RS232 сигнала.
А можно достучаться напрямую до регистров отвечающих за состоянием каждого пина порта и дрыгая их как нам угодно сэмулировать через тот же COM порт не только RS232, но и SPI, I2C или Dallas 1-wire, HD44780 протокол, применив простейший тупой обвяз. Это и будет битбанг.
 

В старых программаторах вроде SiProg (PonyProg) или в схеме Громова так и было сделано с COM портом. И работало надежно и стабильно. Но, увы, СОМ порт ушел в небытье, а при попытке сделать то же самое с виртуальным COM портом на конвертере USB-RS232 ничего не получалось. Т.к. заточен он был все же на работу нормального COM порта, а для битбанга приходилось извращаться. В результате такие схемы либо не работали вовсе, либо работали ОЧЕНЬ медленно, прошивая контроллер за час-полтора, что ни в какие ворота не лезет.
 

Все изменилось с появлением микросхемы конвертера USB-UART FT232R у которой стал доступен битбанг режим не через виртуальный COM порт, а напрямую через драйвер FTDI. И вот тут наступила нирвана.
 

За битбанг там отвечает 8 выводов. Вот их раскладка.

 
В даташите ее нет, но она есть в аппликухе Application Note AN_232R-01 for the FT232R and FT245R Bit Bang Modes
 

В результате, из одной только FTDI получается первоклассный скоростной программатор, прошивающий 16кб прошивки за 10-12 секунд и это вместе с верификацией!!!
 

А из деталей надо ТОЛЬКО микросхему FT232RL, два конденсатора на 0.1uF и гнездо USB. ВСЕ! Ну и проводочки естественно.
 

Схема включения получается следующей:

(далее…)

Read More »

Оболочки для USBASP

Вот уже почти два года активно использую USBasp в качестве основного программатора. Все мне в нем нравится, кроме прошивающей программы — avrdude консольная, а мне под каждую прошивку писать свой батник лениво.
Да и начинающим порой разобраться в прорве его ключей бывает сложно. Так что будем натягивать на него ГУЙ ака Графически Удобный Йнтерфейс. Их существует с пол десятка я же отобрал наиболее удачные, на мой взгляд, оболочки.
(далее…)

Read More »

Программатор STK200/300 для микроконтроллеров AVR

DI HALT:
Признаюсь, что я этот программатор никогда не собирал, т.к. у меня с первого раза заработала и никогда не подводила схема Громова. Однако, судя по многочисленным комментариям, эта схема работает далеко не у всех и тут не все гладко. Даже если есть COM порт, то не факт что он захочет правильно работать в таком режиме. Многое зависит и от операционки, и от тактовой частоты проца. В общем, грабель там закопано много. Но есть еще варианты относительно простой прошивки микроконтроллеров AVR — это программатор на LPT, аналог STK500/300. В своей простейшей модификации «пять проводков» не требует вообще ничего, даже резисторов. Соединяешь все напрямую и шьешь. Правда пожечь LPT порт тут проще простого. C токоограничитльными резисторами все безопасней, однако и это не спасает. Помогает установка буфферной микросхемы 74HC244.
И получаем STK200! Достоинства этой схемы в том, что это классика жанра. Ее поддерживают по моему вообще все прошивающие программы и оболочки. В том числе и разные среды разработки вроде CVAVR. Надежная и простая, как кувалда, схема. Недостаток один — нужен LPT порт, который ныне редкость.
Но что мешает под свои радиоопыты завести древнюю машинку уровня PIII-500 которую можно собрать из хлама за пиво? И работать будет все отлично и пожечь не жалко. Ну, а вдоволь наигравшись с STK и поняв премудрости процесса прошивки в деталях, можно собрать и USB программатор. А тут Михаил (Code007) написал отличную статью по сборке этого девайса. Грех не выложить.

В настоящее время микроконтроллеры AVR фирмы ATMEL получили весьма широкое распространение. Это обусловлено небольшой стоимостью, развитой периферией, доступностью и удобством средств разработки. Несомненным достоинством процессоров этой серии является возможность внутрисхемного программирования с использованием интерфейса SPI.
Для начала работы с этими микроконтроллерами необходимо обзавестись какими либо средствами осуществляющими внутрисхемное программирование. Существует достаточно большое количество различных конструкций программаторов, но на первоначальном этапе вполне подойдет адаптер STK200/300. В данной статье я попытаюсь подробно описать процесс сборки этого адаптера. Причем настоятельно рекомендую повторить конструкцию именно так, как описано, а не на куске макетной платы. Рекомендация вытекает из шести летнего использования адаптера собранного на чем попало.
Адаптер получил свое название от комплектующихся им отладочных плат фирмы ATMEL для быстрого начала работы с микроконтроллерами AT90S8515 и ATmega103 соответственно. На самом деле приведенная схема соответствует одновременно обоим адаптерам, в ней присутствуют перемычки для определения наличия как адаптера STK200 (выводы 2-12 разъема X1), так и STK300 (выводы 3-11).

Рисунок 1. Электрическая принципиальная схема адаптера STK200/300

(далее…)

Read More »

Самодельная ZIF панель для SOIC

Вячеслав, из магазина «Элемент», придумал оригинальную конструкцию ZIF панельки для SOIC. Тот, кто пытался купить такую штуку, наверняка офигевал от цены за, казалось бы, несложную вещь — от полутора до восьми тысяч рублей. В зависимости от наглости продавца. А в некоторых случаях без нее довольно неудобно. Потому решаем проблему, так сказать, подручными средствами, из говна и палок.
(далее…)

Read More »

Ответный удар по Китаю!

AVR Dragon
   Как то раз компания Atmel провела в Китае среди разработчиков опрос, на тему каким они видят отладочные средства для контроллеров AVR, что они от него требуют и какую стоимость ожидают. В результате опроса был разработан и выпущен дивный девайс AVR Dragon, представляющий из себя программатор (как ISP так и High Voltage) и debugWire/JTAG отладчик, позволяющий вести внутрисхемную отладку программы. И стоило это чудо всего 50 баксов. Мечта да и только.

Прикол в том, что эти AVR Dragon горели пачками без видимых причин, вскоре выяснилось почему — разработчики допустили ошибку, в результате чего, из-за помех по питанию, стабилизатор питания взбрыкивает и, источая вонь, красиво сгорает. Также вышла официальная дока от Atmel в которой было сказано, что да, прокосячили, а поэтому возьмите напильник и доработайте Нужно допаять проводок от питания USB до выхода стабилизатора. Как показано на рисунке в документации. При этом обещают полное сохранение гарантии.

Хе хе хе, ну прям как «нате, захавайте и вы глючного дерьмеца, ускоглазые утырки» получилось. =))))

В целом, не считая этого косяка, выглядит девайсина многообещающе, особенно при ее цене. Правда где ее можно отхватить за 50$ я не нашел, говорят была в ЭФО, но ныне у них на складах нету. В Чип и Дип он лежит по 116 баксов, а это уже перебор. Если найду за приемлемую цену то прикуплю.

Если у кого есть какие мнения по поводу этого девайса поделитесь.

Read More »

USB программатор AVR — USBAsp

Вид сверху
Вид сверху

!!! ЭТЕНШН !!!
Появилась схема USB программатора которая НЕ требует предварительной прошивки управляющего микроконтроллера.

Так как у многих уже давным давно нет ни COM ни LPT порта, то я решил выложить схему USB программатора для AVR. Это будет широко известный в узких кругах USBASP. Схема простая как три копейки, но COM или LPT порт все же потребуется — для того, чтобы прошить управляющий контроллер. Так что можешь сходить к другану. Программатор строится на контроллере ATMega48 или ATMega8. Нужна именно 8 или 48, без всяких индексов L. Так как у нас требуется частота выше чем 8 Мгц. (далее…)

Read More »

AVR. Учебный Курс. Конфигурация FUSE бит

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

Но без знания этой особенности контроллера далеко не уедешь. Так что распишу все по порядку. У разных версий контроллеров число FUSES разное, какие то могут отсутствовать, но основные есть всегда. Вот по ним и пройдемся.
 

Конфигурационные биты находятся в особой области памяти и могут быть изменены только с помощью программатора при записи контроллера. Есть старший байт и младший байт. Младший байт обычно отвечает за частоту, а старший за всякие фенечки.
 

Итак, главное:

В Atmel AVR принята следующая нотация: сброшенный в ноль fuse bit считается активным, т.е. включенным.
 

Пример Бит RSTDSBL, как можно догадаться из названия, это RESET DISABLE. Включил эту опцию и у тебя нога RESET превращается в порт ввода-вывода, но за это ты теряешь возможность перешить контроллер через ISP.
 

Так вот, чтобы выключить RESET (и получить большое западло с прошивкой в обмен на мелкую подачку в виде дополнительной ножки) в этот бит надо записать 0.
 

С одной стороны нелогично и криво. Как бы во всем мире принята нотация, что ноль это выключено, а тут, понимаешь, наоборот. С другой стороны, это их контроллер, что хотят то и делают. Один раз запомнить и все. Да и вообще, в электронике часто за сигнал берут ноль.

 
(далее…)

Read More »

Прошивка PinboardProg для превращения демоплаты PinBoard 1.0 в ISP программатор

Хай Pinboard сообщество! Помнится я обещал, что будет прошивка позволяющая превратить демоплату Pinboard 1.0 в программатор для прошивки других МК. Пацан сказал — пацан сделал :)
 

Итак, вот две прошивки. Для плат на базе Atmega16 и Atmega32. Тактовая 8 МГц (дефолтная настройка).
16_PinboardPROG.hex
32_PinboardPROG.hex

 

Далее как обычно в картинках. (далее…)

Read More »

SinaProg — графическая оболочка для AVRDude

Вот уже много лет я пользуюсь мощнейшей программой для прошивки — avrdude. Программа эта поддерживает почти все виды программаторов, а те что не поддерживает изначально легко в нее добавляются.
Но есть у ней особенность которая сильно отпугивает многих — она консольная. И все шаманства с ней заключаются в формировании командной строки.

С одной стороны это хорошо — консольная утилита позволяет очень сильно ускорить и автоматизировать процесс прошивки. Один раз написал батничек и для перешивки только вызывать его и все.

Остается проблема прошивки разных устройств, ведь под каждую придется делать свой батник. И ладно бы ключи прописать, да файл с прошивкой указать. Самая засада начинается с fuse битами (впрочем, как и везде в мире AVR ;) ) Тут их надо вначале внимательно проштудировать в даташите, выписать в виде байтов, вписать правильно в командную строку и молиться на то, чтобы нигде не ошибиться.
Да, для avrdude написано много оболочек, но все что мне встречались раньше решали лишь малозначительную проблему выбора нужного ключа файла и/или программатора, а фузы также было надо указывать числом.

Проблема решилась с появлением новой версии оболочки SinaProg от команды программистов-террористов из Аль-каиды иранских AVR программеров.

Запускаем… Если не запустилась, то возможно потребуется установить фреймворк от NI — LabView RunTime Library

(далее…)

Read More »

Программатор Громова

Самый простой вариант программатора для AVR это пять проводков, припаиваемых к порту контроллера и втыкаемых в LPT порт. Не спорю, можно и так. Но я все же не рекомендую этот способ. Даже схему подключения давать не буду — если надо будет сам найдешь. Так как данный метод не очень стабилен, возможны сбои при прошивке, длина проводков ограничена двадцатью сантиметрами (если больше, то будет глючить), поэтому придется шариться в комповой заднице. Да и LPT порт спалить проще простого. В общем не рулез.

Шарясь по инету, я нашел отличный программатор, работающий через RS232 он же COM порт. А также удобную программу для прошивки контроллера UniProf от Николаева. Схему программатора придумал Громов, создатель Algorithm Builder.

Саму программу UniProf можно скачать у меня, но лучше взять с сайта автора. Возможно там будет версия посвежее.
(далее…)

Read More »

AVR. Учебный курс. Трактат о программаторах

Программа для микроконтроллера пишется на любом удобном языке программирования, компилируется в бинарный файл (или файл формата intel HEX) и заливается в микроконтроллер посредством программатора.
 

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

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

Программаторы бывают разные под разные семейства контроллеров существуют свои программаторы. Впрочем, бывают и универсальные. Более того, даже ту же простейшую AVR’ку можно прошить несколькими способами:
 

Внутрисхемное программирование (ISP)
Самый популярный способ прошивать современные контроллеры. Внутрисхемным данный метод называется потому, что микроконтроллер в этот момент находится в схеме целевого устройства — он может быть даже наглухо туда впаян. Для нужд программатора в этом случае выделяется несколько выводов контроллера (обычно 3..5 в зависимости от контроллера).

(далее…)

Read More »