Proteus VSM. Пошаговая отладка

Photobucket

Введение

Proteus VSM это пакет сквозного проектирования электрических схем, в котором можно построить принципиальную — электрическую схему, просимулировать ее работу (ProSpice), если она содержит микроконтроллер — тут-же написать программу для него, отладить программу (козырь Протеуса), после всех этапов отладки схемы/программы (при помощи модуля ISIS), можно переходить (не отходя от кассы) к созданию печатной платы, при помощи модуля ARES.

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

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

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

Здесь я бы хотел подчеркнуть что, реализуя отладку (электрическую/программную) при помощи виртуальных устройств (буть то Протеус, Матлаб и пр.) желательно разделить схему/программу на самостоятельные части, и стремится получать при этом минимально необходимое количество информации — почему:

во первых — большие объемы информации еще надо обработать
во вторых — большой проект потребляет много ресурсов ПК
в третьих — не забывайте что это всего-лишь симуляция

Другими словами сконцентрировать внимание на определенной неопределенности неполадке.
Но обо всем по порядку.

В Интернете можно найти кучу туториалов по Протеусу: как установить, создать проект, печатную плату и т.д. На EasyElectronics уже есть статья DI HALT'а по данной программе.

В чем же отличие этой статьи?

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



Breakpoint generators

Photobucket

В Протеусе есть набор виртуальных инструментов (так сказать домашняя лаборатория) которые не заменят реальные, но, позволят понять сам процесс, и причины происходящего. В этот перечень входят всякие вольтметры, амперметры, осцилограф, виртуальный RS232 терминал и прочие полезные приборы, при помощи которых можно следить за исполнением задуманного в режиме реального времени. Также имеются разные источники напряжения (что в реальности не всегда так), графы (Graphs: ANALOGUE, DIGITAL, FREQUENCY, FOURIER, ..), токовый щуп и щуп напряжения, и разные записывающие устройства (для off-line обработки, но с ними я не имел дела).

Photobucket

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

Real time digital breakpoint generator (RTDBREAK)
Real time analog current breakpoint generator (RTIBREAK)
Real time voltage breakpoint generator (RTVBREAK)

Photobucket


RTDBREAK — в Протеусе имеються несколько видов сего инструмента, которые между собой отличаються лишь количеством пинов (1, 2, 3, 4, 8 и 16 пин). Принцип их действия заключается в генерации прерывания (breakpoint) при появлении на данной линии или группе линий, определенного логического состояния, которое можно задать в его свойствах.

Photobucket

Photobucket

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

Photobucket

RTVBREAK — генерирует прерывание при превышении напряжением определенного уровня (задается).
Также полезен при отладке устройств с малым потреблением, разных аналоговых схемах и т.д.

Photobucket

Photobucket
Как показано на рис. справа, PD7 подлючен к базе транзистора напрямую (RTI не в счет), без токоограничивающего резистора. Если учесть что из одного пина максимум разрешается выкачать 40мА, то в этом случае (RTI сработал при 41.7мА) — пину, а может и порту кирдык.

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

Photobucket
При появлении прерывания — симуляция останавливаеться, и в окне Simulation Log можно посмотреть кто нас побеспокоел. В этот момент времени, путем простого клика мышкой по устройству (транзистор, диод, операционный усилитель, микроконтроллер… да на все что угодно), или правый клик по устройству и выбрать Operating Point Info, можно проверить все интересующие параметры: токи, напряжения, потребляемая мощность, уровни входных/выходных сигналов, поковырятся в регистрах и прочем фарше микроконтроллеров, при помощи разных окон из категории Debug.

Photobucket
Photobucket

На случай если вдруг у вас в библиотеке не окажуться эти инструменты, можно воспользоваться щупом напряжения. В свойствах щупа можно указать уровень напряжения при котором щуп сгенерит прерывание, логический уровень срабатывания (всего два 1 и 0) а также время после истечения которого он сообщит о прерывании (breakpoint). Токовый щуп, к сожалению, не обладает сией опцией. Если хотим моментально узнать о прерывании, задержку устанавливаем равной нулю.

Photobucket

Можно посмотреть маленький видео-урок с оффсайта (раздел Hardware Breakpoints)



Диагностика
Photobucket

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

Существует ряд методов позволяющих, без применения Протеуса довольно неплохо отладить МК код.

IDE производителя
Имхо, преимущество Протеуса, к примеру перед AVRStudio, является тот факт что имея аналогичные инструменты (кроме поддержки JTAG), он позволяет визуально (при помощи тех-же СИД-ов), в режиме реального времени (не всегда конечно), отладить всю конструкцию целиком (схема может содержать несколько микроконтроллеров разных производителей, главное чтобы ресурсов ПК хватило).

