Отладчик программ микроконтроллера avr на андроид – Программы для микроконтроллеров

AVR. Учебный Курс. Отладка программ. Часть 1

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

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

В очередном цикле статей я постараюсь описать как можно более подробно методы, применяемые при отладке.
 

Метод 0. Тупление в код (Аналитический)
К моему великому удивлению, данный метод является наиболее популярным в народе и, а у начинающих порой единственным.
Видимо сказывается засилье всяких высокоуровневых языков вроде ПОХАПЭ или Си, где такое вполне может и проканать. Там да, можно пофтыкать несколько минут в исходник, глядишь да найдешь где накосячил.
 

И по наивности, не иначе, новички пытаются этот метод применить к своим ассемблерным программам.
 

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

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

Хотя я, в свое время, изучал ассемблер вообще без компа — не было его у меня. Тетрадка в клеточку, команды i8008 в столбик. А потом и Z80 с его божественным ассемблером. И опять без отладчиков, аналитически. Ляпота! Но вот когда я сел за ассемблер 80С51, в первую же очередь я нашел нормальную IDE с эмуляцией — Keil uVision. А эра х86 прошла под знаменем Borland Turbo Debugger и TASM. Когда моя первая 128 байтная интруха полыхнула по экрану пиксельным пламенем клеточного автомата… да ощущения были еще те. Где то ее сорцы валяются, надо поискать.

 

В написании может быть, но вот в отладке нифига подобного. Так как нечего тут думать. Ассемблер это как лопата — берешь и копаешь, а не думаешь как там поршни и трансмиссия в экскаваторе крутится.
 

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

Под каждый стиль написания кода свои инструменты отладки. Поэтому переходим к другому методу.
 

Метод 1. Лопата — бери и копай (Трассировка)
Не можешь понять как будет вести код? Как сработают условия? Как пойдет ветвление? Что будет в регистрах?
 

Что тут думать? Выполни в эмуляторе и все! Какая-нибудь AVR Studio идеально для этого сгодится.
 

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

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

Трассировка
Активно используй не только пошаговую трассировку (F11), но и такие удобные фичи как трассировка до курсора (Ctrl+F10), позволяющая сразу же выполнить весь код до курсора. Правда может застрять в каком нибудь цикле по пути. Но можно нажать на паузу и вытащить трассировщик из цикла вручную (выставив флаги так, чтобы произошел нужный нам переход).
 

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

1
2
3
;-----DEBUG
	JMP KUDA_NADO
;----------

;——DEBUG
JMP KUDA_NADO
;———-

 

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

Генерация прерываний
Если нужно отлаживать прерывание, то необязательно этого прерывания дожидаться. Помни, что вызов прерывания делается установкой флага в соответствующем регистре. Т.е. хочешь ты сэмулировать прием байта по UART — тыкай на бит RXC регистра UCSRA и вот у тебя на следующем же шаге произошло прерывание. Разумеется если оно разрешено локально и глобально.
 

Если хочешь запустить прерывание в случайный момент. То нет ничего проще — запусти программу на исполнение (F5) через пару секунд тупления в монитор нажми паузу (Ctrl+F5), тычком по нужному биту сгенерь прерывание, а дальше пошагово влезь в обработчик и позырь что там происходит. После чего проверь, что выход из прерывания произошел корректно и пусти прогу пастись дальше.
 

Ускоряй процессы
Многие процессы на трассировке идут весьма длительно. Например, в режиме скоростного прогона (F5) эмуляция секунды на моем компе (AThlonXP 1300+/512DDRPC3200) идет около минуты, если не больше. Разумеется ждать столько западло.
 

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

Остановка по требованию
Это в маршрутках остановок «Здеся» и «тута» не существует. В нашей же симуляции мы можем выгрузиться в пошаговый режим где угодно, хоть посреди МКАД в час пик. Достаточно применить волшебный щелчок по почкам.
 

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

Причем брейкпоинты можно ставить не только на участки кода, но и на события происходящие в регистрах. Это, так называемые, Data Breakpoint. Ставятся они из Debug-NewBreakPoint-DataBreakPoint
 

А там на выбор событий тьма:

Например, хочешь ты поймать событие когда кто то стукнулся в ОЗУ и нагадил, запоров значение. Кто такой поганец? Стек? Где то в коде опечатался и не заметил? Индексный регистр не туда залез?

Чем гадать и тупить в код лучше поставить бряк. Например, загадилась переменная CCNT объявленная в RAM:

1
2
3
4
5
; RAM ========================================================
	.DSEG
CCNT:	.byte	4
TCNT:	.byte	4
; FLASH ======================================================

; RAM ========================================================
.DSEG
CCNT: .byte 4
TCNT: .byte 4
; FLASH ======================================================

 

Выбираешь тип события, Location is Acessed (доступ к обьекту) в поле location выбираешь объект за которым будем следить В выпавшем списке будут ВСЕ твои символические имена используемые в программе. В том числе и наши CCNT и TCNT. Надо только внимательно поискать — они там не в алфавитном порядке, а черт знает в каком.
 

Дальше выбираешь тип доступа к переменной (Access Type) — чтение или запись, а может и то и другое. Также можно указать тип данной переменной или ее байтовый размер.
 

А еще можно в памяти разметить колышками Start Addr — End Addr (в графе Custom Scope) делянку, где наша конопля растет. И как только туда кто сунется — алярм, ловить и пинать по почкам.
 

А через контекстное меню, можно по быстрому, на любой регистр, ячейку ОЗУ/ПЗУ/EEPROM повесить Data breakpoint. При этом он сразу же появляется в окошке Breakpoints&TracePoints и там уже можно подправить ему конфигурацию как нужно.

 

Осталось только заполнить графу хитов Break Execution after… Т.е. после скольких событий останавливать трассировку. По умолчанию стоит 1. Но если, например, нам надо пропустить несколько сотен итераций цикла, а на сто первом посмотреть что происходит, то указываем число хитов в 100 и жмем запуск, не страдая фигней на промотке этих итераций.
 

Есть там еще одна интересная галочка — Continue executions after views have been updated. Она превращает бряк в информер. Думаю ты уже замечал, что когда студия гонит код в режиме выполнения (F5), то данные в окошках периферии и регистрах в реальном времени не меняются. Чтобы увидеть изменения надо поставить программу на паузу.
Так вот, брейкпоинт-информер нужен для принудительного обновления этих значений. Т.е. программа на нем не останавливается, а только лишь обвновляет данные в окошках. Что позволяет динамически наблюдать как данные ползают по памяти, как щелкают таймеры, как тикают регистры.
 

