Библиотека компонентов для proteus

Библиотека компонентов для proteus

Проектирование схем электрических принципиальных с использованием микроконтроллеров в программной среде Proteus 8.1. Часть 1

В Proteus есть возможность эмуляции как аналоговых, так и цифровых компонентов, а также микроконтроллеров с возможностью их программирования. Основное отличие Proteus от аналогичных по назначению пакетов программ, например Multisim, заключается в развитой системе симуляции (интерактивной отладки в режиме реального времени и пошаговой) для различных семейств микроконтроллеров: 8051, ARM7, AVR, Cortex-M3, MSP430, PIC10/12/16/18/24, PICCOLO, dsPIC33. Proteus позволяет моделировать и отлаживать достаточно сложные устройства в которых может содержаться несколько микроконтроллеров разных семейств одновременно.

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

Таблица 1. Семейства и модели микроконтроллеров библиотеки компонентов Proteus.

LPC2101-LPC2106, LPC2114, LPC2124, LPC2131, LPC2132

AT90USB1286, AT90USB646, ATmega128, ATmega16/162/164P/165

LM3S300/301/308/310/315/316/317/328, LPC1311FHN33, LPC1313FBD48

PIC12C508A, PIC12C509A, PIC12C671/672, PIC12CE518/519/673/674, PIC12F1501, PIC12F1822

PIC24F04KA200/201, PIC24F08KA101/102, PIC24F16KA101/102, PIC24FJ128GA006/008/010/306

dsPIC33FJ12GP201/202, dsPIC33FJ12MC201/202, dsPIC33FJ16GP304, dsPIC33FJ16MC304, dsPIC33FJ32GP202/204, dsPIC33FJ32MC202/204

В этой статье процесс компьютерного моделирования схем с использованием микроконтроллеров будет рассмотрен на примере микроконтроллера семейства х51.

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

Рассмотрим процесс моделирования схем с использованием микроконтроллеров на примере микроконтроллера 80С51.

После создания пустого листа схемы его нужно заполнить символами необходимых компонентов из библиотеки. В Proteus создать новый проект схемы можно при помощи команды File/New Project. Необходимо отметить, что по умолчанию при создании нового проекта запускается мастер New Project Wizard.

Проектирование схемы включающей микроконтроллер при помощи мастера New Project Wizard.

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

Рассмотрим более подробно работу с мастером New Project Wizard. Для этого запустим его при помощи команды File/New Project основного меню Proteus. Количество шагов мастера зависит от выбора переключателя в окне New Project Wizard: Start. В том случае если выбрана позиция From Development Board (рис. 1), работа мастера будет состоять всего из одного шага, на котором для создания нового проекта предлагается использовать одну из уже имеющихся разработок, поставляемых вместе с Proteus.


Рис. 1. Окно New Project Wizard: Start, установка переключателя в позицию From Development Board

Выбор разработки производится в поле Development Board из одноименного списка путем выделения ее названия при помощи левой кнопки мыши. В выпадающем списке Micro-controller Family можно задать семейство микроконтроллера. В таком случае в списке Development Board будут показаны разработки, в которых используется микроконтроллер указанного семейства. При этом описание выбранной разработки отображается в поле Details. Также необходимо указать название нового проекта (поле Name) и его месторасположение на диске компьютера (поле Path). А затем нажать на кнопку Finish в нижней части окна New Project Wizard: Start. В результате будет открыт новый проект, содержащий схему (рис. 2а) и исходный код программы микроконтроллера (рис. 2б), которые можно модифицировать на свое усмотрение.


Рис. 2. Новый проект созданный на основе уже имеющейся разработки: (а) схема электрическая принципиальная, (б) исходный код программы микроконтроллера

В случае, если в окне New Project Wizard: Start переключатель был установлен в позицию New Project работа мастера будет состоять из шести шагов, на первом из которых (рис. 3) пользователю будет предложено указать название нового проекта (поле Name) и его месторасположение на диске компьютера (поле Path).


Рис. 3. Окно New Project Wizard: Start, установка переключателя в позицию New Project

После того как соответствующие поля заполнены, необходимо нажать на кнопку Next, в результате чего будет открыто следующее окно мастера New Project Wizard: Schematic Design (рис.4).


