Система моделирования ISIS Proteus. Быстрый старт

Поговорим о такой замечательной программе для симуляции электронных схем как Proteus 7, (а конкретнее версия 7.10). Для начала что такое симулятор, и зачем он нужен. Симулятор электронных схем Proteus 7, предназначен для моделирования составленных вами электронных схем. То есть вы рисуете схему (добавляете нужные компоненты и соединяете в нужной последовательности), а затем добавляете измерительные приборы, которые вам нужны для контроля работоспособности. Вся прелесть в том что в железе ничего собирать не нужно. Накидал схему и смотришь как она работает, измеряешь ее параметры. Иногда, конечно, случается что в железе все работает по другому. Вообще для Proteus 7 нужен компьютер по мощнее. Теперь познакомимся с самой программой. Запускаем программу и после загрузки видим: рабочее поле, панели инструментов (расположены вверху и слева), и панель свойств.

Создадим простой проект. Добавим светодиод, резистор, кнопку, питание и соединим все это, чтобы при нажатии на кнопку светодиод горел. Нажимаем «Компоненты», на панели свойств нажимаем «P».

Можно искать через категории нужный нам компонент, ну а можно и просто по названию. В строке поиска пишем «LED» и выбираем светодиод, например синий. Щелкаем по нему 2 раза и он добавляется в наши компоненты. Также добавим кнопку и резистор.

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

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


Теперь нужно добавить питание. Жмем на кнопку «Terminal» и добавляем элементы Power (+) и Ground (-).

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

Теперь смотрим в нижнем левом углу панель запуска симуляции. Все, как и в проигрывателе, треугольник — старт, квадрат — стоп ну и т.д. Запускаем, наводим курсор на кнопку и нажимаем ее.

Вообще существует масса систем моделирования электронных схем. Из всех, что я видел мне наиболее понравились Multisim и ISIS Proteus . Multisim обладает очень удобным интерфейсом, и в нем удобно отлаживать аналоговые девайсы, т.к. он позволяет использовать виртуальные (т.е. параметры ты указываешь сам) транзисторы и усилители, но совершенно не поддерживает сложные системы, вроде микроконтроллеров или разного рода драйверов. Точнее поддерживает, но крайне вяло. Только недавно в нем появилась поддержка древних АТ89C2051 и нескольких PIC ‘ов

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

Весит порядка тридцати метров в архиве, самая поздняя версия которая мне известна это 7.2 Учти только, что крякнутая версия Proteus работает порой ну очень странно , например код процессора ты видишь, а отладка не идет и в регистрах левые значения. Потому ищи тщательно;))))

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

Запускай Proteus , сразу же должно отрыться бежевое окно в точечках. Это рабочее поле. Тут мы и будем строить нашу схему. Для примера сварганим схему на моем любимом контроллере АТ89С51 она не будет делать ничего путного, будет просто отсылать в окошко терминала буковки по нажатиям кнопок приделанных к портам контроллера.

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

Откроется огроменный список элементов которые знает Proteus . Библиотеки постоянно дополняются и обновляются, поэтому пошарь по инету в поисках новых деталек.
В списке найди контроллер АТ89С51 , чтобы не возиться заюзай поиск по ключевым словам – набери просто «АТ89 » увидишь все семейство MSC-51 известные Proteus’у .

Выбирай нужный и тыкай «ОК ». После чего размещай микросхему в удобное тебе место. Сразу оговорюсь, что модели процов в Proteus несколько упрощенные, поэтому они не требуют наличия в виртуальной схеме кварца, системы сброса (подтяжка RESET до нужного уровня), наличия сигнала на использования внутренней памяти (+5 на EA, особенность процов С51 , умеющих работать от внешней ПЗУ ) и об этом не стоит забывать когда в итоге будем делать реальную схему, а то, в итоге, искать причину неработающей схемы можно очень долго.

Хоть они и не нужны, но детали обвески мы все же добавим. Опять тыкай на лупу с треугольником и ищи там кварц, буржуи зовут его «crystal » вот его и ставь на схему рядом с выводами XTAL .

Главная убогость интерфейса Proteus в том, что всегда правый клик сначала выделяет, а потом удаляет компонент, а левый ставит новый такой же. Ужасно напрягает, в Multisim все сделано в разы удобней и традиционней, но, увы, Multisim не столь могуч.

