AVR dragon.
Семейство микроконтроллеров с архитектурой AVR стало де-факто стандартом для радиолюбительских поделок. Я начинал изучать контроллеры именно с этого семейства, но и сейчас нередко использую их в домашних конструкциях.
Вот уже более года для отладки прошивок я использую AVR dragon.
AVR Dragon – самый дешевый отладчик для микроконтроллеров AVR фирмы Atmel, поддерживающий debugWire.
Чем отличается программатор от отладчика?
Программатор – это просто устройство, записывающее программу в контроллер. Дальше программа исполняется сама по себе и если что-то пойдет не так, то узнать что именно — очень сложно. Отладчик позволяет остановить исполнение программы в любой точке и узнать значения всех переменных, регистров и вообще памяти, отладчик позволяет исполнять программу пошагово, посмотреть стек вызовов функций и кучу других полезностей. Вообщем, отладчик – это круто!
Интерфесы
Чтобы было понятно, зачем мне нужно было покупать именно этот отладчик, а не собрать, к примеру, вот такой, кратко опишу разные интерфейсы программирования и отладки которые используются в контроллерах AVR.
ISP (In System Programming) – интерфейс внутрисхемного программирования, позволяет программировать контроллер не выпаивая из платы. Через ISP контроллер программируется с небольшой скоростью, но ISP обладает большим достоинством для начинающих – программатор для этого интерфейса состоит из четырех проводков. Во многом благодаря этому интерфейсу, Atmel стал лидером любительских конструкций. Для того, чтобы запрограммировать контроллер, к нему нужно подключить 4 сигнала – MISO, MOSI, SCLK, RESET.
HV prog – высоковольтное программирование. Умеет очень быстро программировать контроллеры, используется при массовом выпуске, в любительской практике практически бесполезен. (может быть использован для восстановления ISP, если вы его случайно отключили по невнимательности). К контроллеру нужно подключить 18 сигналов — PD[7…0], PC[7…0], XTAL, RESET.
JTAG – самый широко используемый отладочный интерфейс. О нем уже очень много написано, поэтому повторяться не буду. Присутствует в контроллерах с большим количеством ножек. Требует подключения пяти сигналов (TCK, TDO, TMS, TDI, RESET).
debugWire – проприетарный отладочный интерфейс Atmel, который позволяет следить за внутренними процессами контроллера по одному проводу (RESET). Так, как в любительской практике обычно используются контроллеры с маленьким количеством ножек, это просто замечательная альтернатива JTAG’у.
К сожалению, Atmel немного испортил всю замечательность идеи тем, что debugWire на новых контроллерах отключен по умолчанию, и включается с помощью ISP интерфейса (тоесть, прийдется сначала подключить к контроллеру целых 4 контакта, включить debugWire, и только после этого можно отключить 3 контакта SPI).
AVR Dragon позволяет отлаживать контроллеры с памятью до 32кБайт, а программировать умеет вообще все контроллеры AVR (кроме atxmega).
Конечно, за цену AVR dragon можно накупить очень много больших контроллеров ( 33 штуки atmega16, к примеру ) и использовать их с AVR JTAG ICE clone, так-что покупать дракона или нет – решать вам. Лично я люблю использовать хороший инструмент, поэтому купил.
DebugWire
Практически все поделки я собираю на контроллерах: atmega48, atmega88, atmega168 и attiny13. Это очень сбалансированные контроллеры! Все они имеют debugWire интерфейс.
Первая проблема, с которой я столкнулся, купив avrDragon – как-же его подключить к контроллеру? Дело в том, что на самой плате отладчика выведена только колодка. На противоположной стороне нарисована карта расположения выводов, но как они согласуются – далеко не очевидно! Я разок ошибся с подключением, поэтому выкладываю расположение контактов.
Каждый сигнал нужно подключить к такому-же на контроллере. Сигнал VTG ( Target Voltage ) служит для подстройки логических уровней отладчика к логическим уровням отлаживаемого контроллера и подключается к напряжению его питания.
Вторая проблема – DebugWire не работает, если у контроллера нет тактовой частоты! Я долго искал проблему в драконе и проводах, а оказалось, просто дорожка к кварцу была повреждена.
Третяя проблема – скорость отладки в AVR Studio была значительно выше, чем в IAR. Так как основное мое средство разработки все-же IAR, это меня совсем не радовало. К счастью, в последних версиях IAR’а скорость работы с debugWire значительно увеличилась.
Для подключения дракона к контроллерам, я спаял два проводка. Одни из них припаивается прямо к дорожкам, второй вставляется в разъем на плате. Так как на разъеме дракона нет ключа, я сделал свой – написал TOP. Кстати, провода очень удобно метить такой технологией – пишем маркером на термоусадке название сигнала и термоусаживаем ее – наши надписи теперь стали маленькие, красивенькие и ни за что не слезут с проводков!
Теперь типичная последовательность действий. Запускаем IAR. В опциях проекта меняем отладчик на Dragon (Project->Options->Debugger, устанавливаем Dragon). Подключаем дракона к плате, подаем питание. Теперь выбираем в меню Dragon->Fuse Handler. Устанавливаем те фьюзы, которые нам нравятся, разрешаем debugWire (фьюз DWEN). Отключаем питание, отключаем ISP от контроллера (можно и оставить, если SPI не используется), оставляем только RESET, VTG и GND подключенными. Включаем питание, жмем на кнопку “Download and Debug”. Вуаля:
Если захочется поменять фюзы, придется опять подключить ISP контакты. В подавляющем большинстве проектов SPI не используется, поэтому можно один раз подключиться и ничего не трогать.
У дракона есть несколько опций (Project->Options->Debugger->Dragon):
Supress download – если поставите галочку, будет спрашивать вас – загружать новую программу в контроллер или оставить старую? Используется для (весьма сомнительной) экономии времени и ресурса флэш-памяти.
Allow download to RAM – иногда в процессе отладки, требуется сохранить данные ОЗУ, а потом загрузить их обратно в контроллер. Эта опция позволяет это сделать. Я никогда ей не пользовался, поэтому ничего толком сказать не могу.
Target consistency check – проверяет правильность записанных данных.
Эти опции используются редко и не очень важны, а вот на второй вкладке есть очень важная опция:
Run timers in stopped mode – таймера контроллера продолжают работать, даже если программа остановлена. К примеру, это очень важно для ШИМов, если их остановить в непредвиденный момент, что-нибуть может выйти из строя.
У меня спрашивали – можно ли программировать контроллер по debugWire, или это только отладочный интерфейс? Ответ – можно. Но опять-же придется сначала включить debugWire с помощью ISP.
JTAG
Недавно попробовал использовать JTAG с AVR ами. Впечатления самые положительные. Заливает прошивку значительно быстрее, чем debugWire. Умеет программировать фюзы.
Макетное поле
На драконе есть еще макетное поле. Говорят, если впаять туда ZIF-панельку, то будет очень удобно массово программить контроллеры. Лично я этим не занимался, поэтому ничего сказать не могу.
Проблема со стабилизатором.
Есть еще одна проблема. В схеме питания дракона разработчики допустили ошибку, и микросхема в блоке питания некоторых экземпляров сгорает. Atmel дает рекомендацию выпаять сгоревшую микросхему и припаять один проводок, при этом гарантия на дракона не теряется.
Эта проблема проявляется при прикосновении пальцем к микросхеме-стабилизатору напряжения, который возбуждается и перегревается. При этом материнская плата должна ограничить ток и отключить дракон, но дешевые материнки этого не делают и дракон сгорает. На картинке показано, куда не стоит прикасаться.
В прочем, пока микросхема не сгорела, переделкой заниматься не стоит. Главное – выключать дракона когда на долго отходите от него чтобы не устроить пожара. Дракон может оказаться огнедышащим!
Как на зло, сразу после написания этой статьи стабилизатор моего дракона сгорел. Я произвел переделку, и все заработало (даже лучше, чем до этого – меньше разрывов связи). Переделка очень простая. Нужно выпаять микросхему стабилизатора и пробросить проводок от USB разъема до танталового конденсатора. Микросхема-стабилизатор имеет термалпад, и поэтому отпаивается довольно сложно.
Возникает вопрос – зачем Atmel поставил на плату стабилизатор, если его можно без проблем заменить просто проводком? Сам Atmel на этот вопрос отвечает так —
Большинство компонентов на плате имеют диапазон напряжений питания 4.5-5.5 вольт. Однако, стандарт USB говорит о том, что напряжение на шине USB в худшем случае может опускаться до 4.15 вольт ( если используется USB хаб с питанием от компьютера ). Для того, чтобы поднять напряжение с 4.15 до 5 используется стабилизатор.
Таким образом, если вы подключаете дракона напрямую к компьютеру или к хабу с внешним питанием, то после переделки дракон будет продолжать работать как ни в чем не бывало.
Хм, вроде бы в новых ревизиях дракона этот баг с питанием исправили.
А еще можно было попробовать поменять кондер на другую емкость, тогда может возбуждения бы не получилось
Найти правильный кондер — задача сложная. Многослойная керамика высокой емкости — штука нежная — неловкое прикосновение и внутренние слои ломаются.
Переделка как в статье надежнее для любительских условий. Тем более, что хабы у нас используют немногие.
Кстате, атмел расширил диапазон поддерживаемой памяти для дракона до 64кБайт.
Там вроде тантал стоял? Разве нет?
Опа, а вот это радостная весть! Аппаратно это как то зависит? или только прошивку дракону сменить?
В магазинном варианте стоит тантал, но для того, чтобы оно не заводилось тантал нужно заменить на многослойную керамику.
Проблема с заводкой из-за того, что разработчик не скомпенсировал ноль в обратной связи стабилизатора. Если заменить тантал на керамику этот ноль уползет далеко за полосу обратной связи и все будет чики-пуки.
Новые возможности включаются только сменой прошивки. Новость есть на электрониксе.
https://electronix.ru/forum/index.php?showtopic=68430
Там заявляют что он поддерживает теперь вообще все включая Atxmega, но практически народ только мегу64 пробовал.
Я не использую АВРы более 16к, поэтому сам ничего толком сказать не могу.
Вот тут https://people.overclockers.ru/zauropod/record32 тебя ругают за эту статью.
Ну, откуда я знал, что эти две ноги можно соеденить? Про провод написано в официальном репорте от атмела, и он прекрасно работает. Собственно, не понимаю, зачем столько ругаться )