Руководство программе proteus

Введение

Цель данного руководства – показать вам на примере создания простой схемы, как проводить интерактивное моделирование, используя Proteus VSM. Пока мы сконцентрируемся на использовании Активных Компонентов (Active Components) и возможностях отладки редактора ISIS, мы также рассмотрим основы трассировки и основы управления схемами. Полный обзор этих тем может быть найден в справочной системе ISIS.

Схема, которую мы будем использовать для моделирования – это два светофора, соединенных с микроконтроллером PIC16F84 как показано ниже.

Пример схемы Traffic.dsn

Пример схемы Traffic.dsn

Пока мы будем рисовать схему с нуля, законченную версию можно будет найти по пути “SamplesTutorialsTraffic.DSN” в папке, где у вас установлен Proteus. Пользователи, которые знакомы с основными способами работы в ISIS, могут выбрать уже готовую схему и перейти к разделу о программе микроконтроллера. Однако, обратите пожалуйста внимание на то, что файл этого проекта содержит предумышленную ошибку – прочитайте для более подробной информации.

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

Вычерчивание схемы

Размещение элементов

Начнем с размещения двух светофоров и PIC16F84 на новом макете схем. Начните новый проект, выберите иконку Компонент (Component) (все иконки имеют всплывающие подсказки и контекстно-зависимую справку, что помогает их использованию). Затем левый клик на букве ‘P’ наверху переключателя объектов (Object Selector), чтобы открыть окно Браузера Библиотек (Library Browser), которое появится поверх окна редактора (для более подробной информации смотрите Основы Ввода Схем в справочной системе ISIS).

Нажмите кнопку P на клавиатуре и напечатайте ‘Traffic’ в поле “Ключевые слова” (Key words), и дважды кликните на результате, чтобы переместить светофоры в переключатель объектов. Сделайте то же самое для PIC16F84A.

Единожды выбрав в проект светофоры и PIC16F84, закройте Браузер Библиотек и кликните один раз на PIC16F84 в переключателе объектов (это выделит ваш выбор и элемент будет показан в окне предварительного просмотра в правом верхнем углу экрана). Теперь левый клик на окне редактора, чтобы поместить элемент на схему, – повторите процесс, чтобы разместить на схеме два светофора.

Перемещение и ориентация

Мы создали узлы схемы, но случайно не идеально разместили их. Чтобы переместить элемент, кликните на нем правой кнопкой мыши (это выделит элемент), затем зажмите левую кнопку мыши и перетащите элемент (вы увидите контур элемента “следующий” за курсором мыши) на требуемую позицию. Когда контур будет там, где вы хотите, отпустите левую кнопку мыши, и элемент переместится на заданную позицию. Обратите внимание, что в данный момент элемент всё еще выделен – правый клик на пустом месте окна редактора вернет элементу нормальное состояние.

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

Размечайте схему осмысленным способом (например, исходя из простоты восприятия), двигайте и поворачивайте элементы, как требуется. Если у вас возникли проблемы, советуем поработать с руководством в справочной системе ISIS – ISIS Tutorial.

Для нашей цели, мы игнорируем 2D графику, чтобы не запутываться, и сконцентрируемся на создании моделируемой схемы – для тех, кому интересно, полный доклад о графических возможностях ISIS можно найти в разделе 2D графика (2D Graphics).

Масштаб и захват

Как правило, при разводке схемы полезна возможность изменения масштаба требуемой территории. Нажатие клавиши F6 или иконки Увеличить (Zoom In) увеличит масштаб вокруг текущей позиции мыши, или, в качестве альтернативы, зажмите клавишу SHIFT, и зажав левую кнопку мыши, выделите территорию, которую нужно увеличить. Чтобы уменьшить масштаб, нажмите клавишу F7 или иконку Уменьшить (Zoom Out), или, если вы хотите уменьшить так, чтобы видеть всю схему целиком, нажмите клавишу F8 или используйте колесо мыши, чтобы уменьшить или увеличить требуемую территорию. Соответствующие команды могут быть доступны меню Вид (View).

ISIS имеет очень мощные возможности, называемые Real Time Snap. Когда курсор мыши находится поблизости от конца вывода или проводника, местоположение курсора захватывается этими объектами. Это позволяет легко редактировать и управлять схемой. Эта возможность может быть найдена в меню Инструменты (Tools) и по умолчанию включена.

Более подробная информация о масштабе и захвате может быть найдена в справочной системе ISIS – Окно Редактора.

Трассировка соединений

Простейший способ соединения схемы – это использовать опцию автотрассировки проводника (Wire Auto Router) в меню Инструменты (Tools). Убедитесь, что она включена (должна быть видна отметка в меню слева от опции). Для более подробной информации смотрите раздел “Автотрассировка проводника” в Инструкции ISIS. Увеличьте PIC, чтобы все выводы были видны, затем поместите курсор мыши на конец вывода 6 (RB0/INT). Вы увидите маленький ‘х’–курсор на конце мыши. Это показывает, что мышь в правильной позиции для присоединения проводника к этому выводу. Левый клик мышью, чтобы начать соединение, и затем переместите мышь к выводу, соединенному с красным фонарём одного из светофоров. Когда вы снова получите ‘х’–курсор над этим выводом, кликните левой кнопкой мыши, чтобы завершить соединение. Повторите этот процесс для подключения обоих светофоров как показано образце схемы.

Пара вопросов о процессе разводки, заслуживающих упоминания:

  • Вы можете делать соединения в любом режиме – ISIS достаточно сообразителен, чтобы понять, что вы делаете.
  • Когда включена автотрассировка проводника (Wire Auto router), разводится вокруг препятствий и, как правило, ищется удобная траектория между соединениями. При этом способе, как правило, вам только нужно сделать левый клик на обоих концах соединения и предоставить ISIS возможность позаботиться о пути между ними.
  • ISIS автоматически переместит экран, если вы затронете границу окна редактора, перемещая проводник. Учитывая это, вы можете увеличить масштаб до подходящего уровня и, при условии, что вы знаете приблизительную позицию элемента-цели, просто подталкивайте экран, пока не увидите его. В качестве альтернативы, вы можете увеличивать и уменьшать масштаб, пока перемещаете проводник (используя клавиши F6 и F7).

В заключение, мы должны соединить вывод 4 с клеммой питания. Выберите иконку “Клемма” (Terminal) и выделите “Питание” (POWER) в переключателе объектов. Теперь сделайте левый клик на подходящем месте и поместите клемму. Выберите подходящую ориентацию и присоедините клемму к выводу 4, используя тот же способ, что и раньше.

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

Написание программы

Листинг исходной программы

Для успеха нашей консультации мы подготовили следующую программу, которая записывается в PIC для управления светофорами. Эта программа приготовлена в файле TL.ASM и может быть найдена в папке “SamplesTutorials”.


    ; PIC16F844 is the target processor
    LIST    p=16F84

    ; Include header file
    #include "P16F84.INC"

    ; Temporary storage
    CBLOCK 0x10
      state
      l1,l2
    ENDC

    org     0         ; Start up vector.
    goto    setports  ; Go to start up code.

    org     4         ; Interrupt vector.