Теперь наведи курсор на вывод кварца и соедини его с выводом XTAL1 процессора, то же проделай с второй ногой кварца, только на XTAL2 . Теперь нам нужны кондеры, опять лезь в библиотеку и ищи там Capacitors . Будет огромный список реальных кондеров, выбери какой нибудь SMT конденсатор емкостью порядка 33pF . В верхнем окошке справа будет его обозначение в схеме, а внизу габаритные размеры, а точнее контактные площадки под его запайку.

Кстати, обрати взгляд в окошко чуть ниже строки поиска. Видишь там строку Modeling Primitive ? Вот там есть виртуальные примитивы. Они не имеют корпуса, потому при разводке печатной платы выскочат с ошибкой, но если ты не собираешься разводить плату, а лишь хочешь смоделить схему, то возьми лучше его – его значения можно менять как угодно.

Воткни пару кондеров рядом с кварцем и повесь их на ноги кварца одним выводом, а второй объедини и повесь на землю. Где взять землю ? Хороший вопрос:). Ищи в левой панели инструментов такие две фиговины похожие на бирки, зовется Terminal mode . Тыкай в неё, откроется тут же рядом, слева, панелька где нужно выбрать строку GROUND это и есть земля. Установи ее где тебе удобно. Power там же — это напряжение питания схемы. Обычно оно общее, но иногда могут быть замороки с тем, что у схемы множественное питание (как, например, в компе, там и 5 и 12 и 3.3 вольта и вообще тьма разных напряжений).

Далее надо собрать схему сброса. Протеусу это не требуется, он и так будет нормально отрабатывать, но реальной схеме это нужно. Делается это просто. Ставим резистор и конденсатор. При включении, когда конденсатор не заряжен, то его сопротивление равно нулю и на вывод RST подается +5 вольт, т.е. логическая 1, а как только кондёр зарядится, произойдет это через пару миллисекунд, то ножка через резистор будет лежать на земле, а это уже самый настоящий логический нуль и проц запустится в штатном режиме.

Сделай всё как на картинке и приступай к навеске кнопок на наш девайс. Вешать лучше на порт 1. Почему? А резисторы дополнительные не нужны. Дело в том, что у С51 порт 0 сделан с возможностью работы на шину данных, а это значит имеет так называемое Z состояние. Это когда на выходе не 1 и не 0, высокое сопротивление (импенданс), почти обрыв, но порт может без палева в это время снифферить шину на предмет пролетающих там значений, ничуть не выдавая себя и не мешая другим устройствам.

Порт 3 обвешан всякой дополнительной периферией, а порт 2 не очень удобно расположен в модели протеуса. Поэтому юзаем порт 1:))))) . Ищи в библиотеке какой нибудь switch или button. Мне нравится компонент button, потому я заюзаю именно его. Поставлю четыре кнопочки и повешу их на выводы P1.0, P1.2, P1.4, P1.6, а другие выводы кнопки приложу всем скопом на землю. Как это будет работать?

Да просто! Вначале вывожу в порт единичку на все выводы. Ножки изнутри сразу же подтягиваются к логической единице. Теперь, чтобы считать данные, достаточно забрать значение из регистра порта P1, а если мы нажимаем какую-либо из кнопок, то эта ножка жестко сажается на землю, пересиливая внутренний подтяг до единицы. Т.е. нажатая кнопка дает в порту нуль на своем бите. Такой принцип определения нажатия кнопки во всех микроконтроллерах. Также настоятельно рекомендую шунтировать кнопки конденсаторами на 40pF – не будет ложных срабатываний от импульсных помех.

Но это только в реальных устройствах, в Proteuse это все равно не имеет значения, но я добавлю. Всё, ввод данных готов. Теперь надо сделать вывод. Для вывода можно тупо повесить на ножки виртуальные светодиоды и также виртуально ими помигать, но это моветон, хотя, не спорю, помогает зачастую отлаживать программу.

Я же предпочитаю побаловаться моим любимым UART ом. Проще говоря, терминалкой. Лезем в раздел виртуальных приборов. Ищи на левой панели инструментов пиктограмму с нарисованным стрелочным прибором и лезь туда. Тебе будет список всякого хлама который ты можешь юзать. Тут тебе и вольтметр, и амперметр, и осциллограф, цифровой анализатор и разные узкоспециализированные приблуды вроде монитора протокола SPI или I2C . Для прикола возьми осциллограф (oscilloscope ) и повесь его одним каналом на вывод TxD . Еще нам нужен Virtual Terminal . Выбирай его и вставляй на схему. А теперь соединяй его выходы с выходами проца, крест накрест. Rx c Tx, Tx с Rx.