Рис. 4. Окно New Project Wizard: Schematic Design

На втором шаге мастер предложит указать необходимость создания разработки ISIS посредством установки переключателя в одну из двух позиций:

  • Do not create a schematic – не создавать проект ISIS;
  • Create a schematic from the selected template – создать проект ISIS (при этом в поле Design Templates задается формат чертежа).

После установки всех параметров необходимо нажать на кнопку Next, в результате чего будет открыто третье окно мастера New Project Wizard: PCB Layout (рис. 5).


Рис. 5. Окно New Project Wizard: PCB Layout

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

  • Do not create a PCB layout – не создавать проект PCB;
  • Create a PCB layout from the selected template – создать проект PCB (при этом в поле Layout Templates производится выбор шаблона проекта).

А затем нажать на кнопку Next для перехода к следующему шагу мастера New Project Wizard: PCB Layer Usage (рис. 6), на котором выполняется настройка слоев платы.


Рис. 6. Окно New Project Wizard: PCB Layer Usage

Пятый шаг работы мастера New Project Wizard: Firmware (рис. 7) – выбор микроконтроллера.


Рис. 7. Окно New Project Wizard: Firmware

На этом этапе путем установки переключателя в нужную позицию задается необходимость использования микроконтроллера в проекте схемы:

  • No Firmware Project – микроконтроллер не используется;
  • Create Firmware Project – создать проект с использованием микроконтроллера.

В случае выбора второго параметра, будут доступны следующие поля:

  • Family – семейство микроконтроллера;
  • Controller – модель микроконтроллера;
  • Compiler – инструменты ассемблера/компилятора;
  • Create Quick Start Files – автоматическое создание заготовки программного кода для микроконтроллера.

Используйте кнопку Compilers в поле Compiler для добавления компилятора (рис. 8).


Рис. 8. Окно Compilers

Шестой шаг работы мастера – подведение итогов. В окне New Project Wizard: Summary (рис. 9) выводится вся информация о создаваемом проекте.


Рис. 9. Окно New Project Wizard: Summary

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

По окончании работы мастера система на основе заданных установок создаст новый проект, который может содержать:

  • рабочее поле чертежа (рис. 10а) – вкладка Schematic Capture. При этом на чертеже уже будет размещено условное графическое обозначение микроконтроллера выбранного семейства;
  • контур печатной платы (рис. 10б) – вкладка PCB Layout;
  • заготовку программного кода для микроконтроллера (рис. 10в) – вкладка Source Code.


Рис. 10. Результаты работы мастера New Project Wizard: (а) рабочее поле чертежа, (б) контур печатной платы, (в) заготовка программного кода для микроконтроллера

Проектирование схемы включающей микроконтроллер без помощи мастера.

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

Выбор компонентов из базы данных для последующего их размещения в рабочей области программы производится в окне Pick Devices (рис. 11).


Рис. 11. Библиотека микроконтроллеров семейства 8051 программы Proteus

Данное окно можно открыть при помощи команды контекстного меню Place/Component/From Libraries или посредством нажатия на кнопку P на панели DEVICES (по умолчанию данная панель расположена в левой части программы и содержит список имеющихся в проекте компонентов). Открыть данную панель можно нажатием на кнопку Component Mode на левой панели инструментов редактора ISIS.