Своего рода автоматическое пошаговое выполнение (Alt+F5), но обновление не по каждой команде, а по условию. Да, превратить обычный путевой бряк в информер можно, но для этого надо открыть окно управления брейкпоинтами View-Toolbars-Breakpoint&TracePoint. И там уже, найдя наш путевой брейк, даблкликом по нему залезть в свойства.
 

Там же бряки можно оперативно включать-выключать, что очень удобно. Выключать и включать их также можно по F9.
 

Пускай на самотек
Если программа в железе ведет себя как то не так, то может у ней крышу сорвало? Когда пишешь на ассемблере (да и на Си тоже, но там поймать сложней) легко ошибиться со стеком или индексным переходом. А сразу не поймаешь. Далеко не факт, что срыв найдется при первом или втором пошаговом прогоне. В этом случае я просто жму запуск симуляции и ухожу нарезать колбаски и чаю налить. Прихожу — жму паузу. Если прога идет по своему циклу, значит все в порядке. Если же произошел срыв, то это будет сразу же видно — трассировщик сойдет с ума и выбросит тебя из исходного кода в дизассемблер, где будет видно, что происходит что то явно не из нашей оперы. Например, выполнение кода там где его нет — за пределами программы. Если такое случилось надо внимательно проверить возможные пути срыва. Наставив брейков на входы-выходы из прерываний, перед и после индексных переходов и так далее.
 

Еще тут может помочь режим автошага (Alt+F5) нажал его и студия сама начала шустро тикать тактами, сразу же показывая что происходит. Тебе же остается сидеть и тупить в этот телевизор, глядишь найдешь глюк. Пару раз я таким способом отлавливал ошибки атомарного доступа, вылезавшие только в полнолуние и исключительно по спец мантре.
 

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

Навести гляделку можно на что угодно — на регистр, на ячейку памяти, на порт. При этом мы можем выбирать тип отображения (DEC,HEX,ASCII), что бывает очень удобно.
 

А если мы отлаживаем Сишный код, то watch умеет показывать структуры и массивы не в виде кучи барахла в памяти (какими они на самом деле и являются), а красиво раскладывая все по полочкам.
 

Эмуляция периферии
Внутреннюю периферию отлаживать проще простого — все прерывания вот они, свисают в IO регистрах, дергай не хочу. Регистры там же. А вот внешняя…
 

Тут все плохо. Дело все в том, что Студия не имеет понятия о том, что есть за ее пределами. Поэтому либо отлаживать периферию ручным тыком по битам в портах (что ужасно муторно), либо юзать примочки вроде HAPSIM или StiGen от ARV. Да, пользуясь моментом, рекомендую прошуршать по сайту arv.radioliga.com — много интересных штуковин. Проблем они всех не решают, но лучше чем ничего.
 

Трассировка по Сишному коду
А тут все весело. Дело в том, что оптимизатор может так залихватски перелопатить код, что на исходный код он будет походить весьма и весьма отдаленно. Т.е. ты грузишь переменную в одном месте, а компилятор решил это сделать в самом начале программы. Работать то будет так как ты сказал, но вот отлаживать это… Некоторые участки кода вообще будут перепрыгиваться.

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

В общем, я понимаю почему трассировка среди тех кто пытается писать на Си не прижилась. В том виде в каком ее видишь в первый раз пользоваться ей не хочется совершенно. В самом деле, кому охота связываться с дебильным симулятором? Проще уж в код тупить, там хоть какая то логика есть.
Но не стоить хоронить трассировку по высоким языкам раньше времени. Если отбросить приколы с выполнением некоторых участков кода, то все еще вполне ничего. А если выключить на время оптимизацию (параметр -O0), то вообще самое то. Правда отлаживать совсем без оптимизации я бы не советовал.
 

Т.к. с оптимизатором там есть свои приколы и грабли. И при несоблюдении ряда правил (volatile, пустые циклы и прочие фишечки), код который прекрасно работает без оптимизации на -Os с треском разваливается на куски.
 

Но общую логику работы программы отследить можно. А учитывая умные гляделки, бряки, информеры… так вообще сказка!
 

Но это далеко не все методы отладки. А так, самая малость. Однако трассировкой можно выловить 90% проблем связанных с внутренней периферией и алгоритмом работы кода на уровне ядра.
 

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

easyelectronics.ru

Внутрисхемная отладка AVR через JTAG ICE

Одним из самых мощных отладочных инструментов в микроконтроллерной среде является JTAG — внутрисхемный отладчик.

Суть тут в чем — через JTAG адаптер микроконтроллер подключается напрямую к среде программирвания и отладки, например к AVR Studio. После чего микроконтроллер полностью подчиняется студии и дальше шагу не может ступить без ее разрешения. Доступна становится пошаговое выполнение кода, просмотр/изменение всех регистров, работа со всей периферией и все это в реальном микроконтроллере, а не в программной эмуляции. Можно ставить точки останова (breakpoints) на разные события — для ICE1 три штуки. В общем, сказка, а не инструмент.

К сожалению в AVR микроконтроллерах JTAG доступен далеко не везде, как правило контроллеры с числом ног меньше 40 и обьемом памяти меньше 16КБ такого удовольствия лишены (там, правда, часто бывает debugWire, но на коленке сделать его адаптер еще никому не удалось, а фирменный JTAG ICEII или AVRDragon стоят довольно больших денег). А поскольку у меня в ходу в основном Tiny2313, Mega8, Mega8535 и прочая мелочевка, то мне JTAG что собаке пятая нога — не поддерживается он в этих МК.

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

Схема несложная, требует ATMega16 и чуть чуть обвяза. В качестве интерфейса можно поставить MAX232 и воткнуть все это дело в COM порт, а можно сделать на FT232RL и тогда интерфейсом будет USB.

Только если будете делать на FT232 то рекомендую питание брать не от USB, а от целевого устройства. Дело в том, что если подключишь JTAG на FT232 с запиткой от USB к незапитанной целевой схеме (например по ошибке или недосмотру) то целевая схема запитается через защитные диоды паразитным питанием, т.к. на выводах FT232 будет высокий уровень. Что черевато тем, что может сдохнуть либо JTAG контроллер, либо контроллер целевой платы.