halt
    goto    halt      ; Sit in endless loop and do nothing.

setports
    clrw              ; Zero in to W.
    movwf  PORTA      ; Ensure PORTA is zero before we enable it.
    movwf  PORTB      ; Ensure PORTB is zero before we enable it.
    bsf    STATUS,RP0 ; Select Bank 1
    clrw              ; Mask for all bits as outputs.
    movwf  TRISB      ; Set TRISB register.
    bcf    STATUS,RP0 ; Reselect Bank 0.

initialise
    clrw              ; Initial state.

    movwf  state      ; Set it.

loop
    call   getmask    ; Convert state to bitmask.
    movwf  PORTB      ; Write it to port.
    incf   state,W    ; Increment state in to W.
    andlw  0x04       ; Wrap it around.
    movwf  state      ; Put it back in to memory.
    call   wait       ; Wait :-)
    goto   loop       ; And loop :-)

    ; Function to return bitmask for output port
    ;for current state.

    ; The top nibble contains the bits for one set
    ;of lights and the lower nibble the bits for
    ;the other set. Bit 1 is red, 2 is amber  and
    ;bit three is green. Bit four is not used.
getmask
    movf   state,W ; Get state in to W.
    addwf  PCL,F   ; Add offset in W to PCL to calc.goto.
    retlw  0x41    ; state==0 is Green and Red.
    retlw  0x23    ; state==1 is Amber and Red/Amber

    retlw  0x14    ; state==3 is Red and Green
    retlw  0x32    ; state==4 is Red/Amber and Amber.

    ; Function using two loops to achieve a delay.
wait
    movlw  5
    movwf  l1

w1  call   wait2
    decfsz l1
    goto   w1

    return

wait2
    clrf   l2
w2
    decfsz l2
    goto   w2
    return
    END

На самом деле в коде есть предумышленная ошибка, но подробнее об этом позже…

Прикрепление исходного файла

Следующий этап – присоединить программу к нашей схеме, чтобы мы могли успешно моделировать ее поведение. Сделаем это через команды меню Исходник (Source). Теперь перейдите в меню Source и выберите команду “Добавить/удалить исходные файлы” (Add/Remove Source Files). Нажмите кнопку New, зайдите в папку “SamplesTutorials” и выберите файл TL.ASM. Нажмите “открыть” и файл появится в выпадающем списке имен файлов исходных кодов (Source Code Filename).

Теперь нужно выбрать программу формирования кода для файла. Для нашей цели подойдет программа MPASM. Эта опция будет доступна из выпадающего списка Code Generation Tool, выберите ее обычным способом, кликая левой кнопкой мыши(обратите внимание, что если вы планируете использовать новый ассемблер или компилятор, вам нужно зарегистрировать его, используя команду “Определить программу формирования кода” (Define Code Generation Tools)).

В завершение, необходимо установить с каким файлом работает процессор. В нашем примере это будет tl.hex (hex-файл, генерируемый MPASM, являющийся результатом трансляции tl.asm). Чтобы прикрепить этот файл к процессору, кликните на pic-контроллере сначала правой кнопкой мыши, а потом левой. Это откроет диалоговую форму редактирования элемента, которая содержит поле “Файл программы” (Program File). Если в нем еще не установлен tl.hex, то введите путь к файлу либо вручную, либо просматривая место, где находится файл, нажав ‘?’ справа от поля. Установив hex-файл, нажмите ОК, чтобы выйти из диалоговой формы.

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

Отладка программы

Моделирование схемы

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

Режим отладки

Чтобы удостоверить, что мы тщательны в отладке, мы остановим текущее моделирование. Покончив с этим, вы можете начать отладку нажатием CTRL+F12. Появятся два окна – первое хранит текущие значения регистров, второе показывает исходный код программы. Любое из них может быть активировано из меню “Отладка” (Debug) вместе с совокупностью других информационных окон. Мы также хотим активировать смотровое окно (Watch Window), в котором мы можем наблюдать внесенные изменения в параметры состояния. Полное разъяснение этого элемента доступно в разделе, озаглавленном “Смотровое окно”, в данной документации.

Установка точки останова

Взгляните на программу, можно заметить, что она замкнута в повторяющемся цикле. Поэтому будет хорошей идеей перед тем, как начать, установить точку останова в начале этого цикла. Вы можете сделать это выделением мышью строки (по адресу 0005 и 000E), а затем нажатием F9. Затем нажмите F12, чтобы запустить прогон программы. Теперь вы увидите сообщение в строке состояния, показывающее, что достигнута цифровая точка останова, а также адрес счётчика команд. Он соответствует адресу первой точки, которую мы установили.

Список клавиш отладки можно найти в меню Debug, но мы, большей частью, будем использовать F11, чтобы пошагово отлаживать программу. Теперь нажмите F11 и заметьте, что красная стрелка слева переместилась вниз к следующей инструкции. Мы фактически выполнили инструкцию ‘clrw’, а затем остановились. Вы можете проверить это, взглянув на регистр W в окне регистров и обратив внимание, что он обнулен.

Теперь нужно определить, что должно произойти при выполнении следующей инструкции, а затем проверить, действительно ли это произошло. Для примера, следующая инструкция перемещает содержимое регистра “W” в PORT A, т.е. PORT A будет очищен. Выполнение этой инструкции и проверка окна регистров подтверждают, что это на самом деле так. Продолжайте в том же духе пока не достигните нашей второй точки останова, обратите внимание, что оба порта настроены на выход (как предписано регистром TRISB) и установлены в нули.

И так, мы остановились на вызове функции, у нас есть опция перешагивания через функции (Stepping Over) (нажатием клавиши F10), но для полноты мы прошагаем через каждую инструкцию. Нажатие здесь F11 переносит к первой выполняемой строке функции getmask. Шагнув вперед, мы видим, что операция перемещения была успешна, и что мы попадаем в правильном месте для добавления нулевого сдвига в нашей таблице соответствия. Следовательно, когда мы возвращаемся в основную программу, мы имеем “маску”, которую и ожидали. Делая следующий шаг и записывая маску в порт, мы можем видеть правильный результат на схеме. Еще один шаг для инкриментирования режима также успешен, что подтверждается окном регистров, где значение в регистре W увеличилось на 1.

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

Поиск ошибки

Скрытый анализ показывает, что причина проблемы в побитовом И с четверкой вместо тройки. Режимы, которые мы хотим 0, 1, 2, 3 при побитовом И их с 4 дают 0. Вот почему, когда запущено моделирование, режим светофоров не меняется. Решение в простой замене проблемной инструкции на И с 3 вместо 4. Это означает, что режим увеличивается до 3, и когда регистр W увеличится до 4, режим будет обнулен. Альтернативное решение в проверке, когда ‘W’ возрастет до 4, и сбросе его в ноль.