Для того, что бы добавить микросхему микроконтроллера в рабочее поле проекта, необходимо в левой верхней части окна Pick Devices в поле Category выбрать из списка библиотеку Microprocessor ICs. Пакет Microprocessor ICs позволяет включать в эмуляцию смешанной схемы определенные микроконтроллеры с возможностью написания и отладки программного кода. Выбор библиотеки из списка производится посредством щелчка левой кнопки мыши по строке с ее названием. Ниже поля Category находится поле Sub-category, в котором таким же способом задается семейство микроконтроллеров выбранной библиотеки. В поле Results отображаются все компоненты выбранного семейства. Выбор компонента производится посредством выделения при помощи левой кнопки мыши строки с его названием в поле Results. В поле Manufacturer можно выбрать производителя микроконтроллера. Если производитель не имеет значения – выберите значение All Manufacturers в этом поле. Для ускорения поиска компонентов можно воспользоваться строкой фильтра Keywords, которая расположена в верхнем левом углу окна Pick Devices. После того как выбор микроконтроллера произведен, его условное графическое обозначение отобразится в поле предварительного просмотра Preview. Посадочное место компонента будет показано в поле PCB Preview. Если для выбранного микроконтроллера доступно несколько посадочных мест, то все возможные варианты будут доступны для выбора из выпадающего меню, которое расположено под полем PCB Preview. Для того, что бы разместить выбранный микроконтроллер на схеме, необходимо в окне Pick Devices нажать на кнопку ОК. После чего данное окно будет закрыто, а символ компонента будет прикреплен к курсору мыши, при помощи которого необходимо поместить символ в нужное место на схеме (щелкнуть в нужном месте схемы левой кнопкой мыши).

Читайте также:  Bluetooth адаптер для телевизора lg smart tv

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

Параметры размещенного на схеме символа микроконтроллера при необходимости можно редактировать в окне Edit Component (рис. 12).


Рис. 12. Окно Edit Component

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

Открыть вкладку, на которой в процессе проектирования будет вноситься код программы инициализации микроконтроллера можно следующим образом. Выделите при помощи левой кнопки мыши символ микроконтроллера в рабочем поле проекта, при помощи правой кнопки мыши вызовите контекстное меню и выберите в нем пункт Edit Source Code. В результате чего в проект будет добавлена вкладка Source Code и открыто окно выбора микроконтроллера New Firmware Project (рис. 13), в котором устанавливаются следующие параметры:

  • Family – семейство микроконтроллера;
  • Controller – модель микроконтроллера;
  • Compiler – инструменты ассемблера/компилятора;
  • Create Quick Start Files – автоматическое создание заготовки программного кода для микроконтроллера.


Рис. 13. Окно New Firmware Project

В проект можно так же добавить и уже подготовленный ранее .asm файл. Для этого на панели дерева проектов Projects выберите при помощи левой кнопки мыши проект, к которому необходимо добавить .asm файл, при помощи правой кнопки мыши вызовите контекстное меню и выберите в нем пункт Add Files. В результате выполненных действий будет открыто окно проводника Windows, в котором необходимо выбрать на диске компьютера нужный .asm файл, после чего нажать на кнопку «Открыть».

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

Проектирование схем электрических принципиальных с использованием микроконтроллеров в программной среде Proteus 8.1. Часть 1

В Proteus есть возможность эмуляции как аналоговых, так и цифровых компонентов, а также микроконтроллеров с возможностью их программирования. Основное отличие Proteus от аналогичных по назначению пакетов программ, например Multisim, заключается в развитой системе симуляции (интерактивной отладки в режиме реального времени и пошаговой) для различных семейств микроконтроллеров: 8051, ARM7, AVR, Cortex-M3, MSP430, PIC10/12/16/18/24, PICCOLO, dsPIC33. Proteus позволяет моделировать и отлаживать достаточно сложные устройства в которых может содержаться несколько микроконтроллеров разных семейств одновременно.

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

Таблица 1. Семейства и модели микроконтроллеров библиотеки компонентов Proteus.

LPC2101-LPC2106, LPC2114, LPC2124, LPC2131, LPC2132

AT90USB1286, AT90USB646, ATmega128, ATmega16/162/164P/165

LM3S300/301/308/310/315/316/317/328, LPC1311FHN33, LPC1313FBD48

PIC12C508A, PIC12C509A, PIC12C671/672, PIC12CE518/519/673/674, PIC12F1501, PIC12F1822

PIC24F04KA200/201, PIC24F08KA101/102, PIC24F16KA101/102, PIC24FJ128GA006/008/010/306

dsPIC33FJ12GP201/202, dsPIC33FJ12MC201/202, dsPIC33FJ16GP304, dsPIC33FJ16MC304, dsPIC33FJ32GP202/204, dsPIC33FJ32MC202/204

В этой статье процесс компьютерного моделирования схем с использованием микроконтроллеров будет рассмотрен на примере микроконтроллера семейства х51.

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