Поэтому пусть лучше JTAG адаптер питается от целевой платы, а не наоборот.

Я же не стал мудрить и сделал на MAX232 — с USB у меня напряг вечный, а COM порты свободны. Тем более это дешевле.

Однако я не обломался развести плату и под FT232RL суть та же.

В остальном же, как видите, разводка почти один в один, а USB часть взял и своего прошлого поста про FT232. Кстати, разводя вот такие вот маленькие кусочки схем вроде блока с FT232 я их сохраняю в макросы и потом, когда надо, собираю из них печатную плату как из конструктора. Очень удобно! Рекомендую!

Вытравили плату, запаяли компоненты. Получилась вот такая вот платка:

Теперь надо прошить контроллер. Вообще, по науке, сначала прошивается bootloader, потом из AVR Studio делается обновление прошивки JTAG ICE до последней версии. Но я нашел путь проще, на сайте pol-sem.narod.ru был обнаружен уже готовый HEX файл который просто надо залить в МК и все.

Поэтому цепляем к нашему адаптеру программатор, благо все штыри нужные (MISO, MOSI, GND, RST, SCK, Vcc) есть. А то что они не в нужном порядке стандартного AVR ISP разьема, так это не беда — я временно распотрошил колодку своего программатора и одел отдельные пины как надо. Однократная же процедура, чего мучаться разводить еще и ISP разъем.

Заливаем прошивку.
Выставляем Fuse биты.

Тут надо быть внимательными, так как существует несколько нотаций FUSE — прямая (по даташиту, где 0 = ON, 1=OFF) и инверсная (1 = ON, 0 = OFF). В прямой нотации работает UNIPROF, в инверсной нотации работает PonyProg и USBASP _AVRDUDE_PROG.
Определить в какой нотации работает твой программатор очень просто. Дjстаточно подключиться к своему МК и нажать кнопку чтения Fuse битов и посмотреть на бит SPIEN если галка стоит — нотация инверсная. Потому как по дефолту SPIEN включен всегда (без него невозможно прошить МК через ISP внутрисхемно).

Прошиваются Fuse следующим образом:

Бит Прямая нотация (UniProf, Даташит) Инверсная нотация (PonyProg, AVR DUDE GUI)
OCDEN [ ] [v]
JTAGEN [ ] [v]
SPIEN [ ] [v]
CKOPT [v] [ ]
EESAVE [v] [ ]
BOOTSZ1 [ ] [v]
BOOTSZ0 [ ] [v]
BOOTRST [v] [ ]
BODLEVEL [v] [ ]
BODEN [v] [ ]
SUT1 [ ] [v]
SUT0 [ ] [v]
CKSEL3 [v] [ ]
CKSEL2 [v] [ ]
CKSEL1 [v] [ ]
CKSEL0 [v] [ ]

Если прошивать голый бутлоадер, то надо включить бит BOOTRST и подключившись через студию сделать обновление прошивки JTAG, залив через AVRProg файл upgrade.ebn (лежит он где то в каталоге AVR Studio). А после прошивки выключить BOOTRST.

Все, девайс готов к работе. Теперь осталось его только испытать в деле.

Работа с JTAG AVR ICE
Особо заморачиваться я не буду, так что покажу на простом примере мигания светодиодов.
Запускаем студию, создаем новый проект.
Выбираем язык программирования, пусть это будет Assembler.
Задаем имя проекта.

А далее, в разделе Debug Platform выбираем не AVR Simulator как раньше, а JTAG ICE.

В правом окне выбираем отлаживаемый кристалл, (у меня это Mega16) и жмем финиш. Все, дальше как обычно, вбиваем текст программы. Я не стал мудрить и по быстрому настрогал следующее:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
	.include "m16def.inc"	; Используем ATMega16
 
 
	LDI	R16,0xFF		; Порт А на выход.
	OUT	DDRA,R16
 
Main:	SEI			; Разрешаем прерывания.
 
 
	SBI	PORTA,0		; Зажгли диод 0
	SBI	PORTA,1		; Зажгли диод 1
	SBI	PORTA,2		; Зажгли диод 2
	NOP			
	CBI	PORTA,0		; Погасили диод 0
	CBI	PORTA,1		; Погасили диод 1
	CBI	PORTA,2		; Погасили диод 2
	NOP
 
	RJMP	Main		; Зациклились

.include «m16def.inc» ; Используем ATMega16


LDI R16,0xFF ; Порт А на выход.
OUT DDRA,R16

Main: SEI ; Разрешаем прерывания.


SBI PORTA,0 ; Зажгли диод 0
SBI PORTA,1 ; Зажгли диод 1
SBI PORTA,2 ; Зажгли диод 2
NOP
CBI PORTA,0 ; Погасили диод 0
CBI PORTA,1 ; Погасили диод 1
CBI PORTA,2 ; Погасили диод 2
NOP

RJMP Main ; Зациклились

Вот так вот просто. Если ее скомпилить, прошить и запустить, то диоды будут моргать с бешеной частотой, так как никаких задержек не предусмотрено. А что же будет из под JTAG?

Беру свою новоиспеченную отладочную плату на Mega16, подключаю к порту А три светодиода.
Подключаю к плате JTAG адаптер — четыре провода интерфейса (TDO,TDI,TMS,TCK) и два силовых Vcc на плюс и GND на землю — JTAG адптер запитан от целевой платы и все готово к работе.

Жму в студии компиляцию и запуск (Ctrl+F7). Проект по быстрому компилится, тут же через JTAG заливается в МК (JTAG может заменить программатор) адаптер при этом весело перемигивается светодиодом. Программа встает на выполнение, бодро показывая стрелочкой начало программы.

Можно трассировать! Тыкаю по F11 — прога исполняется по одной команде, показывая стрелочкой где я нахожусь в данный момент. После каждого выполнения команды SBI — у меня на плате зажигается соответствующий светодиод. Круто, блин! Как в каком-нибудь Proteus только без глюков и все вживую! Пробежался дальше по тексту — после CBI диоды погасли, как и положено. Вот как это выглядит вживую:

Дальше решил поразвлекаться. Не меняя программу, не перекомпиливая, не выходя из режима отладки. Открываю в AVR Studio вкладку I/O View
Протыкиваю там галочки:

  • DDRD.7=1 — вывод PD7 на выход
  • Затем лезу в раздел Timer_Counter_2 и там прямыми тычками по битам выставляю:
  • COM2 = 11 — инверсный режим работы вывода OC2 в режиме FastPWM
  • WGM20 = 1, WGM21 = 1 — Режим таймера 2 устанавливаем в FastPWM
  • От балды натыкиваю число в OCR2 — от него зависит коэффициент заполнения
  • Выставляю биты CS2 = 001 — запуск таймера.

Снимаю прогу с паузы (F5 — Run). Тычу осциллографом в ногу PD7 (OC2)

ЫЫЫ!!! ШИМ!!! Ставлю прогу на паузу, меняю биты в OCR2 запускаю снова — коэффициент заполнения изменился. Хы. Ручное управление 🙂

Так что с JTAGом если хочешь получить по быстрому какую нибудь фиговину вроде генератора даже не надо прогу писать — взял и включил вручную что тебе нужно. Богат AVR периферией 🙂

Прошивка микроконтроллера через JTAG
JTAG ICE можно также использовать для прошивки микроконтроллера и установки FUSE битов. Для этого надо запустить AVR PROG (Tools — Program AVR — Connect…) и выбрать там JTAG ICE ну и COM порт, хотя обычно канает Auto.

Жмем Connect и мы в эфире, главное не забыть выйти из режима откладки в студии. AVRPROG сам определяет тип контроллера, можно выбрать файл с флешем и/или епромом и прошить их. Отдельного разговора заслуживает вкладка Fuses.
В отличии от большинства программаторов, тут уже не придется париться по поводу битов SUT:CKSEL — все выбирается из понятного списка, написанного человеческим языком:

Наигрался, зафотографировал для статьи, упаковал в красивый корпус. Даже не поленился и обложечку сфигачил. Очень уж мне игрушка понравилась.

Файлы к статье:

Вот так и развращаютя эмбеддеры. Сначала к JTAG пристрастятся, потом ради одного лишь JTAG прееходят на более мощный кристалл там, где хватит и Tiny, а дальше Си, Си++, потом .NET какой нибудь на виртуальной машине… И вот уже операционная система весом в несколько гигабайт и требующая гигазы ОЗУ ни у кого не вызывает шока и ужаса. А ведь это страшно, господа! Прогресс, мать его. Не развращайтесь благами цивилизации, будте аскетичны и разумны. И не забывайте об оптимизации как программной, так и аппаратной.

easyelectronics.ru

Программы | MEGA-AVR

Популярная мощная и удобная среда разработки и отладки программ для микроконтроллеров и процессоров архитектуры ARM:
Cortex-M0, M3, M4, M7, A9

Continue reading →

Proteus — это пакет программ для автоматизированного проектирования электронных схем, версии 8.7 NEW!!! Continue reading →

В статье приводится  USB программатор микроконтроллеров AVR и AT89S, совместимый с AVR910 — с журнала Радио №7, 2008г. Continue reading →

Новая версия(но не самая последняя) на момент публикации. Программа как всегда с ключами и лицензией).

Continue reading →

Стабильная версия Proteus Professional 8.4 SP0 без глюков и вылетов (проверено на windows 7). Continue reading →

Программа схемотехнического моделирования Micro-Cap имеет удобный, дружественный интерфейс и предъявляет достаточно скромные требования к программно-аппаратным средствам персонального компьютера. Continue reading →

Новая версия компилятора кода для AVR на си. Continue reading →

Новая версия программы SinaProg 2.1.1 с русифицированным калькулятором фьюзов.
Continue reading →

Как то при разработке очередного устройства в котором данные от одного устройства к другому передавались по UART, нужно было проверить работоспособность схемы и программы. Continue reading →

LabVIEW 8.6 демонстрируют увеличение скорости работы, более эффективную загрузку процессора и повышенную надежность систем реального времени на выделенных ядрах. Continue reading →

Circuit Design Suite — одна из наиболее популярных в мире программ конструирования электронных схем, характеризуется сочетанием профессиональных возможностей и простоты, расширяемостью функций от простой настольной системы до сетевой корпоративной системы. Continue reading →

Компилятор CodeVisionAVR 2.04. Continue reading →

Новое в 8 версии: Application Framework
Теперь Proteus 8 состоит из одного приложения с большим количеством модулей (ISIS, BOM, ARES, 3D Viewer и т.д.). Continue reading →

mega-avr.com.ua

1.1.5 Внутренний отладчик микроконтроллеров avr

Еще
один аппаратный способ отладки заложен
конструктивно в некоторые
модели микроконтроллеров AVR.
В частности, микроконтроллер
ATiny2313
поддерживает такой способ отладки.

Для
обеспечения возможности аппаратной
отладки такие микроконтроллеры
имеют, во-первых, специальную
однопроводную линию
debugWIRE,
которая
обычно совмещена с входом RESET.
Эта
линия используется специальной платой
— отладчиком для управления
микроконтроллером в процессе отладки.
Кроме того, в
систему команд такого микроконтроллера
включена команда break,
которая может использоваться для
создания программных
точек
останова.

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

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

Затем
он автоматически «прошивает» полученный
таким образом текст
программы в программную память
отлаживаемого микроконтроллера
и запускает ее в работу. Микроконтроллер
выполняет заложенную
в него программу до тех пор, пока не
встретится команда break.
Получив эту команду, микроконтроллер
приостанавливает выполнение
программы и передает управление
отладчику.

Далее
отладчик управляет микроконтроллером
при помощи интерфейса
debugWIRE.
Этот
интерфейс позволяет считать содержимое
всех регистров микроконтроллера и
других видов памяти. Прочитанная
информация отображается на экране
компьютера. Затем
отладчик ждет команд от оператора. Под
управлением отладчика
микроконтроллер может принудительно
выполнить любую команду
из своей системы команд.

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

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

Недостаток
– частое «перешивание» программной
памяти микро-контроллера.
Изменять содержимое этой памяти
приходится каждый раз
при установке новых или снятии старых
точек останова. Если учесть,
что допустимое количество перезаписи
программной памяти составляет
10000 циклов, то при длительном процессе
отладки это количество может исчерпаться,
и микросхема выйдет из строя.

1.1.6 Программная среда «avr Studio»