Теги

CADCAD / САПР (система автоматизированного проектирования)ISISMCUProteus VSMМикроконтроллер

В наш век новейших технологий уже не обязательно собирать какую-либо схему на макетной плате, дабы убедиться в ее работоспособности. Существуют программы-симуляторы для симулирования работы схем в реальном времени. Одной из них и является Proteus. Это довольно многофункциональная программа для симуляции различных схем. Собственно в состав Proteus’a входят программы с названиями ISIS (программа-симулятор) и ARES (трассировка печатных плат), в которой разводку плат можно трассировать автоматически, по предварительно составленной схеме в ISIS.

Начнем с ознакомления с интерфейсом. Для выбора компонентов нужно нажать на кнопку «P» в левом верхнем углу экрана (возле надписи «DEVICES»).

Выбор компонентов

После этого появится окно такого вида:

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

В столбце слева-классификация элементов, в столбце посередине сами элементы, в левом нижнем «окошке» — корпус элемента (если таковой имеется в библиотеке ARES), а в правом верхнем окне-собственно сам элемент, например я, выбрал микроконтроллер ATTINY13, вот так это выглядит:

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

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

Теперь можно приступить к моделированию какой-нибудь схемы. Для начала можно попробовать «собрать» мультивибратор на 2-х транзисторах, по такой схеме:

Схема мультивибратора на 2-х транзисторах

Для выбора транзисторов жмем «P»-«Transistors» и выбираем наш 2N4410. Конденсаторы расположены под заголовком «Capacitors», резисторы в «Resistors», а светодиод в «Optoelectronics». Что касается батареи, то она размещена в группе «Simulator Primitives». Размещать компоненты желательно внутри рабочей области (синего прямоугольника). Далее следует выбрать автотрассировку связей, это делается либо через меню, либо через панель «быстрого доступа», второе более предпочтительно. Для активации автотрассировщика через панель, нужно нажать эту клавишу:

Активация автотрассировщика

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

Мультивибратора в Proteus

Схема составлена, теперь можно посмотреть, как она будет работать. Для этого нужно нажать на кнопку «play» в левом нижнем углу. Все! Ваша первая симуляция работы схемы успешно завершена! Теперь можете экспериментировать в полной мере, успехов вам!

P.S. О более сложных симуляциях, например схем на микроконтроллерах, а также о работе в ARES я расскажу в следующей статье.

Теги:

Ресин Е.
Опубликована: 2012 г.


0


Вознаградить

Я собрал
0

0

x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография

0

Средний балл статьи: 0
Проголосовало: 0 чел.

В этой статье я хочу поделиться своим опытом и, в основном, рассказать как можно использовать ПО Proteus.

Начнем с информации для общего понимания.

Если всё очень сильно упростить, то Proteus Design Suite — это набор программ для проектирования электронных схем. ISIS Proteus — это одна из программ в данном пакете и именно она представляет больший интерес.

Зачем вообще нужен ISIS Proteus?

А нужен он для моделирования электронных схем. Вы, наверное, спросите — зачем мне изучать и использовать ISIS Proteus, если есть множество других программ, которые позволяют делать это. И я вам отвечу — ISIS Proteus может моделировать работу программируемых устройств: микропроцессоров, микроконтроллеров, DSP и проч. Вы только представьте, вы можете не покупая микроконтроллеры создать, проверить и отладить свой проект без малейшего вложения в покупку МК и прочих компонентов (например: резисторы, транзисторы, светодиоды, моторы, реле и т.д.).

Что понадобится для этого проекта?

Сначала — специализированное ПО. Поскольку в этом проекте я использовал Arduino, мне понадобится среда разработки Arduini IDE. https://www.arduino.cc/en/software — тут вы можете скачать его с официального сайта. Далее нам необходимо будет установить Proteus Design Suite. https://www.youtube.com/watch?v=td4D7BzbX2Q — в этом видео продемонстрировано, как правильно это сделать, всё просто и ничего лишнего.

Примечание: да, я знаю, что на данный момент вышла уже 8-я версия Proteus-а, но у меня и моих знакомых постоянно возникали проблемы с ней. Поэтому будем использовать 7-ю.

Что будем делать после установки?

7-я версия Proteus-а имеет в себе огромную библиотеку компонентов на любой вкус и цвет, но платформ Arduino в ней сначала нет. Нам необходимо это исправить. Скачать одну из таких библиотек можно на этом сайте -https://www.theengineeringprojects.com/2021/03/download-proteus-library-of-arduino-modules.html . Лучше скачивайте версию 2.0.

После скачивания вам нужно распаковать эти файлы и переместить в корневую папку Proteus-а. … Labcenter ElectronicsProteus 7 ProfessionalLIBRARY — именно в эту папку нужно распаковать данную библиотеку. https://www.youtube.com/watch?v=YF13YaGg3Mo — видео по теме.

Готово, теперь в библиотеке компонентов мы можем найти основные варианты платформы Arduino.

Теперь нам необходимо написать код для нашего проекта. В свою очередь, для демонстрации возможностей Proteus-а я возьму готовый код из примера, которые хранятся в IDE Arduino, а именно — Blink.

Обязательно нужно поставить галочку «Компиляция» в настройке Arduino IDE. Таким способом мы сможем получить бинарный файл с расширением .hex.

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

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

Вот такая простая схемка у меня получилась. Также нам нужно указать путь к бинарной прошивке Arduino, для этого необходимо двойным кликом по графическому компоненту ARD1 открыть его параметры и в разделе «Program File» указать путь к .hex файлу, который мы получили в ходе компиляции кода.

После того как мы указали путь к прошивке, нажимаем кнопку «Play» и наблюдаем мигание светодиода.

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

P.S. Это моя первая статья, не судите её строго. Жду ваших комментариев.

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

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

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

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

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

Протеус размещение и соединение компонентов

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

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

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

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

Протеус симуляцияТеперь останавливаем симуляцию. Если этот проект потребуется в будущем, можем его сохранить через меню Файл->Сохранить.

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

СКАЧАТЬ PROTEUS 7.10 SP0 RUS & CRACK

Введение

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

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

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

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

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

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

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

Семейство

Модели семейства

8051

80C31/32/51/52/54

ARM7

LPC2101-LPC2106, LPC2114, LPC2124, LPC2131, LPC2132

AVR

AT90USB1286, AT90USB646, ATmega128/1280/1281/1284P, ATmega16/162/164P/165

Cortex-M3

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

MSP430

MSP430C1101/1111/1121, MSP430F1101/1111/1121/2001/2011/2101/2111

PIC10

PIC10F200/202/204/206/220/222/320/322, PIC10LF320/322

PIC12

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

PIC16

PIC16C62B/63A/64A/65B/66/67/72A/73B/74B/76

PIC18

PIC18F1220/1230/1320/1330/13K22/13K50/14K22/14K50/2220/2221

PIC24

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