Готово! Ну и, для полного счастья, поставь еще светодиод на порт Р2 . Как подключать светодиоды к портам проца? Да очень просто! Вешаешь плюс светодиода на питание, а минус на резистор, а этот резистор уже на выход процессора. Чтобы зажечь диод надо на эту ногу выдать 0.

Тогда разница напряжений между напряжением питания и напряжением нуля на ножке будет максимальной и диод будет гореть. Ищи в компонентах LED ну и втыкай его как я тебе сказал. Обратил уже наверное внимание, что чаще мы событие определяем или устанавливаем по нулю, а не по единице. Это связано с тем, что ноль легче получить принудительно, чем подтягивать ножки вверх. Но далеко не всегда так, например, контроллеры семейства AVR умеют свои ножки сажать наглухо и на нуль и на напряжение питания, так что там диод зажечь можно и единичкой. Для этого его надо будет перевернуть и вторым концом через резистор повесить не на Power , а на землю.

Так, аппаратную часть мы нарисовали. Пора приступать к настройке и отладке.

Выдели микроконтроллер и кликни на нем дважды, откроется окно свойств.
PCB Packadge — это тип корпуса, он важен при разводке печатной платы. Пусть стоит DIL40

Program File – это собственно файл прошивки. Вот сюда нужно прописать путь к hex файлу.

Clock Frequency – частота на которой будет работать проц.

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

Жми кнопку с значком Play , как на магнитофоне. Тут всё просто, никаких сложностей. Отмечу только, что пошаговый режим это просто прерывистый запуск с небольшой временной задержкой. Для отладки нужно юзать дебаг по коду.

Теперь твоя схема работает. Можешь понаблюдать процессы, происходящие в ней. Если выберешь в панели инструментов вольтметр, то увидишь напряжение, или можно измерить ток, если заюзать амперметр. Цветные квадратики, что зажглись на ножках процессора это логические уровни. Синий – ноль, он же земля. Красный – логическая единица, а серый это высокий импенданс, он же Hi-Z .

В принципе уже этого достаточно, чтобы отладить работу дейвайса. А что, прогу отлаживаем в Keil uVision (если речь идет о С51) или в AVR Studio , компилим и смотрим что получилось. Это отлично работает на простых девайсах с одним управляющим контроллером и обвязкой.

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

Добавляем исходник.
Лезь в меню и ищи там пункт Source и смело тычь в него недрогнувшей рукой. Выбирай Add/Remove source и добавляй исходник. Советую сразу, чтобы компилятор не тупил, исходники ныкать по простым путям, без пробелов и русских букв. Например, как у меня: “d:\coding\C51\hack_2.asm ” Добавляя исходник не забудь указать компилятор которым его надо будет компилить. Для данного случая в “Code generation tools” надо указать “ASEM51 ”, то есть компилятор архитектуры MCS-51 .

Жми ОК и в меню Source появится еще один пункт – добавленный исходный файл, выбрав который автоматом открывается редактор и можно по быстрому подправить текст программы.

Настройка компилятора.
Опять же лезь в меню Source и ищи там пункт “Define Code Generation Tools ” это опции компилера. Изначально настроены они криво — в разделе “Make rules ” тычь в строку “Command Line ” и выноси оттуда весь мусор, что там есть. Оставь только “%1 ” без кавычек. ASEM51 умная зараза, он сам добавит нужные файлы с описаниями регистров и переменных, тем более, что у всего семейства MСS-51 все адреса одинаковые.

Компиляция
Жми в том же меню Source пункт Build All и получай на выходе hex файл , но уже местной выделки. Там же моргнет окно комплиятора, в котором будут сведения об ошибках и ряд служебных данных.

Запуск
Запускай схему кнопкой Play в нижней панельке и сразу же нажимай либо паузу, либо пошаговый режим. Сразу же должно открыться окно с кодом программы как в уже привычном тебе отладчике. Если не открылось, то ты его найдешь в меню Debug -> 8051CPU -> Source Code — U1

Там же будет масса других полезных вещей, как, например, содержимое регистров процессора или памяти программ/данных.

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


При добавлении в проект второго проца его код, регистры и память будут там же, но называться будет уже Source Code – U2 и так далее.
Кроме того, в директории Proteus’a есть папка SAMPLES вот в ней куча разных примеров, весьма сложных, показывающих возможности системы ISIS Proteus .

З.Ы.
Эту статью я писал для журнала Хакер. В несколько ином виде (чуть более подробном) она была опубликована в журнале за декабрь 2007 года.

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