Фирма
Atmel,
разработчик
микроконтроллеров AVR,
очень хорошо позаботилась
о сопровождении своей продукции. Для
написания программ,
их отладки, трансляции и прошивки в
память микроконтроллера фирма
разработала и бесплатно распространяет
специализированную
среду
разработчика под названием «
AVR
Studio».
Инсталляционный пакет этой инструментальной
программы можно свободно скачать с
сайта
фирмы. Адрес страницы для скачивания
программ:

http://www.atmel.ru/Software/Software.htm.

Программная
среда «AVR
Studio»
– это мощный современный программный
продукт, позволяющий производить все
этапы разработки
программ для любых микроконтроллеров
серии AVR.
Пакет
включает в себя специализированный
текстовый редактор для
написания программ, мощный программный
отладчик.

Кроме
того, «AVR
Studio»
позволяет управлять целым рядом
подключаемых
к компьютеру внешних устройств,
позволяющих выполнять
аппаратную отладку, а также программирование
(«прошивку») микросхем AVR.

Познакомимся
подробнее с этим удобным программным
инструментом
для программистов. Программная среда
«AVR
Studio»
работает
не просто с программами, а с проектами.
Для каждого проекта
должен быть отведен свой отдельный
каталог на жестком диске. В AVR
Studio
одновременно может быть загружен только
один проект.

При
загрузке нового проекта предыдущий
проект автоматически выгружается.
Проект содержит всю информацию о
разрабатываемой программе и применяемом
микроконтроллере. Он состоит из целого
набора файлов.

Главный
из них — файл
проекта.

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

Кроме
файла aps,
проект должен содержать хотя бы один
файл
с текстом программы.

Такой файл имеет расширение asm.
Недостаточно
просто поместить файл asm
в директорию проекта. Его нужно еще
включить в проект. Как это делается, мы
увидим чуть позже. Проект может содержать
несколько файлов asm.
При этом
один из них является главным. Остальные
могут вызываться из
главного при помощи оператора .include.
На этом заканчивается
список файлов проекта, которые создаются
при участии программиста.

Но
типичный проект имеет гораздо больше
файлов. Остальные файлы
проекта появляются в процессе трансляции.
Если ваша программа
не содержит критических ошибок и процесс
трансляции прошел
успешно, то в директории проекта
автоматически появляются следующие
файлы: файл, содержащий результирующий
код трансляции в hex
формате, файл mар,
содержащий все символьные имена
транслируемой программы со своими
значениями, листинг-трансляции
(lst)
и другие вспомогательные файлы. Однако
для нас
будет важен лишь hex-файл
(файл с расширением hex).
Именно он
будет служить источником данных при
прошивке программы в программную
память микроконтроллера.

studfiles.net

Миниатюрный USB программатор для AVR микроконтроллеров / Habr

Как театр начинается с вешалки, так программирование микроконтроллеров начинается с выбора хорошего программатора. Так как начинаю осваивать микроконтроллеры фирмы ATMEL, то досконально пришлось ознакомится с тем что предлагают производители. Предлагают они много всего интересного и вкусного, только совсем по заоблачным ценам. К примеру, платка с одним двадцатиногим микроконтроллером с парой резисторов и диодов в качестве обвязки, стоит как «самолет». Поэтому остро встал вопрос о самостоятельной сборке программатора. После долгого изучения наработок радиолюбителей со стажем, было решено собрать хорошо зарекомендовавший себя программатор USBASP, мозгом которого служит микроконтроллер Atmega8 (так же есть варианты прошивки под atmega88 и atmega48). Минимальная обвязка микроконтроллера позволяет собрать достаточно миниатюрный программатор, который всегда можно взять с собой, как флэшку.

Автором данного программатора является немец Thomas Fichl, страничка его разработки со схемами, файлами печатных плат и драйверами.
Раз решено было собрать миниатюрный программатор, то перерисовал схему под микроконтроллер Atmega8 в корпусе TQFP32 (распиновка микроконтроллера отличается от распиновки в корпусе DIP):

Перемычка J1 применяется, в случае если необходимо прошить микроконтроллер с тактовой частотой ниже 1,5МГц. Кстати, эту перемычку вообще можно исключить, посадив 25 ногу МК на землю. Тогда программатор будет всегда работать на пониженной частоте. Лично для себя отметил, что программирование на пониженной скорости на доли секунды дольше, и поэтому теперь перемычку не дёргаю, а постоянно шью с ней.

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

Светодиод blue показывает наличие готовности к программированию схемы, red загорается во время программирования. Контакты для программирования выведены на разъем IDC-06, распиновка соответствует стандарту ATMEL для 6-ти пинового ISP разъема:

На этот разъем выведены контакты для питания программируемых устройств, здесь оно берется напрямую с USB порта компьютера, поэтому нужно быть внимательным и не допускать кз. Этот же разъем применяется и для программирования управляющего микроконтроллера, для этого достаточно соединить выводы Reset на разъеме и на мк (см. красный пунктир на схеме). В авторской схеме это делается джампером, но я не стал загромождать плату и убрал его. Для единичной прошивки хватит и простой проволочной перемычки. Плата получилась двухсторонняя, размерами 45х18 мм.

Разъем для программирования и перемычка для снижения скорости работы программатора вынесены на торец устройства, это очень удобно

Прошивка управляющего микроконтроллера

Итак, после сборки устройства осталось самое важное — прошить управляющий микроконтроллер. Для этих целей хорошо подходят друзья у которых остались компьютеры с LPT портом 🙂 Простейший программатор на пяти проводках для AVR
Микроконтроллер можно прошивать с разъема программирования, соединив выводы Reset микроконтроллера (29 нога) и разъема. Прошивка существует для моделей Atmega48, Atmega8 и Atmega88. Желательно использовать один из двух последних камней, так как поддержка версии под Atmega48 прекращена и последняя версия прошивки датируется 2009 годом. А версии под 8-й и 88-й камни постоянно обновляются, и автор вроде как планирует добавить в функционал внутрисхемный отладчик. Прошивку берем на странице немца. Для заливки управляющей программы в микроконтроллер я использовал программу PonyProg. При программировании необходимо завести кристалл на работу от внешнего источника тактирования на 12 МГц. Скрин программы с настройками fuse перемычек в PonyProg:

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

Установка драйвера

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

Выбираем папку где лежат дрова и жмем Далее

Мигом появится окно с предупреждением о том, что устанавливаемый драйвер не имеет цифровой подписи у мелкомягких:

Забиваем на предупреждение и продолжаем установку, после небольшой паузы появится окно, сообщающее об успешном окончании операции установки драйвера