PICCOLO

TMS320F280200DA/200PT/20DA/20PT/21DA/21PT/22DA/22PT/23DA/23PT

dsPIC33

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

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

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

Микроконтроллеры AVR семейства Mega. Общие сведения

AVR — это 8‑разрядные микроконтроллеры, способные решать множество задач встроенных систем. Быстродействие данных микроконтроллеров позволяет в ряде случаев применять их в устройствах, для реализации которых прежде можно было применять только 16‑разрядные микроконтроллеры, а значит, это ощутимо удешевляет готовую систему.

Микроконтроллеры AVR обладают следующими основными характеристиками:

  • очень быстрая гарвардская RISC-архитектура загрузки и выполнения большинства инструкций в течение одного цикла тактового генератора. При этом достигается скорость работы примерно 1 млн операций в секунду на 1 МГц. Частота тактового генератора многих типов микроконтроллеров AVR может достигать 10–16 МГц. Отсутствует внутреннее деление частоты, как, например, в микроконтроллерах PIC;
  • программы содержатся в электрически перепрограммируемой постоянной памяти программ FLASH;
  • система команд микроконтроллеров AVR изначально проектировалась с учетом особенностей языка программирования высокого уровня С, что в результате позволяет получать после компиляции программ на С гораздо более эффективный код, чем для других микроконтроллеров. А это выигрыш в размере полученного кода (в объеме памяти на кристалле) и в скорости работы микроконтроллера;
  • микроконтроллеры AVR имеют 32 регистра, напрямую подключенных к арифметико-логическому устройству. Это значительно уменьшает размер программ. В других микроконтроллерах, как правило, для осуществления, например, сложения один из операндов обязательно должен находиться в специальном регистре — аккумуляторе. Таким образом, необходимо сначала его туда занести, затем после выполнения операции нужно переписать из аккумулятора результат в регистр для его хранения. В итоге получается уже три команды. В микроконтроллерах AVR то же самое займет всего одну команду;
  • небольшое потребление энергии и наличие нескольких режимов работы с пониженным потреблением энергии делает эти микроконтроллеры идеальными для применения в конструкциях, питающихся от батареек;
  • узлы PWM (широтно-импульсная модуляция), таймеры/счетчики, аналоговый компаратор и последовательный порт UART встроены в микроконтроллеры и могут управляться с помощью прерываний, что значительно упрощает работу с ними;
  • имеются относительные команды переходов и ветвлений, что позволяет получать перемещаемый код;
  • отсутствует необходимость переключать страницы памяти (в отличие, например, от микроконтроллеров PIC);
  • все микроконтроллеры AVR имеют электрически перепрограммируемую постоянную память данных EEPROM.

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

Микроконтроллеры AVR семейства Mega имеют производительность до 16 MIPS, FLASH-память программ до 256 кбит, память данных EEPROM 512 байт … 4 кбайт, оперативную память данных SRAM 1–4 кбит, встроенный 10‑разрядный 8‑канальный АЦП, аппаратный умножитель 8×8 и предназначены для сложных приложений, требующих большого объема памяти.

В Proteus 8.1 предусмотрена возможность работы со следующими представителями этого семейства: ATmega128/1280/1281/1284P, ATmega16/162/164P/165. В этой статье работа с микроконтроллерами AVR будет рассмотрена на примере микросхем ATmega128 и ATmega16. Аппаратные характеристики данных микроконтроллеров указаны в таблице 2.

Таблица 2. Аппаратные характеристики микроконтроллеров ATmega128 и ATmega16

ATmega16

ATmega128

FLASH-память программ, кбайт

16

128

Память данных EEPROM, байт

512

4096

ОЗУ данных SRAM, кбайт

1

4

Количество команд

130

133

Число линий ввода/вывода

32

53

Количество прерываний

17

27

Количество внешних прерываний

3

8

SPI-интерфейс

1

1

Последовательный интерфейс UART

1

2

Интерфейс TWI, совместимый с I2C

1

1

Аппаратное умножение

есть

есть

8-разрядный таймер

2

2

16-разрядный таймер

1

2

ШИМ

3

6+2

Сторожевой таймер

есть

есть

Таймер реального времени RTC

есть

есть

Аналоговый компаратор

есть

есть

10-разрядный АЦП, число каналов

8

8

Встроенный генератор

есть

есть

Детектор снижения напряжения

есть

есть

Внутрисхемное программирование

есть

есть

Самопрограммирование

есть

есть

Напряжение питания, В

4–5,5

4–5,5

Тактовая частота, МГц

0–16

0–16

Тип корпуса

40-Pin DIP

64-Pin TQFP

44-Pin TQFP

Выводы микроконтроллера ATmega16 имеют следующее назначение (рис. 1а):

  • XTAL1 — вход тактового генератора;
  • XTAL2 — выход тактового генератора;
  • RESET — вход сброса микроконтроллера;
  • PA0–PA7 (ADC0–ADC7) — 8‑битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами (вход АЦП);
  • PB0–PB7 — 8‑битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами;
  • PC0–PC7 — 8‑битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами;
  • PD0–PD7 — 8‑битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами;
  • AREF — вход опорного напряжения для АЦП;
  • AVCC — вывод источника питания АЦП;
  • VCC — вывод источника питания;
  • GND — общий вывод.

Назначение выводов микроконтроллера

Рис. 1. Назначение выводов микроконтроллера:
а) AVR ATmega16;
б) AVR ATmega128

Выводы микроконтроллера ATmega128 имеют следующее назначение (рис. 1б):

  • XTAL1 — вход тактового генератора;
  • XTAL2 — выход тактового генератора;
  • RESET — вход сброса микроконтроллера;
  • PA0–PA7 (AD0–AD7) — 8‑битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами (мультиплексированная шина адреса/шина данных для внешнего ОЗУ);
  • PB0–PB7 — 8‑битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами;
  • PC0–PC7 (А8–А15) — 8‑битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами (шина адреса для внешнего ОЗУ);
  • PD0–PD7 — 8‑битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами;
  • PЕ0–PЕ7 — 8‑битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами;
  • PF0–PF7 (ADC0–ADC7) — 8‑битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами (вход АЦП);
  • PG0–PG4 — 5‑битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами;
  • PEN — разрешение программирования;
  • AREF — вход опорного напряжения для АЦП;
  • AVCC — вывод источника питания АЦП;
  • VCC — вывод источника питания;
  • GND — общий вывод.

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

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

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

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