Рассмотрим процесс моделирования схем с использованием микроконтроллеров на примере микроконтроллера 80С51.

После создания пустого листа схемы его нужно заполнить символами необходимых компонентов из библиотеки. В Proteus создать новый проект схемы можно при помощи команды File/New Project. Необходимо отметить, что по умолчанию при создании нового проекта запускается мастер New Project Wizard.

Проектирование схемы включающей микроконтроллер при помощи мастера New Project Wizard.

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

Рассмотрим более подробно работу с мастером New Project Wizard. Для этого запустим его при помощи команды File/New Project основного меню Proteus. Количество шагов мастера зависит от выбора переключателя в окне New Project Wizard: Start. В том случае если выбрана позиция From Development Board (рис. 1), работа мастера будет состоять всего из одного шага, на котором для создания нового проекта предлагается использовать одну из уже имеющихся разработок, поставляемых вместе с Proteus.


Рис. 1. Окно New Project Wizard: Start, установка переключателя в позицию From Development Board

Выбор разработки производится в поле Development Board из одноименного списка путем выделения ее названия при помощи левой кнопки мыши. В выпадающем списке Micro-controller Family можно задать семейство микроконтроллера. В таком случае в списке Development Board будут показаны разработки, в которых используется микроконтроллер указанного семейства. При этом описание выбранной разработки отображается в поле Details. Также необходимо указать название нового проекта (поле Name) и его месторасположение на диске компьютера (поле Path). А затем нажать на кнопку Finish в нижней части окна New Project Wizard: Start. В результате будет открыт новый проект, содержащий схему (рис. 2а) и исходный код программы микроконтроллера (рис. 2б), которые можно модифицировать на свое усмотрение.


Рис. 2. Новый проект созданный на основе уже имеющейся разработки: (а) схема электрическая принципиальная, (б) исходный код программы микроконтроллера

В случае, если в окне New Project Wizard: Start переключатель был установлен в позицию New Project работа мастера будет состоять из шести шагов, на первом из которых (рис. 3) пользователю будет предложено указать название нового проекта (поле Name) и его месторасположение на диске компьютера (поле Path).


Рис. 3. Окно New Project Wizard: Start, установка переключателя в позицию New Project

После того как соответствующие поля заполнены, необходимо нажать на кнопку Next, в результате чего будет открыто следующее окно мастера New Project Wizard: Schematic Design (рис.4).


Рис. 4. Окно New Project Wizard: Schematic Design

На втором шаге мастер предложит указать необходимость создания разработки ISIS посредством установки переключателя в одну из двух позиций:

  • Do not create a schematic – не создавать проект ISIS;
  • Create a schematic from the selected template – создать проект ISIS (при этом в поле Design Templates задается формат чертежа).

После установки всех параметров необходимо нажать на кнопку Next, в результате чего будет открыто третье окно мастера New Project Wizard: PCB Layout (рис. 5).

Читайте также:  Бензопилы хендай отзывы владельцев


Рис. 5. Окно New Project Wizard: PCB Layout

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

  • Do not create a PCB layout – не создавать проект PCB;
  • Create a PCB layout from the selected template – создать проект PCB (при этом в поле Layout Templates производится выбор шаблона проекта).

А затем нажать на кнопку Next для перехода к следующему шагу мастера New Project Wizard: PCB Layer Usage (рис. 6), на котором выполняется настройка слоев платы.


Рис. 6. Окно New Project Wizard: PCB Layer Usage

Пятый шаг работы мастера New Project Wizard: Firmware (рис. 7) – выбор микроконтроллера.


Рис. 7. Окно New Project Wizard: Firmware

На этом этапе путем установки переключателя в нужную позицию задается необходимость использования микроконтроллера в проекте схемы:

  • No Firmware Project – микроконтроллер не используется;
  • Create Firmware Project – создать проект с использованием микроконтроллера.

В случае выбора второго параметра, будут доступны следующие поля:

  • Family – семейство микроконтроллера;
  • Controller – модель микроконтроллера;
  • Compiler – инструменты ассемблера/компилятора;
  • Create Quick Start Files – автоматическое создание заготовки программного кода для микроконтроллера.