Все, теперь программатор готов к работе.

Khazama AVR Programmer

Для работы c программатором я выбрал прошивальщик Khazama AVR Programmer. Замечательная программка, с минималистичным интерфейсом.

Она работает со всеми ходовыми микроконтроллерами AVR, позволяет прошивать flash и eeprom, смотреть содержимое памяти, стирать чип, а также менять конфигурацию фьюз-битов. В общем, вполне стандартный набор. Настройка фьюзов осуществляется выбором источника тактирования из выпадающего списка, таким образом, вероятность залочить кристалл по ошибке резко снижается. Фьюзы можно менять и расстановкой галок в нижнем поле, при этом нельзя расставить галки на несуществующую конфигурацию, и это тоже большой плюс в плане безопасности.

Запись фьюзов в память мк, как можно догадаться, осуществляется при нажатии кнопки Write All. Кнопка Save сохраняет текущую конфигурацию, а Load возвращает сохраненную. Правда я так и не смог придумать практического применения этих кнопок. Кнопка Default предназначена для записи стандартной конфигурации фьюзов, такой, с какой микроконтроллеры идут с завода (обычно это 1МГц от внутреннего RC).

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

Скачать файл печатной платы в SprintLayout можно по этой ссылке

Ну вроде все, если возникнут вопросы, постараюсь ответить.

habr.com

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги
Современное радиолюбительство невозможно представить без микроконтроллеров, и это очевидно. В последние десятилетия микроконтроллеры различных производителей стали широко распространены в разных сферах деятельности человека. Нередко их можно встретить в самых неожиданных устройствах и конструкциях. Мы с вами являемся свидетелями компьютеризации и автоматизации окружающих нас процессов. Истина такова, что без знания основ программирования создавать современные конкурентоспособные устройства стало практически невозможно…

Содержание / Contents

Если вы читаете эту статью, вероятно у вас возникло желание понять, как работают микроконтроллеры, и скорее всего появились вопросы:
1. Какой микроконтроллер выбрать для работы?
2. Какую среду разработки использовать для программирования выбранного микроконтроллера?
3. Как прошивать контроллер, и какие дополнительные приборы и акссесуары нужны для удобной работы с ними?
4. Какую литературу изучать?
5. Где в интернете можно задавать вопросы и получать конкретные ответы?

Попробуем ответить на эти вопросы.

Большой популярностью у радиолюбителей пользуются 8-битные микроконтроллеры PIC фирмы Microchip Technology и AVR фирмы Atmel, 16-битные MSP430 фирмы TI, а также 32-битные микроконтроллеры, архитектуры ARM.

В промышленности, несколько иначе, первое место с большим отрывом занимает Renesas Electronics на втором Freescale, на третьем Samsung, затем идут Microchip и TI, далее все остальные.
Популярность определяется ценой и доступностью, немалую роль играют наличие технической информации и стоимость программного сопровождения.

Мы будем изучать 8-битные микроконтроллеры AVR, семейства ATMEGA 8 и 16 серии. Выбор определился, опять же доступностью, наличием множества любительских разработок, огромным количеством учебного материала. Наличием разнообразных встроенных компонентов и функциональностью этого семейства.

Для AVR созданы разные интегрированные среды разработки (IDE, Integrated development environment).
IDE – это система программных средств, используемая программистами для разработки программного обеспечения (ПО), в состав которой входят:
• текстовый редактор,
• компилятор и/или интерпретатор,
• средства автоматизации сборки,
• отладчик.

Наиболее распространенные из них AVRStudio, ATmelStudio, WINAVR, CodeVision, IAR Embedded Workbench.
Для того, чтобы писать программы, мы воспользуемся бесплатной IDE ATmelStudio версии 6 и выше.
Скачать Atmel Studio можно с официального сайта после регистрации (регистрация абсолютно бесплатная и ни к чему не обязывает!)

ATmelStudio позволяет создавать проекты, и писать программы как в ассемблере, так и на СИ.

Изначально всегда стоит вопрос: какой язык программирования выбрать, чтобы писать эффективные программы?

Отвечу просто: нужно уметь писать как минимум на двух языках ассемблере и СИ. Ассемблер просто необходим, когда нужно написать быстрые и компактные подпрограммы и макросы, различные драйверы устройств. Но, когда требуется создать объемный проект, построенный на сложных алгоритмах, без знания СИ может быть потрачено очень много времени, особенно в процессе отладки, а если возникнет желание перенести на другую платформу, например PIC18, или STM, может стать неразрешимой проблемой.
Кроме этого, сейчас появились аппаратные вычислительные платформы Arduino, работа с которыми требует знаний языка СИ++.
Поэтому будем писать программы как в ассемблере, так и на СИ.

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

Используем датагорский кит — программатор Project-005 «D-AVR910». Кроме этого, нужно будет приобрести макетные платы, блок питания с выходным напряжением 5 Вольт. Можно в качестве БП с малыми пульсациями использовать наш кит Project-006 «POWER FILTER», применив стабилитрон на 5 Вольт.
Возможно, со временем мы с Игорем предложим проект для сборки отладочной платы.

Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги

А вот, например:
• Практическое программирование AVR на ассемблере. Ревич, 2011
• 1000 и одна микроконтроллерная схема Вып. 1-2. Рюмик, 2010-2011
• 10 практических устройств на МК AVR Книга 1-2. Кравченко, 2008-2009
• Самоучитель разработчика устройств на МК AVR. Белов, 2008
• МК AVR семейств Tiny и Atmega. Ефстифеев, 2008
• CodeVisionAVR. Пособие для начинающих. Лебедев, 2008
• Микропроцессорное управление устройствами, тиристоры, реле. Белов, 2008
• Аналоговые интерфейсы МК. Стюард, Болл, 2007
• Создаем устройства на МК AVR. Белов, 2007
• МК AVR в радиолюбительской практике. Полный разбор ATTINY2313. Белов, 2007
• Сетевой и межсетевой обмен данными с МК. Иди, 2007
• МК AVR. практикум для начинающих. Хартов, 2007
• Применение AVR Схемы, алгоритмы, программы. Баранов, 2006
• Микроконтроллеры AVR. Вводный курс. Мортон, 2006
• Измерение, управление и регулирование с помощью AVR. Трамперт, 2006
• Программирование на языке С для AVR и PIC МК. Шпак, 2006
• Конструирование устройств на МК. Белов, 2005
• МK — это же просто, тома 1-3. Фрунзе, 2002-2003
• Язык программирования Си, 2-е издание. Керниган, Ритчи, 2009
• Программирование микроконтроллеров ATMEL на языке С. Прокопенко, 2012Задавать вопросы вы можете на нашем или любом другом форуме, где так или иначе затронуты темы по микроконтроллерам. Главное на форумах правильно формулировать вопросы, чтобы четко получать ответы. Абстрактные вопросы не приветствуются, и скорее всего вместо ответа вы получите жесткую критику, или ваш вопрос останется без внимания! • 8-разрядный высокопроизводительный AVR микроконтроллер с малым потреблением
• Прогрессивная RISC архитектура
130 высокопроизводительных команд, большинство команд выполняется за один тактовый цикл
32 8-разрядных рабочих регистра общего назначения
Полностью статическая работа
Приближающаяся к 16 MIPS (при тактовой частоте 16 МГц) производительность
Встроенный 2-цикловый перемножитель