Рассмотрим более подробно работу с мастером New Project Wizard. Для этого запустим его командой File/New Project основного меню Proteus (рис. 2). В результате будет открыто первое окно мастера New Project Wizard: Start, в котором предлагается выполнить установку переключателя в одну из позиций. Выбор позиции From Development Board предусматривает использование для создания нового проекта одной из уже имеющихся разработок, поставляемых вместе с Proteus. В случае выбора в окне New Project Wizard: Start позиции New Project работа мастера будет состоять из шести шагов, на первом из которых (рис. 3а) пользователю предлагается указать название нового проекта (поле Name) и его месторасположение на диске компьютера (поле Path). После того как соответствующие поля заполнены, следует нажать на кнопку Next, в результате будет открыто следующее окно мастера New Project Wizard: Schematic Design (рис. 3б). На втором шаге мастер предложит указать необходимость создания разработки ISIS посредством установки переключателя в одну из двух позиций:

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

Стартовая страница программы Proteus

Рис. 2. Стартовая страница программы Proteus

Мастер New Project Wizard

Рис. 3. Мастер New Project Wizard:
а) окно New Project Wizard: Start;
б) окно New Project Wizard: Schematic Design;
в) окно New Project Wizard: PCB Layout
г) окно New Project Wizard: PCB Layer Usage;
д) окно New Project Wizard: Firmware;
е) окно New Project Wizard: Summary

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

  • 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 (рис. 3г), на котором выполняется настройка слоев платы.

Пятый шаг работы мастера New Project Wizard: Firmware (рис. 3д) — выбор микроконтроллера. На этом этапе путем установки переключателя в нужную позицию задается необходимость использования микроконтроллера в проекте схемы:

  • No Firmware Project — микроконтроллер не используется;
  • Create Firmware Project — создать проект на основе микроконтроллера.
  • В случае выбора второго параметра будут доступны следующие поля:
  • Family — семейство микроконтроллера (в нашем случае выбираем AVR);
  • Controller — модель микроконтроллера (в нашем случае ATmega128 или ATmega16);
  • Compiler — инструменты ассемблера/компилятора. В нашем случае будут доступны для выбора следующие инструменты: AVRASM (Proteus) — используется для компиляции ассемблерного кода программы инициализации микроконтроллера, WinAVR — используется для компиляции программы, написанной на языке С;
  • Create Quick Start Files — автоматическое создание заготовки программного кода для микроконтроллера.

Кнопка Compilers в поле Compiler применяется для добавления компилятора.

Шестой шаг работы мастера — подведение итогов. В окне New Project Wizard: Summary (рис. 3е) выводится вся информация о создаваемом проекте. Просмотрите внимательно настройки проекта, и если вас все устраивает, нажмите кнопку Finish для окончания работы с мастером. В противном случае вернитесь при помощи кнопки Back к предыдущим шагам мастера для внесения изменений в настройки проекта.

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

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

Результаты работы мастера New Project Wizard

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

Более подробно работа с мастером уже была рассмотрена в [3].

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

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

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

Библиотека микроконтроллеров семейства AVR программы Proteus

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

Для того чтобы добавить микросхему микроконтроллера в рабочее поле проекта, необходимо в левой верхней части окна 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 (рис. 6). Данное окно открывается путем двойного щелчка левой кнопки мыши по уже размещенному в рабочем поле программы символу компонента.

Окно Edit Component

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

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

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

Окно New Firmware Project

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

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

Моделирование схемы, включающей микроконтроллер, и компиляция программного кода

Для наглядной демонстрации работы программы инициализации микроконтроллера соберем простую схему, состоящую из микросхемы ATmega16, двух резисторов и двух светодиодов. Для управления светодиодами в схеме использованы два вывода микроконтроллера — PD0 и PD1.

Для того чтобы добавить светодиод в рабочее поле проекта, необходимо вызвать окно Pick Devices (рис.  8) и в поле Category выбрать из списка библиотеку Optoelectronics, в поле Sub-category выбрать строку LEDs, а в поле Results — строку LED-RED, затем нажать кнопку ОК. В результате окно Pick Devices будет закрыто, а символ светодиода будет прикреплен к курсору мыши, при помощи которого необходимо поместить символ в нужное место на схеме — щелкнуть в определенном месте схемы левой кнопкой мыши столько раз, сколько светодиодов требуется разместить. Для добавления резисторов используйте библиотеку Resistors. Сопротивление резисторов можно установить в поле Resistance окна настроек Edit Component (рис. 9), вызвав его двойным щелчком левой кнопки мыши по выбранному резистору на схеме. В нашем случае это значение 150 Ом.

Выбор светодиода в окне Pick Devices

Рис. 8. Выбор светодиода в окне Pick Devices

Окно настроек резистора Edit Component

Рис. 9. Окно настроек резистора Edit Component

Также в демонстрационную схему следует добавить два символа «земли». Сделать это можно посредством выбора при помощи левой кнопки мыши на панели TERMINALS (рис. 10) строки с названием GROUND. Для того чтобы открыть панель TERMINALS, нужно на левой панели редактора ISIS выбрать кнопку Terminals Mode.

Панель TERMINALS

Рис. 10. Панель TERMINALS

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

Для проверки работы микроконтроллера на языке программирования С была написана несложная программа, которая заставляет поочередно мигать светодиоды:

#include <inttypes.h> // подключение библиотек функций
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
int main()
{
    DDRD=0xff           // инициализация порта PD
    PORTD=0x00          // порт PD работает на вывод данных
    while(1)            // бесконечный цикл
    {PORTD=0b00000001   // вывод логической 1
                              // на линию PD0 порта,
                              // на линии PD1 — логический 0
        _delay_ms(1000)       // задержка в 1 секунду
        PORTD=0b00000010      // вывод логической 1
                              // на линию PD1 порта,
                              // на линии PD0 — логический 0
        _delay_ms(1000)       // задержка в одну секунду
    }}

После того как в рабочей области проекта собрана схема (рис. 11), а на вкладке Source Code введен код программы (рис. 12а), можно запускать моделирование.

Демонстрационная схема с использованием микроконтроллера ATmega16 и светодиодов

Рис. 11. Демонстрационная схема с использованием микроконтроллера ATmega16 и светодиодов

Программа инициализации микроконтроллера ATmega16 на вкладке Source Code, написанная на языке программирования

Рис. 12. Программа инициализации микроконтроллера ATmega16 на вкладке Source Code, написанная на языке программирования:
а) С;
б) ассемблер

Процесс моделирования запускается при помощи кнопки Run the simulation, которая находится в левом нижнем углу окна программы. Для того чтобы временно приостановить процесс симуляции, используйте кнопку Pause the simulation, or start up at time 0 if stopped (кнопка находится в левом нижнем углу окна программы). Остановить моделирование можно при помощи кнопки Stop the simulation.

Напишем аналогичную программу на языке программирования ассемблер (рис. 12б):

ldi R16, 0b11111111
out DDRD, R16         ; инициализация порта PD,
                      ; порт работает на вывод данных
Loop:                 ; начало цикла
clr R16               ; очистка регистра
ldi R16, 0b00000001   ; загрузка числа в регистр
out PortD, R16        ; вывод числа в порт
nop                   ; задержка
nop
nop
nop
clr R16               ; очистка регистра
ldi R16, 0b00000010   ; загрузка нового числа в регистр
out PortD, R16        ; вывод числа в порт
nop                   ; задержка
nop
nop
nop
rjmp Loop             ; бесконечный цикл