Достоинства протеуса
Протеус идеальная программа для новичков недавно начавших изучать микроконтроллеры. В программе есть куча разнообразных измерительных приборов: Генераторы сигналов, осциллографы, анализатор шины i2c и еще много чего. Эти приборы позволят быстро отладить программу для МК. В отличии от реального железа, заменить резистор в схеме это дело 4-х секунд! Интерфейс интуитивно понятен и разобраться в нем не составляет труда. обладает почти всеми необходимыми моделями (лично мне не хватило модели дисплея от нокии 3310 но и она потом нашлась). Кстати модели можно создавать самому, но я не вникал в подробности как это делается. Вместе с программой для симуляции электронных схем, в комплект входит программа разводки печатных плат — ARES . Пожалуй самая удобная из всех увиденных мной. Схему нарисованную в протеусе можно легко перенести в ARES. Буквально одним нажатием кнопки. В ARES есть авторазводчик плат, но я им не пользуюсь ибо он так себе. Короче достоинств очень много, но стоит добавить ложку дёгтя.

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

Как собрать схему в Proteus

Для начала нужно добавить в проект необходимые нам элементы. В демонстрационном примере мы попробуем собрать бегущие огни на микроконтроллере Tiny2313. Для данного проекта нам потребуются:

  • Микроконтроллер tiny2313
  • Восемь светодиодов
  • восемь токоограничивающих резисторов на 220 Ом

Для добавления щёлкнем на кнопку на панели инструментов слева. После нажатия жмём на кнопку P слева от надписи DEVICES. Откроется окно, в котором необходимо выбрать нужный нам элемент. Поиск можно осуществить двумя способами: Просто выбрать элемент из нужной категории Microprocessor ICs -> AVR Family -> ATTINY2313 а можно поступить проще, просто написав нужное название в строке поиска сверху. Должно получится что то вроде этого:

После добавления элемента его название появится в списке DEVICES. Аналогичным образом добавим резистор (слово для поиска RES) и светодиод (Led-green). После добавления приступим к объединению элементов в схему. Из списка DEVICES выбираем микроконтроллер и помещаем его в рабочую область. Потом добавляем аналогичным образом 8 светодиодов и 8 резисторов. Резисторы имеют сопротивление по умолчанию 10 кОм, а нам нужно 220. Для изменения сопротивления щёлкнем по резистору двойным щелчком и в открывшемся окне найдем поле «Resistance» и внесем туда число 220. Катоды светодиодов потребуется подключить к земле. Чтобы получить вывод «Земля» нужно щёлкнуть на кнопке и в списке выбрать «GROUND». Аналогичным способом можно получить вывод +5 вольт (POWER). Теперь когда земля добавлена, соединим детали по схеме ниже:

Теперь нужно «прошить» виртуальный микроконтроллер. Для этого щёлкаем дважды на нем и находим поле для ввода текста под названием Program File. В нем нужно указать путь к HEX файлу. Так же в этом окне можно задать частоту работы контроллера, содержимое EEPROM памяти, фьюзы итд. Прошивку для данного демонстрационного примера можно скачать . Теперь когда всего готово можно приступать к самому интересному — запуску симуляции! Жмем кнопочку Play снизу (треугольничек направленный вправо) , после этого светодиоды должны по очереди загораться! Аналогично собираются другие схемы на микроконтроллерах. Все вопросы по протеусу можно задать в комментах.

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

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

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

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

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


Контур элемента двигается всед
за указателем мыши в режиме размещения.

Выберите устройство MINRES1K и разместите один резистор над операционным усилителем, как показано на схеме выше. Нажмите один раз левую кнопку на иконке вращения против часовой стрелки (показано ниже); заметьте, что предварительный вид резистора в окне краткого обзора показывает, что он повернут на 90°. Наконец, разместите второй (вертикальный) резистор R2.


Иконки вращения
(выбрано вращение против часовой стрелки).

Если Вы недостаточно опытны, Вы вряд ли с первой попытки разместите элементы так, как это необходимо, поэтому рассмотрим, как их переместить. Объекты в ISIS для дальнейшего редактирования выбираются ‘выделением’. Есть несколько способов выделить объект в ISIS:


Контейнер выделения, окружающий ОУ.

Точно так же Вы можете снять выделение (или совокупность выделений) или левым кликом на пустом месте, или правым кликом на пустом месте и выбором пункта Очистить Выделение (Clear Selection ) в появившемся контекстном меню.


Снятие выделения со всех объектов
через контекстное меню.

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


Перемещение выделенного ОУ.

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

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

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