Используйте кнопку Compilers в поле Compiler для добавления компилятора (рис. 8).


Рис. 8. Окно Compilers

Шестой шаг работы мастера – подведение итогов. В окне New Project Wizard: Summary (рис. 9) выводится вся информация о создаваемом проекте.


Рис. 9. Окно New Project Wizard: Summary

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

По окончании работы мастера система на основе заданных установок создаст новый проект, который может содержать:

  • рабочее поле чертежа (рис. 10а) – вкладка Schematic Capture. При этом на чертеже уже будет размещено условное графическое обозначение микроконтроллера выбранного семейства;
  • контур печатной платы (рис. 10б) – вкладка PCB Layout;
  • заготовку программного кода для микроконтроллера (рис. 10в) – вкладка Source Code.


Рис. 10. Результаты работы мастера New Project Wizard: (а) рабочее поле чертежа, (б) контур печатной платы, (в) заготовка программного кода для микроконтроллера

Проектирование схемы включающей микроконтроллер без помощи мастера.

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

Выбор компонентов из базы данных для последующего их размещения в рабочей области программы производится в окне Pick Devices (рис. 11).


Рис. 11. Библиотека микроконтроллеров семейства 8051 программы Proteus

Данное окно можно открыть при помощи команды контекстного меню Place/Component/From Libraries или посредством нажатия на кнопку P на панели DEVICES (по умолчанию данная панель расположена в левой части программы и содержит список имеющихся в проекте компонентов). Открыть данную панель можно нажатием на кнопку Component Mode на левой панели инструментов редактора ISIS.

Для того, что бы добавить микросхему микроконтроллера в рабочее поле проекта, необходимо в левой верхней части окна Pick Devices в поле Category выбрать из списка библиотеку Microprocessor ICs. Пакет Microprocessor ICs позволяет включать в эмуляцию смешанной схемы определенные микроконтроллеры с возможностью написания и отладки программного кода. Выбор библиотеки из списка производится посредством щелчка левой кнопки мыши по строке с ее названием. Ниже поля Category находится поле Sub-category, в котором таким же способом задается семейство микроконтроллеров выбранной библиотеки. В поле Results отображаются все компоненты выбранного семейства. Выбор компонента производится посредством выделения при помощи левой кнопки мыши строки с его названием в поле Results. В поле Manufacturer можно выбрать производителя микроконтроллера. Если производитель не имеет значения – выберите значение All Manufacturers в этом поле. Для ускорения поиска компонентов можно воспользоваться строкой фильтра Keywords, которая расположена в верхнем левом углу окна Pick Devices. После того как выбор микроконтроллера произведен, его условное графическое обозначение отобразится в поле предварительного просмотра Preview. Посадочное место компонента будет показано в поле PCB Preview. Если для выбранного микроконтроллера доступно несколько посадочных мест, то все возможные варианты будут доступны для выбора из выпадающего меню, которое расположено под полем PCB Preview. Для того, что бы разместить выбранный микроконтроллер на схеме, необходимо в окне Pick Devices нажать на кнопку ОК. После чего данное окно будет закрыто, а символ компонента будет прикреплен к курсору мыши, при помощи которого необходимо поместить символ в нужное место на схеме (щелкнуть в нужном месте схемы левой кнопкой мыши).

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

Параметры размещенного на схеме символа микроконтроллера при необходимости можно редактировать в окне Edit Component (рис. 12).


Рис. 12. Окно Edit Component

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

Открыть вкладку, на которой в процессе проектирования будет вноситься код программы инициализации микроконтроллера можно следующим образом. Выделите при помощи левой кнопки мыши символ микроконтроллера в рабочем поле проекта, при помощи правой кнопки мыши вызовите контекстное меню и выберите в нем пункт Edit Source Code. В результате чего в проект будет добавлена вкладка Source Code и открыто окно выбора микроконтроллера New Firmware Project (рис. 13), в котором устанавливаются следующие параметры:

  • Family – семейство микроконтроллера;
  • Controller – модель микроконтроллера;
  • Compiler – инструменты ассемблера/компилятора;
  • Create Quick Start Files – автоматическое создание заготовки программного кода для микроконтроллера.