В результате, в том случае если компилятор в листинге программы не обнаружит ошибок, на диске вашего компьютера в рабочей папке проекта будут созданы *.elf-, *.hex— и *.c‑файлы при компиляции программы инициализации микроконтроллера, написанной на языке С с помощью компилятора WinAVR, и *.obj— и *.asm-файлы при компиляции ассемблерного кода с помощью компилятора AVRASM.

Отладка программы инициализации выполняется на вкладке AVR Source Code, которую можно открыть командой основного меню редактора ISIS — Debug/Start VSM Debugging (рис. 13).

Вкладка AVR Source Code, отладка программы, написанной на языке

Рис. 13. Вкладка AVR Source Code, отладка программы, написанной на языке:
а) С;
б) ассемблер

Также для прошивки микроконтроллера можно использовать файл, скомпилированный при помощи стороннего компилятора. Для этого в рабочем поле проекта щелкните два раза левой кнопкой мыши по символу микроконтроллера на схеме и в открывшемся окне Edit Component в поле Program File нажмите кнопку Open. В результате будет открыто окно проводника Windows (рис. 14), в котором необходимо выбрать на диске компьютера файл машинного кода, подготовленного для загрузки в память программ, и нажать кнопку «Открыть». После выполненных действий в поле Program File окна Edit Component будет прописан путь к этому файлу.

Выбор на диске компьютера файла машинного кода, скомпилированного при помощи стороннего компилятора

Рис. 14. Выбор на диске компьютера файла машинного кода, скомпилированного при помощи стороннего компилятора

Отчет об ошибках, полученных в результате компиляции программного кода, отображается в нижней части вкладки Source Code на панели VSM Studio Output (рис. 15).

Отчет об ошибках, полученных в результате компиляции программного кода

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

Состояние памяти и регистров микроконтроллера можно просмотреть при помощи следующих команд основного меню редактора ISIS:

  • Debug/AVR CPU Registers (рис. 16а);
  • Debug/AVR SRAM (рис. 16б);
  • Debug/AVR Program Memory (рис. 16в).

Состояние

Рис. 16. Состояние:
а) регистров;
б) памяти SRAM;
в) памяти программ микроконтроллера

Проанализируем работу демонстрационной схемы, представленной на рис. 11. На вкладке Source Code программным путем были даны указания микроконтроллеру вывести на линии порта PD0 и PD1 значения логической 1 и 0 соответственно, которые удерживаются на этих линиях при помощи команды задержки. Затем на линии порта PD0 и PD1 выводятся значения логического 0 и 1 соответственно, потом после задержки выполнение этого фрагмента программы повторяется.

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

Ошибки, возникшие в процессе разработки схемы с использованием микроконтроллера AVR в Proteus

В процессе симуляции кода программы, написанного на языке С, может возникнуть ошибка AVR: Program property is not defined (рис. 17а), причиной которой может стать отсутствие инсталлированного компилятора WinAVR. Открыть окно Compilers, в котором отображается список установленных в системе компиляторов, можно при помощи команды System/Compilers Configuration основного меню редактора ISIS (при этом необходимо находиться на вкладке Source Code). Компилятор установлен, если в поле Installed в строке с его названием указано значение Yes, иначе в этом поле находится кнопка Download, при помощи которой и выполняется инсталляция. Как видно на рис. 18a, в нашем случае компилятор WinAVR не установлен.

Ошибки симуляции кода программы, написанного на языке С

Рис. 17. Ошибки симуляции кода программы, написанного на языке С:
а) ошибка отсутствия установленного в системе компилятора;
б) ошибка инициализации функции

Окно Compilers

Рис. 18. Окно Compilers:
а) компилятор WinAVR не установлен;
б) процесс загрузки;
в) компилятор WinAVR установлен

После установки компилятора при запуске симуляции проекта в нашем примере возникла ошибка implicit declaration of function “delay_ms” (рис. 17б), которая сообщает о том, что компилятор не может распознать функцию delay_ms. Поскольку функция delay_ms объявлена в файле delay.h, то для решения этой ошибки найдем данный файл на диске компьютера (в нашем случае он находится по адресу C:/WinAVR‑20100110/avr/include/util/) и откроем его (рис. 19). Просмотрев програм-мный код файла delay.h, мы обнаружили, что в нем функция delay_ms имеет название _delay_ms. Устранить возникшую ошибку можно двумя способами:

  1. В редакторе ISIS на вкладке Source Code в коде программы изменить название функции с delay_ms на _delay_ms.
  2. В коде программы в файле h изменить название функции с _delay_ms на delay_ms.

Описание функции delay_ms в файле delay.h

Рис. 19. Описание функции delay_ms в файле delay.h

Установка компилятора

Для запуска инсталляции компилятора WinAVR необходимо нажать в окне Compilers в строке WinAVR на кнопку Download и дождаться окончания загрузки (рис. 18б). После чего запустится программа установки, в процессе которой в диалоговом режиме пользователю будет предложено задать настройки устанавливаемого компилятора. В первую очередь программа установки предлагает выбрать языковой пакет (рис. 20), после чего будет запущен мастер, работа которого состоит из пяти шагов:

  • окно приветствия (рис. 21а);
  • условия лицензионного соглашения (рис. 21б);
  • выбор директории установки компилятора (рис. 21в);
  • выбор компонентов для установки (рис. 21г);
  • завершение работы мастера (рис. 21д).

Выбор языкового пакета программы установки компилятора WinAVR

Рис. 20. Выбор языкового пакета программы установки компилятора WinAVR

Мастер установки компилятора WinAVR

Рис. 21. Мастер установки компилятора WinAVR:
а) окно приветствия;
б) условия лицензионного соглашения;
в) выбор директории установки компилятора;
г) выбор компонентов для установки;
д) завершение работы мастера

После окончания инсталляции в окне Compilers в строке WinAVR в поле Compiler Directory будет прописан путь к директории установленного компилятора, а в поле Installed указано значение Yes (рис. 18в).

Работа с универсальным синхронно-асинхронным приемопередатчиком USART

Все микроконтроллеры семейства Mega имеют в своем составе от одного до четырех модулей универсального синхронно-асинхронного приемопередатчика USART. Отметим, что в микроконтроллере ATmega16 присутствует один такой модуль, а в ATmega128 — два. Все модули приемопередатчиков обеспечивают полнодуплексный обмен по последовательному каналу. Длина посылки может составлять от 5 до 9 бит. Во всех модулях в обязательном порядке присутствуют схемы контроля и формирования бита четности. Для взаимодействия с программой предусмотрены три прерывания, запрос на генерацию которых формируется при наступлении следующих событий: «передача завершена», «регистр данных передатчика пуст» и «прием завершен».