ПК компилятор
Большинство кода (не ассемблерного) написанного под микроконтроллеры, можно отлаживать при помощи аналогичных ПК компиляторов (Си — он и в Африке Си). У этого метода есть один большой плюс, если код не будет работать на ПК, то почти всегда тоже самое можно говорить и о микроконтроллере.

printf()
Как кто-то подметил: "… еще не придумали отладчик лучше чем printf()", с чем я полностью согласен: удобно проверять точки прохождения алгоритма, выполнение тех или иных условий, вывод вычислений и т.д. Но к сожалению printf() не всегда применим к микроконтроллерам.

Для отладки кода, я предпочитаю использовать файлы с расширением *.hex и *.cof, потому-что их генерят большинство IDE (как минимум для AVR).

Кстати, Labcenter Electronics выпустила VSMStudio, которая характеризуеться как: Универсальная ИДЕ для Протеуса (все тоже самое что и в остальных IDE, но отладочные файлы заточены специально под Протеус, что повышает качество отладки), но насколько я понял она еще очень сырая.

Как вы уже знаете в категории Debug главного меню находятся основные инструменты предназначенные для отладки кода. В нижней части (см. рис. выше) находятся куча окон при помощи которых можно заглянуть во внутренности микроконтроллеров. Наиболее востребованным является Watch Window, в нем можно указать регистры, за содержимым которых мы хотим наблюдать. Также там можно найти окна предоставляющие информацию о содержимом Flash, RAM, EEPROM памяти, I/O регистров и РОН. Примерно такие-же окна есть практически в любой IDE.
Photobucket
Тогда в чем же отличие спросите вы?
Photobucket
В данной категории есть еще одна строчка: Configure Diagnostics ..., напротив нее еще нарисован жук, которая представляет особый интерес, так как сей жук выдает довольно ценную (тчательную) информацию о всех выполняемых операциях выбранного нами модуля, будь-то самостоятельный чип или периферия какого-нибудь МК.

Чтобы узнать какая микруха может воспользоваться услугами жука, нужно щелкнуть по ней правой кнопкой мыши. Кстати там-же есть еще одна функция: Display Model Help (Вывесть справку о модели), где можно узнать: о свойствах модели, ее ограничения и еще разную инфу.

Информация выдаваемая данной утилитой (Diagnostics), сводится примерно к следующему:

— перечисление всех ресурсов устройства
— вывод параметров инициализации устройства
— вывод информации об начале какой нибудь операции (время начало, если это АЦП то номер канала, референс и т.д.)
— вывод информации об окончании операции (время окончания, результат операции — если это АЦП то полученное значение, затраченное время и т.д.)

Photobucket

Не знаю как вам, но мне это напоминает все тот-же printf().

Настройка Диагностики

Photobucket
Выбираем в категории Debug->Configure Diagnostics ... (или индивидуально по каждой микрухе жмем на жука). Открываеться окно в котором выбираем желаемую ИС, а уже в ней ту функцию/периферию за которой хотим понаблюдать.

Далее становиться активной панель Trace Information Level, в которой указываем уровень отладки:
Photobucket
Disabled, вообще отключаем
Warnings Only, выдает сообщение при какой-нибудь неполадке (по умолчанию)
Full Trace, отслеживает все телодвижения (иногда лишние)
Debug, то что надо

затем можно поставить галочку Suspend simulation whenever an event is logged?,
если не хотим пропустить ни одного прерывания/события. В конце указываем (в секундах) когда начать и когда окончить диагностику и жмем OK.

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

Далее, запускаем симуляцию и ждем пока не произойдет какое нибудь событие.
Когда событие происходит, загораеться кнопка Pause, а счетчик Message(s) окна Simulation Log увеличиваеться. Далее, приступаем к снятию показаний со всяких устройств, просмотр регистров, проверки правельного исполнения задуманного и т.д.

Photobucket

Эти инструменты, плюс все перечисленные (но не описаные), позволяют с большой вероятностью быстро локализовать, отладить большинство повседневных багов встречающиеся в различных приборах, тем самым экономя уйму времени.
Файлы в топике: proteus.zip

Комментарии (31)

RSS свернуть / развернуть
Довольно интересненько. А какой версией ты пользуешься, и где вообще взять корректно вылеченный протеус?
0
  • avatar
  • Vga
  • 07 июля 2011, 03:39
7.7SP2 с лечилкой — goo.gl/CtDIR

Правда там ключ до ноября 2011 года :)
0
Кстати уже есть Proteus7.10 можно скачать с лекарством depositfiles.com/files/c8rneohua
+1
… у меня 7.6, а где качал даже и не помню, но в архиве присутствует ключ от sonsivri, возможно там…
0
Программка, надо сказать, довольно глючная. Многие модельки работают очень сильно не по шиту. И некоторые схемки смоделировать просто не может — чего-то там у симулятора ломается и не выходит сделать за конечное число шагов.