• Энергонезависимая память программ и данных
8 Кбайт внутрисистемно программируемой Flash памяти (In-System Self-Programmable Flash)
Обеспечивает 1000 циклов стирания/записи
Дополнительный сектор загрузочных кодов с независимыми битами блокировки
Обеспечен режим одновременного чтения/записи (Read-While-Write)
512 байт EEPROM
Обеспечивает 100000 циклов стирания/записи
1 Кбайт встроенной SRAM
Программируемая блокировка, обеспечивающая защиту программных средств пользователя

• Встроенная периферия
Два 8-разрядных таймера/счетчика с отдельным предварительным делителем, один с режимом сравнения
Один 16-разрядный таймер/счетчик с отдельным предварительным делителем и режимами захвата и сравнения
Счетчик реального времени с отдельным генератором
Три канала PWM
8-канальный аналого-цифровой преобразователь (в корпусах TQFP и MLF)
6 каналов с 10-разрядной точностью
2 канала с 8-разрядной точностью
6-канальный аналого-цифровой преобразователь (в корпусе PDIP)
4 канала с 10-разрядной точностью
2 канала с 8-разрядной точностью
Байт-ориентированный 2-проводный последовательный интерфейс
Программируемый последовательный USART
Последовательный интерфейс SPI (ведущий/ведомый)
Программируемый сторожевой таймер с отдельным встроенным генератором
Встроенный аналоговый компаратор

• Специальные микроконтроллерные функции
Сброс по подаче питания и программируемый детектор кратковременного снижения напряжения питания
Встроенный калиброванный RC-генератор
Внутренние и внешние источники прерываний
Пять режимов пониженного потребления: Idle, Power-save, Power-down, Standby и снижения шумов ADC

• Выводы I/O и корпуса
23 программируемые линии ввода/вывода
28-выводной корпус PDIP, 32-выводной корпус TQFP и 32-выводной корпус MLF

• Рабочие напряжения
2,7 — 5,5 В (ATmega8L)
4,5 — 5,5 В (ATmega8)

• Рабочая частота
0 — 8 МГц (ATmega8L)
0 — 16 МГц (ATmega8)

отличия ATMEGA16 от 8
• 16 Кбайт внутрисистемно программируемой Flash памяти (In-System Self-Programmable Flash)

• Интерфейс JTAG (совместимый с IEEE 1149.1)
Возможность сканирования периферии, соответствующая стандарту JTAG
Расширенная поддержка встроенной отладки
Программирование через JTAG интерфейс: Flash, EEPROM памяти, перемычек и битов блокировки

• Четыре канала PWM / ШИМ

• 8-канальный 10-разрядный аналого-цифровой преобразователь
8 несимметричных каналов
7 дифференциальных каналов (только в корпусе TQFP)
2 дифференциальных канала с программируемым усилением в 1, 10 или 200 крат (только в корпусе TQFP)

• Шесть режимов пониженного потребления: Idle, Power-save, Power-down, Standby, Extended Standby и снижения шумов ADC

• 32 программируемые линии ввода/вывода

• 40-выводной корпус PDIP и 44-выводной корпус TQFP

Если Вы только начинаете, то нужно скачать и установить программу AtmelStudio с официальной страницы atmel.com
После установки программы AtmelStudio можно приступить к созданию проекта.
Проект – это ваша программа, которую вы будете писать, отлаживать и прошивать, после компиляции, в память микроконтроллера.

Чтобы создать проект, надо открыть программу, появиться такая заставка,

и откроется страница создания проекта

Чтобы создать новый проект, нужно кликнуть по «New Project…»
В этом случае откроется новое окно, где можно выбрать язык программирования, название проекта, его месторасположение, название пакета с файлами проекта и возможность создания каталога для дальнейшего использования в других перекрестных проектах. Чтобы создать проект, где мы будем программировать в ассемблере, нужно выбрать — Assembler, после этого поменяем название проекта, его расположение, и выбираем ОК.

Появится следующее окно

Выбираем “megaAVR, 8-bit” и находим нужный нам микроконтроллер, мы выбрали ATmega8. В правой части заставки появляется список устройств, работающих с этим микроконтроллером, один из которых мы можем подключить. Выбираем ОК.

Появляется страница редактора текста, которая позволяет редактировать и отлаживать программу. Пока страница чистая, указано время и дата создания и название файла проекта, имя пользователя. Есть дополнительные окно устройств ввода-вывода, окно отчетов компиляции программы. Теперь мы


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

Выбираем семейство микроконтроллеров “megaAVR, 8-bit”

Далее, наименование микроконтроллера и выбираем ОК.

Появляется страница редактора текста. Здесь мы можем программировать в СИ.

У нас есть возможность загрузить демонстрационные проекты для работы с платами разработки, выпускаемыми корпорацией ATMEL.
Для этого нужно при создании проекта выбрать пункт “New Examle Project from ASF…”

Откроется окно следующего вида:

Здесь вы можете выбрать нужный проект, и экспериментировать как вам хочется…
Третий пункт на страничке создания проектов позволяет быстро открывать последний загруженный проект.

Так же есть возможность управлять проектом, для этого нужно выбрать название проекта под пунктом “Recent Projects” и кликнуть по правой клавише мыши. Появится меню из 3-х пунктов:

Open Project – запускает проект.
Open Containing Folder – просмотор содержимого папки проекта
Remove From List – удаление из списка проектов. Сам проект не удаляется, и попытка создать новый проект с таким же именем выдаст ошибку. Полностью удалить проект можно в папке, где он был создан.

Как создается новый проект и про перенос старых проектов, созданных в AVR Studio 4, можно посмотреть на видеоролике от Александра Писанца

Радик (galrad)

РФ. Республика Башкортостан. г.Уфа

1964г.р. Специальность — врач. Ученая степень — кандидат медицинских наук. Радиоэлектроника — увлечение с 15 лет. Приоритетные направления — микроконтроллеры, цифровая электроника, измерения, ремонт компьютеров и сотовых телефонов, и т.п. Второе высшее образование — инженер-электроник.

 

datagor.ru

Программатор-отладчик для AVR микроконтроллеров STK-ICE

РадиоКот >Схемы >Цифровые устройства >Примочки к ПК >

Программатор-отладчик для AVR микроконтроллеров STK-ICE

Как-то раз, в один не очень прекрасный день, мне понадобилось отловить проблему в реальном времени на работающем устройстве. У меня не было отладчика, только программатор STK-200. Но я знал о существовании клонов отладчика AVR JTAG-ICE. За два дня быстро повторил один из вариантов. Проблему отловил, а отладчик лёг в стол на долгое хранение. Распаять его рука не поднялась.

Имеющийся у меня программатор STK-200 прост и дёшев но использует устаревший и не очень удобный в работе LPT порт. Поэтому я решил изготовить новый программатор под интерфейс USB. Встал вопрос – изготавливать программатор непосредственно с USB интерфейсом или с использованием преобразователя USB-RS232? Я выбрал второй вариант, так как решился изготовить его на базе имеющегося JTAG-ICE. И вдруг меня посетила мысль – а нельзя ли просто дополнить JTAG-ICE дополнительной поддержкой программатора?

Для возможности такого варианта в прошивке JTAG-ICE должно оставаться достаточно свободного места, которое может включать имеющийся загрузчик, который будет уже не нужен. Поиск готового решения на просторах Интернет дал положительный результат. Буквально за несколько месяцев до меня такая же идея пришла в голову ещё одному человеку — ali_asadzadeh — и он её реализовал – поместил в JTAG-ICE свою реализацию программатора STK-500 — https://www.sonsivri.to/forum/index.php?topic=19994.0 . Эта страничка с моим переводом находится в архиве с исходниками прошивки. Главное достоинство этой реализации – использование аппаратной шины SPI и аппаратного формирования тактового сигнала для программируемого МК.

Скачав исходники и повторив данное решение, я обнаружил наличие некоторых проблем, в частности ошибки при работе с EEPROM на АТMega-128. Кроме того, не были реализованы некоторые функции программатора STK-500. Но метод, КАК это сделать, был рабочим.

Для проверки правильности работы программатора STK-500 я изменил исходники известного клона STK-500 от Petka под имеющуюся у меня схему JTAG-ICE. Всё заработало отлично, но данный вариант программатора тоже имел свои недостатки, главные из которых — программное формирование шины SPI и размер кода, который не помещался в свободное пространство JTAG-ICE. И здесь так же не были реализованы некоторые функции программатора.

Так как в исходниках ali_asadzadeh была явная ошибка, то я взял исходники от Petka и очень сильно их перелопатил, используя положительные наработки из обоих вариантов с добавлением недостающего функционала. С целью уменьшения размера кода напряжение целевого микроконтроллера не измеряется, а просто  выдаётся константа, соответствующая напряжению 3,3В.

После того, как всё заработало, нарисовал новую схему и изготовил окончательный вариант устройства.


Схема содержит три независимые части:

1) Преобразователь интерфейса U1 – у меня выполнен на преобразователе USB-UART FT323RL. Может быть любым, главное получить сигналы RxD и TxD с правильными уровнями.
2) Гальваническая развязка U2 – у меня выполнена на ADuM1201. Выполняет две функции – собственно гальванической развязки и преобразователя уровней, когда целевой микроконтроллер питается напряжением, отличным от 5В. Гальваническая развязка отключается, если замкнуть хотя бы один джампер JPGND. Если данная функция не нужна, то можно U2 не ставить. Если нужно, то целевой микроконтроллер можно запитать и от программатора, для чего необходимо замкнуть джамперы JPVCC и JPGND.
3) Собственно программатор-отладчик U3. Для выбора режима работы служит джампер JP1. В замкнутом состоянии включается режим программатора STK-500, а в разомкнутом – отладчика JTAG-ICE. Джампер устанавливается в нужное положение до подачи питания на U3. Для подключения целевого микроконтроллера служат два разъёма для соответствующих интерфейсов  — JTAG и ISP. На моей плате разъём для JTAG установлен сверху, а для ISP – на торце.

Изначально я не ставил USB разъём, а подпаял тонкий USB шнур прямо на плату. Затем случайно увидел и сразу же купил печатную плату для преобразователя USB-UART под FT323RL и немного переделал конструкцию, получив более универсальный вариант с отсоединяемым преобразователем USB-UART, который можно использовать и для других задач.

Для того, чтобы запрограммировать микроконтроллер U3, понадобится внешний программатор, который подключается к разъёму Х2. При  этом нужно замкнуть джампер JP_SPRG и подать питание на U3, замкнув джамперы JPVCC и JPGND и подключив USB разъём к ПК. Выбрать файл прошивки stk-ice.hex и записать его. После записи прошивки нужно отключить внешний программатор, снять джампер JP_SPRG и передёрнуть USB разъём. Если используется преобразователь USB-UART и установлен его драйвер, то можно проверять работу STK-ICE в нужном режиме.

В режиме программатора STK-500 имеется возможность устанавливать тактовую частоту ISP до 1,845МГц и частоту внешнего генератора до 3,686МГц.

После проделанной работы имеем два стандартных устройства в одном, которые официально поддерживаются ПО как от самой Atmel, так и от сторонних разработчиков.

Для обсуждения программатора лучше использовать имеющуюся тему, например https://radiokot.ru/forum/viewtopic.php?f=20&t=73283

В архивах исходники прошивки и схема с платой в Альтиуме и под ЛУТ.


Файлы:
Архив RAR
Архив RAR



Все вопросы в
Форум.


Как вам эта статья?

Заработало ли это устройство у вас?

www.radiokot.ru

Оставить комментарий

avatar
  Подписаться  
Уведомление о