Выводы микроконтроллера, используемые модулями USART, являются линиями ввода/вывода общего назначения. К примеру, в микроконтроллере ATmega16 модулем USART используются линии PD0 (RXD) — вход USART, PD1 (TXD) — выход USART, PB0 (XCK) — вход/выход внешнего тактового сигнала USART.

Модуль состоит из трех основных частей: блока тактирования, блока передатчика и блока приемника. Буферные регистры приемника и передатчика располагаются по одному адресу пространства ввода/вывода и обозначаются как регистр данных UDR. В этом регистре хранятся младшие 8 бит принимаемых и передаваемых данных. При чтении регистра UDR выполняется обращение к буферному регистру приемника, при записи — к буферному регистру передатчика.

Для управления модулем USART используется три регистра: UCSRA, UCSRB, UCSRC. Работа передатчика разрешается установкой в единицу бита TXEN регистра UCSRB. При установке бита вывод TXD подключается к передатчику USART и начинает функционировать как выход независимо от установок регистров управления портом. Если используется синхронный режим работы, то переопределяется также функционирование вывода XCK. Передача инициируется записью передаваемых данных в буферный регистр передатчика — регистр данных UDR. После этого данные пересылаются из регистра UDR в сдвиговый регистр передатчика. После пересылки слова данных в сдвиговый регистр флаг UDRE регистра UCSRA устанавливается в 1, что означает готовность передатчика к получению нового слова данных. В этом состоянии флаг остается до следующей записи в буфер.

Выключение передатчика осуществляется сбросом бита TXEN регистра UCSRB. Если в момент выполнения этой команды выполнялась передача, сброс бита произойдет только после завершения текущей и отложенной передач, то есть после очистки сдвигового и буферного регистров передатчика. При выключенном передатчике вывод TXD может использоваться как контакт ввода/вывода общего назначения.

Работа приемника разрешается установкой бита RXEN регистра UCSRB. При установке бита вывод RXD подключается к приемнику USART и начинает функционировать как вход независимо от установок регистров управления портом. Если используется синхронный режим работы, переопределяется также функционирование вывода XCK.

Выключение приемника осуществляется сбросом бита RXEN регистра UCSRB. В отличие от передатчика приемник выключается сразу же после сброса бита, а значит, кадр, принимаемый в этот момент, теряется. Кроме того, при выключении приемника очищается его буфер, то есть теряются также все непрочитанные данные. При выключенном приемнике вывод RXD может использоваться как контакт ввода/вывода общего назначения.

Рассмотрим работу модуля USART на конкретном примере. Передадим программным способом на экран виртуального терминала комбинацию символов ABC. Для чего создадим в Proteus новый проект с использованием микроконтроллера ATmega16 и добавим в рабочее поле виртуальный терминал, а также виртуальный осциллограф для просмотра осциллограммы работы USART.

Виртуальные приборы можно добавить посредством выбора при помощи левой кнопки мыши на панели INSTRUMENTS (рис. 22) строки с названием VIRTUAL TERMINAL (для виртуального терминала) и OSCILLOSCOPE (для виртуального осциллографа). Для того чтобы открыть панель INSTRUMENTS, необходимо на левой панели редактора ISIS выбрать кнопку Instruments Mode.

Панель INSTRUMENTS

Рис. 22. Панель INSTRUMENTS

Подсоединим вывод TXD микроконтроллера к выводу RXD виртуального терминала, а также к каналу А осциллографа.

В окне настроек микроконтроллера Edit Component установим следующие параметры (рис. 23):

  • поле CKOPT (Oscillator Options) — (1) Unprogrammed;
  • поле BOOTRST (Select Reset Vector) — (1) Unprogrammed;
  • поле CKSEL Fuses — (1111) Ext.Crystal High Freq.;
  • поле Boot Loader Size — (00) 1024 words. Starts at 0x1C00;
  • поле SUT Fuses — (11);
  • поле Advanced Properties — Clock Frequency 8000000.

Окно настроек микроконтроллера ATmega16

Рис. 23. Окно настроек микроконтроллера ATmega16

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

Для проверки работы собранной схемы (рис. 24) на языке программирования ассемблер была написана следующая программа (рис. 25):

.include “m16def.inc”  ; подключение стандартного
                       ; заголовочного файла для ATmega16
.equ fCK = 8000000     ; частота в герцах
.equ BAUD = 9600       ; скорость для USART в бодах
.equ UBRR_value = (fCK/(BAUD*16)) — 1   ; рассчитываем значение
                                        ; для регистра UBRR
main:                  ; Код основной программы
rcall init_USART
ldi R16,0b01000001     ; двоичный код символа 'A'
rcall USART_send
ldi R16,0b01000010     ; двоичный код символа 'B'
rcall USART_send
ldi R16,0b01000011     ; двоичный код символа 'C'
rcall USART_send
loop: rjmp loop
init_USART:            ; Подпрограмма инициализации USART
ldi R16,high(UBRR_value)   ; устанавливаем скорость 9600 бод
out UBRRH,R16
ldi R16,low(UBRR_value)
out UBRRL,R16
ldi R16,(1<<TXEN)      ; разрешаем работу передатчика
out UCSRB,R16
ldi R16,(1<< URSEL)|(1<< UCSZ0)|(1<< UCSZ1)
out UCSRC,R16          ; устанавливаем режим 8 бит данных,
                       ; без проверки четности, асинхронный режим
ret
USART_send:
sbis UCSRA,UDRE        ; ждем, пока бит UDRE регистра UCSRA
                       ; не будет пуст
rjmp USART_send
out UDR,R16            ; посылаем байт по USART,
                       ; кладем данные в регистр UDR
ret

Схема передачи данных при помощи модуля USART микроконтроллера ATmega16

Рис. 24. Схема передачи данных при помощи модуля USART микроконтроллера ATmega16

Код программы инициализации микроконтроллера ATmega16 на вкладке Source Code

Рис. 25. Код программы инициализации микроконтроллера ATmega16 на вкладке Source Code

После того как в рабочей области проекта собрана схема, а на вкладке Source Code введен код программы, можно запускать моделирование. Как видно на рис. 24, разработанный проект функционирует верно — на экран виртуального терминала была выведена указанная в коде программы комбинация символов. Осциллограмма работы USART показана на рис. 26.

Осциллограмма работы модуля USART микроконтроллера ATmega16

Рис. 26. Осциллограмма работы модуля USART микроконтроллера ATmega16

Рассмотрим передачу данных по интерфейсу USART в микроконтроллере ATmega128. Для чего напишем аналогичную программу передачи символов ABC на экран виртуального терминала на языке программирования С.

#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
#define F_CPU 8000000    // Рабочая частота контроллера
#define BAUD 9600L       // Скорость обмена данными
#define UBRRL_value (F_CPU/(BAUD*16))-1       // Согласно заданной
                         // скорости подсчитываем значение для регистра UBRR