Рис. 13. Окно New Firmware Project

В проект можно так же добавить и уже подготовленный ранее .asm файл. Для этого на панели дерева проектов Projects выберите при помощи левой кнопки мыши проект, к которому необходимо добавить .asm файл, при помощи правой кнопки мыши вызовите контекстное меню и выберите в нем пункт Add Files. В результате выполненных действий будет открыто окно проводника Windows, в котором необходимо выбрать на диске компьютера нужный .asm файл, после чего нажать на кнопку «Открыть».

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

Есть у меня несколько проектов-долгостроев, один из которых — создание компьютера на базе CDP1802. Основную плату моделировал на бумаге и в Proteus.
Довольно скоро встал ребром вопрос: как быть с элементами, которые отсутствуют в Proteus?
На многих ресурсах подробно описано, как создать свою модель на С++ в Visual Studio.
К сожалению, при сборке под линуксом этот вариант не очень удобен. Да и как быть, если не знаешь С++ или нужно редактировать модель на лету для отладки?
Да и просто хочется сосредоточиться на моделировании, максимально упростив все остальное.
Так появилась идея делать симуляторные модели с помощью скриптов — на Lua.
Заинтересовавшихся прошу под кат (гифки на 2Мб).

Зачем это надо

Если забыть про всякую экзотику, вроде написания модели процессора, я давно отвык что-либо делать в симуляторе — подключил датчики к отладкам разного вида, осциллограф в руки, мультиметр, JTAG/UART и отлаживай себе.
Но когда понадобилось проверить логику работы программы при отказе GPS/в движении и тому подобном, пришлось писать эмуляцию GPS на другом микроконтроллере.
Когда было необходимо сделать телеметрию для машину под протокол KWP2000, отлаживать «на живую» было неудобно и опасно. Да и если одному — ой как неудобно.
Возможность отлаживать/тестировать в дороге или где-то, куда таскать с собой весь джентльменский набор просто неудобно (речь в первую очередь про хобби проекты) — хорошее подспорье, так что место симулятору есть.

Visual Studio C++ и GCC

Весь софт я пишу под GCC и модель я хотел так же собирать под ним, используя наработанные библиотеки и код, которые собрать под MSVS было бы затруднительно. Проблема заключалась в том, что собранная под mingw32 DLL вешала Proteus. Были перепробованы разные способы включая манипуляции с __thiscall и сотоварищи, а варианты с ассемблерными хаками вызовов не устраивал.
Друг moonglow с огромным опытом в таких делах предложил и показал как переписать С++ интерфейс на С, используя виртуальные таблицы. Из удобств, кроме возможности сборки под линуксом «без отрыва от производства», возможность, в теории, писать модели хоть на фортране — было бы желание.

Читайте также:  Букет из мандарин и цветов

Мимикрируем под С++

Идея с «эмуляцией» виртуальных классов на практике выглядит так:
Оригинальный С++ заголовок виртуального класса выглядит так

А вот версия на С; это наш псевдо-класс и его виртуальная таблица

Теперь создаем структуру с указателями на функции, которые внутри класса (их мы создадим и объявим отдельно)

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

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

«Сделай настолько просто, насколько это возможно, но не проще»

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

Вспомнил о Lua: прекрасно интегрируется в С, быстр, компактен, нагляден, динамическая типизация — все что надо. В итоге продублировал все С функции в Lua с теми же названиями, получив полностью самодостаточный способ создания моделей, не требующий пересборки вообще. Можно просто взять dll и описать любую модель только на Lua. Достаточно остановить симуляцию, подправить текстовый скрипт, и снова в бой.

Моделирование в Lua

Основное тестирование велось в Proteus 7, но созданные с нуля и импортированные в 8-ю версию модели вели себя превосходно.

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

Это простейший двоичный счетчик с внутренним генератором тактов, все его выводы — выходы.

У каждой модели есть DLL, которая описывает поведение модели и взаимодействие с внешним миром. В нашем случае, у всех моделей dll будет одна и та же, а вот скрипты — разные. Итак, создаем модель:

Описание модели