Но в общем и целом, прикольно. Я фильтрики отлаживал в протеусе. Хрен бы без него получилось что-нибудь)
Алсо, в примерах из самого протеуса есть настоящий комп с линухом, полностью работающий под симулятором. Очень крута)
0
Не комп, а ARM7 проц, и не под линуксом, а под обрезком по имени uclinux.
+1
… я бы для проектировантя фильтров порекомендовал FilterPro от Texas Instruments, очень простая и удобная прога
0
Бывают ситуации, когда в протеусе код на МК работает как по маслу, а на железке уходит в дедлуп. Так что все-таки лучше отлаживать на железе.
0
симулировать поведение всей системы, а особенно, если она большая, довольно бессмысленно, как раз из-за множества неточностей, которые накладываются друг на друга и приводят к огромным ошибкам. Но отлаживать отдельные независимые части очень даже имеет смысл
0
… естественно это идеализированная симуляция, где не учтены разные паразитные емкости, рабочая температура (хотя ее можно задать в настройках SpicePro, по умолчанию 27 градусов) и много чего, но это не оправдывает некоторые безпардонные баги
0
Пожелание автору на будущее — перед отправкой загнать текст в Ворд и проверить орфографию
0
… дело не в орфографии, я пару раз стерал/редактировал некоторые обзацы, и возможно чтото недоглядел
0
:)))) стирал
0
стерал обзацы чтото
-1
У меня протеус плохо работал с экраном 1602, не корректно работала функция очистки экрана. Но я не проверял в программе занятость дисплея, а просто выдерживал паузу. После отправки команды очистки экрана- в дисплей больше ничего не записывалось… Хотя в железе всё прекрасно работало. А для симуляции данной схемы пришлось вместо очистки переинициализировать дисплей.
0
… кстати я при помощи диагностики как раз и добил HD44780 дисплэи, и по Протеусу подобрал паузу (при более коротких он сообщал о том что: controller is busy)
Photobucket
0
… а какая у вас задержка для функции clear, по даташиту должно быть минимум 2мс
0
Иногда — наоборот, шпротеус считает по правилам и схема не должна работать, а вот в реальности, из-за несовершенства мира, все работает и еще как!
0
… добавил обзац про использование щупа напряжения
0
А не знаешь как узнать какой формат coff протеус кушает. Я тут на IAR AVR перешел, а он что-то на оптимизировал так, что код не работает как нужно. И не могу пока подружить ИАР с Протеусом.
0
тут есть немного про поддерживаемые файлы (выбери семейство AVR)
0
VSMStudio, это хорошо, но пора бы уже выпустить поддержку STM8
0
… где-то читал что ST ежегодно продает больше всех электроники в мире, может это заговор против гиганта :)))
0
ИМХО эта пародия на симулятор не стоит и потраченного на его освоение времени потому, что к тому времени, пока освоишься, начинаешь натыкаться на кучу мелких и неприятных багов, которые кочуют от версии к версии, а разработчики только пополняют список поддерживаемого для симуляции железа, не заботясь о главном — четким и предсказуемым результатам работы того же симулятора. Одним словом ГОВНО.
0
… имхо, к симуляции надо подхолить как к эксперименту, тоесть еще надо уметь правельно построить симуляцию/эксперимент
0
За RTDBREAK спасибо, не знал, думаю пригодится :) Протеус штука удобная, особенно когда начинал с PIC — помог кучу багов отловить (т.к. новичек :) ).
Правда когда с AVR начал работать — выяснил одну особенность Протеуса — в программе я неправильно проинициализировал указатель стека… В итоге в железе неработало. А в Протеусе — да! Как оказалось он за меня все в модели прописал. Пофиг что я записывал в указатель в программе :)))
0
А где лежат сии дебагин тулзы (те, которые RTDBREAK, RTIBREAK, RTVBREAK)? Облазил все меня протеуса — не нашел :(
релиз 7.7 СП2
0
Photobucket
… я сейчас прикреплю к статье мои ключи от протеуса. Если вдруг непомогут, то как я говорил, можно воспользоваться щупом напряжения.
0
ах, так они в девайсах… а я все меню перешерстил, все инструменты. ИМХО, стоит указать в тексте, что эти тулзы лежат в девайсах, а не в измерительных устройствах и прочем :)
спасибо за ответ
0
… спасибо, уточнил
0
Никто не пользовался Proteus VSM for ARM Cortex-M3/LM3S?
0
… похоже нет. Пока что там «камней» да и производителей Cortex-M3 — кот наплакал, но направление правильное.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.