void init_USART() {
    UBRR0L = UBRRL_value;       // Младшие 8 бит UBRRL_value
    UBRR0H = UBRRL_value >> 8;  // Старшие 8 бит UBRRL_value
    UCSR0B = (1<<TXEN0);        // Бит разрешения передачи
    UCSR0C = (1<< UCSZ00)|(1<< UCSZ01); }                   // Устанавливаем
                                                            // формат 8 бит данных
void send_UART(char value) {
    while(!( UCSR0A & (1 << UDRE0)));   // Ожидаем, когда очистится
                                        // буфер передачи
    UDR0 = value; }  // Помещаем данные в буфер, начинаем передачу
int main(void)
{
    init_USART();          // инициализация USART
    send_UART(0b01000001); // посылаем двоичный код символа 'A'
    send_UART(0b01000010); // посылаем двоичный код символа 'B'
    send_UART(0b01000011); // посылаем двоичный код символа 'C'
while(1)
{ _delay_ms(1000); } }

Здесь необходимо отметить, что в микроконтроллере ATmega128 два модуля USART: USART0, USART1. Таким образом, при написании программного кода необходимо указывать, к регистрам какого модуля USART мы обращаемся. Если при работе с интерфейсом USART микроконтроллера ATmega16 мы обращались к регистру данных по имени UDR, то при работе, к примеру, с модулем USART0 микроконтроллера ATmega128 к регистру данных следует обращаться по имени UDR0.

На рис. 27 показана схема передачи данных при помощи модуля USART0 микроконтроллера ATmega128. Код программы инициализации микроконтроллера на вкладке Source Code представлен на рис. 28. Hex-файл машинного кода, полученный в результате компиляции программы, представлен на рис. 29. На рис. 30 показано окно настроек микроконтроллера ATmega128.

Схема передачи данных при помощи модуля USART0 микроконтроллера ATmega128

Рис. 27. Схема передачи данных при помощи модуля USART0 микроконтроллера ATmega128

Код программы инициализации микроконтроллера ATmega128 на вкладке Source Code

Рис. 28. Код программы инициализации микроконтроллера ATmega128 на вкладке Source Code

Нex-файл машинного кода

Рис. 29. Нex-файл машинного кода

Окно настроек микроконтроллера ATmega128

Рис. 30. Окно настроек микроконтроллера ATmega128

Особенности работы с портами ввода/вывода данных

Микроконтроллеры AVR имеют в своем составе от одного до семи портов ввода/вывода, которые служат для обмена информацией с внешними устройствами. Для управления каждым портом ввода/вывода используется три специальных регистра: PORTx, DDRx и PINx, где x — это имя порта. Например, для порта D имена регистров управления будут такими: PORTD, DDRD и PIND. Назначение этих регистров следующее:

  • PORTx — регистр данных (используется для вывода информации);
  • DDRx — регистр направления передачи информации;
  • PINx — регистр ввода информации.

Отдельные разряды этих регистров имеют свои имена. Разряды регистра PORTx именуются как Рхn, где n — это номер разряда. К примеру, разряды регистра PORTD будут именоваться следующим образом: PD0, PD1, PD2–PD7. Разряды порта DDRx именуются как DDxn (для порта С — DDС0, DDС1–DDС7). Разряды порта PINx именуются как PINxn (для порта С — PINС0, PINС1–PINС7).

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

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

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

Порты ввода/вывода микроконтроллеров AVR в режиме ввода информации могут при необходимости подключать к каждому выводу порта внутренний нагрузочный резистор. Внутренний резистор позволяет значительно расширить возможности порта. Такой резистор создает вытекающий ток для внешних устройств, подключенных между выводом порта и общим проводом. Благодаря этому резистору упрощается подключение внешних контактов и кнопок. Обычно контакты требуют внешнего резистора, без которого теперь можно обойтись. Также подтягивающий резистор позволяет избежать чтения с входа различных помех, что повышает надежность устройства в целом. Включением и отключением внутренних резисторов управляет регистр PORTx, если порт находится в режиме ввода. В таблице 3 показаны все режимы работы порта.

Таблица 3. Конфигурирование порта ввода/вывода

DDxn

Pxn

Режим

Резистор

Примечание

0

0

Вход

Отключен

Вывод отключен от схемы

0

1

Вход

Подключен

Вывод является источником тока

1

0

Выход

Отключен

На выходе 0

1

1

Выход

Отключен

На выходе 1

Программирование микроконтроллеров ATmega16 и ATmega128 на языке ассемблер

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

При написании кода программы на языке ассемблер для микроконтроллера AVR необходимо владеть синтаксисом этого языка. Система команд микроконтроллеров AVR насчитывает 130 базовых команд для ATmega16 и 133 для ATmega128, которые разделены по функциональному признаку на шесть групп:

  • команды пересылки данных;
  • арифметических операций и сдвига;
  • логических операций;
  • команды передачи управления;
  • команды операций с битами;
  • команды управления системой.

Особенности мнемонической записи большинства команд в AVR-ассемблере такие же, как и в любых других ассемблерах. Отметим, что AVR-ассемблер регистров букв не различает, в том числе и в присвоенных программистом именах переменных, констант и меток. Примечания в тексте программы можно добавлять в конце строки после знака «;». Все, что расположено после точки с запятой и до знака конца строки, игнорируется, поэтому комментарий может быть и на русском языке. Длина строки ограничена 120 символами. Если необходимо продлить комментарий на следующую строку, то эту строку нужно опять начинать со знака «;».

Шестнадцатеричные числа можно записывать двояким способом: как в языке С (0x0А) или как в языке Паскаль ($0А). «Интеловская» форма записи (0Ah) не допускается. Двоичные числа записываются как в языке С (0b00001010).

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

Окончание статьи.

Литература

  1. ISIS Help. Labcenter Electronics, 2014.
  2. Белов А. В. Самоучитель разработчика устройств на микроконтроллерах AVR. СПб.: Наука и техника, 2008.
  3. Филатов М. Проектирование схем электрических принципиальных с использованием микроконтроллеров в программной среде Proteus 8.1 // Компоненты и технологии. 2015. № 7.
  4. Голубцов М. С. Микроконтроллеры AVR: от простого к сложному. М.: СОЛОН-Пресс, 2003.
  5. Евстифеев А. В. Микроконтроллеры AVR семейства Mega. Руководство пользователя. М.: Издательский дом «Додэка-XXI», 2007.
  6. Евстифеев А. В. Микроконтроллеры AVR семейства Tiny и Mega фирмы ATMEL. М.: Издательский дом «Додэка-XXI», 2004.
  7. Гололобов В. Н. Экскурсия по электронике. М.: СамИздат, 2008.
  8. Ревич Ю. Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера. 2‑е издание. СПб.: БХВ‑Петербург, 2011.

Понравилась статья? Поделить с друзьями:
  • Руководство по all radio
  • Сайт руководства локотех
  • Как сделать зайчика из салфетки своими руками пошаговая инструкция
  • Празицид суспензия плюс для котят дозировка инструкция по применению
  • Нормативный документ по разработке инструкций по охране труда