device_pins это обязательная глобальная переменная, содержащая описание выводов устройства. На данном этапе библиотека поддерживает только цифровые устройства. Поддержка аналоговых и смешанных типов в процессе.
is_digital — наш вывод работает только с логическими уровнями, пока возможен только true
name — имя вывода на графической модели. Он должен точно соответствоват — привязка вывода внутри Proteus идет по имени.
Два оставшихся поля говорят сами за себя — время переключения пина в пикосекундах.

Необходимые функции, объявляемые пользователем

На самом деле, нет строгой необходимости создавать что-то в скрипте. Можно вообще ничего не писать — будет модель пустышка, но для минимального функционала нужно создать функцию device_simulate. Эта функция будет вызываться, когда изменится состояние нод (проводников), например, изменится логический уровень. Есть функция device_init. она вызывается (если существует) однократно сразу после загрузки модели.
Для установки состояния вывода в один из уровней есть функция set_pin_state, первым аргументом она принимает имя вывода, вторым — желаемое состояние, например, SHI, SLO, FLT и так далее

Для начала сделаем так, чтобы на запуске все выводы находились в логическом 0, с помощью однострочника/
Мы можем обращаться к выводу как через глобальную переменную, к примеру, A0, Так и через её имя как строковую константу «А0» через глобальную таблицу окружения _G

Теперь нам нужно реализовать сам счетчик; Начнем с задающего генератора. Для этого есть функция timer_callback, принимающую два аргумента — время и номер события.
Добавим в device_init после выставления состояние вывода следующий вызов:

PC_EVENT это числовая переменная, содержащая код события (её мы должны объявить глобально)
NOW означает что вызвать обработчик события нужно через 0 пикосекунд от текущего времени (функция принимает как аргумент пикосекунды)
А вот и функция обработчик

По событию вызывается функция set_pin_bool, которая управляет выводом принимая как аргумент одно из двух состояний — 1/0.

Можно заметить, что после переключения вывода снова вызывается set_callback, ибо эта функция планирует непериодические события. Разница в задании времени из-за того, что set_callback будет вызвана в будущем, поэтому нам нужно добавить разницу во времени, а time как раз содержит текущее системное время

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

Возможности отладки

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

Текстовые сообщения

4 функции для вывода в лог сообщений, причем две последнии автоматически приведут к остановку симуляции

Благодаря возможностям Lua легко, удобно, быстро и наглядно можно выводить любую нужную информацию:

Теперь перейдем ко второй нашей модели — микросхемы ПЗУ, и посмотрим на

Всплывающие окна

Смоделируем нашу ПЗУ и подебажим её во время работы.
Объявления выводов тут ничем не отличается, но нам нужно добавить свойств нашей микросхеме, в первую очередь — возможность загрузить дамп памяти из файла:

Делается это в текстовом скрипте при создании модели:

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

Функция on_suspend вызывается (если объявлена пользователем) во время постановки на паузу. Если окно не создано — создадим его.
Память передается в библиотеку как указатель, ничего высвобождать потом не нужно — все сделает сборщик мусора Lua. И создадим окно debug типа, куда выведем нужны нам переменные и для масовки сдампим 32 байта со смещения 0x1000:

Наконец, реализуем сам алгоритм работу ПЗУ, оставив без внимания OE, VPP и прочие CE выводы

Сделаем что-нибудь для нашего «отладчика»:

Производительность

Интересный вопрос, который меня волновал. Я взял модель двоичного счетчика 4040, идущего в поставке Proteus 7 и сделал свой аналог.
Используя генератор импульсов подал на вход обоим моделям меандр с частотой 100кГц

Proteus’s 4040 = 15-16% CPU Load
Библиотека на С = 25-28% CPU Load
Библиотека и Lua 5.2 = 98-100% CPU Load
Библиотека и Lua 5.3a = 76-78% CPU Load

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

Весь этот проект родился как спонтанная идея, и ещё много чего нужно сделать:

Ближайшие планы

  • Пофиксить явные баги в коде
  • Максимально уменьшить возможность выстрелить себе в ногу
  • Документировать код под Doxygen
  • Возможно, перейти на luaJIT
  • Реализовать аналоговые и смешанные типы устройств
  • С плагин для IDA

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

Ссылка на основную публикацию
Adblock detector