Страницы курса:

Уроки

Задания


index.htm
01.htm
02.htm
03.htm
04.htm
05.htm
06.htm
07.htm
08.htm
09.htm


z1.htm
z2.htm
z3.htm
z4.htm
z5.htm
z6.htm
z7.htm
z8.htm
z9.htm
z10.htm
z11.htm

New! - ФОРУМ!

Совет - умейте правильно находить информацию!


Задача - упражнение  2

Цель задачи:

  • 1) получить основные навыки работы с симулятором МК AVR - VMLAB

  • 2) ознакомиться со способом текстового описания схемы симулируемого устройства - обвязки, обвески МК - значит того что к нему подключено.   Внешние компоненты, подключенные к выводам МК описываются текстом на SPICE подомном языке.

  • 3) проверить работу файла "прошивки" z1.hex полученного в Задаче 01 - на соответствие тому, что мы ожидали при написании исходного текста программы на языке Си. 

Для выполнения задачи необходимы :

- Установленный в директорию по умолчанию (C:\VMLAB) программный эмулятор электроники, симулятор МК AVR -  VMLAB - Visual Micro Lab

- предварительно нужно изучить-попробовать 6 примеров (step01_06) из папки C:\VMLAB\tutorial - запустить симулятор и открыть:  "проект -> открыть проект" - файлы .prj  

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

  • - желательно иметь распечатанный постатейно Help симулятора (или хотя бы скомпилированный в один файл) - это очень облегчит его освоение. 

  • - Файлы полученные в Задаче 01 

  • - свободное время и желание.

  Работаем ...

Файл проекта в эмуляторе Visual Micro Lab - это обычный тестовый файл но с расширением .prj  - поэтому можно создать его в любом текстовом редакторе не запуская пока сам симулятор.

1) Откройте текстовый редактор - Windows'овский notepad например - и кликните меню 

"файл" -> "сохранить как"  -> перейдите в папку  C:\CVAVR\z1  в которой мы работали в Задаче 01 -> наберите осмысленное имя файла: 
z2_vm  -> нажмите "Сохранить"

2) Теперь мы должны наполнить этот файл содержанием. Содержание буду писать на бледно желтом фоне:
 


; Комментарии в VMLAB пишутся ТОЛЬКО в одну 
; строчку после точки с запятой.

; Пожалуйста комментируйте свои проекты !
; Не ленитесь. потом спасибо скажете...

; Вот пример заголовочного комментария:

; Файл-проект для симуляции по задаче 2

; МК как бы "прошит" файлом - z1.hex
; полученным в задаче 1
; z1.htm
;
; После включения МК - НЕгорящие
; светодиоды показывают в двоичном
; виде числа от 0 до 255. 
; (практически начиная с "1"), и далее
; опять с нуля и так по кругу...

;
; светодиоды подключены к порту_А МК


.MICRO "ATmega16" ; симулируемый МК
.TOOLCHAIN "GENERIC"
.TARGET "z1.hex" ; что "прошито" в МК
.COFF "z1.cof" ; смотри задачу 1
.SOURCE "z1__.c" ; смотри задачу 1



.POWER VDD=5 VSS=0 ; Питание +5 вольт
; VSS это GND МК - "общий" провод схемы
; относительно него измеряются напряжения.


.CLOCK 4meg ; частота кварца 4 МГц
; точнее это частот тактирования МК


; //////  ===================  ///////
;  Ввод схемы устройства по задаче 1

; нам достаточно описать пункт ж) 

; 8 светодиодов подключаются "черточками"
; на изображении диодов на схемах 
; к ножкам МК с 33 до 40. 

; остальные пункты схемы считаются 
; симулятором существующими.


; === Первый светодиод 

D1 VDD D1_NODE 
; Св. диод D1 подключить к VDD (это +5 в) 
; и к узлу D1_NODE (я дал произвольное 
;
но осмысленное название) 

R1 D1_NODE PA0 560 
; резистор R1 подключить к узлу D1_NODE 
; и к выводу PA0 МК
; номинал резистора 560 Ом
 

; =========================================
; остальные 7 светодиодов подкл. аналогично

D2 VDD D2_NODE 
R2 D2_NODE PA1 560 

D3 VDD D3_NODE 
R3 D3_NODE PA2 560

D4 VDD D4_NODE 
R4 D4_NODE PA3 560

D5 VDD D5_NODE 
R5 D5_NODE PA4 560

D6 VDD D6_NODE 
R6 D6_NODE PA5 560 

D7 VDD D7_NODE 
R7 D7_NODE PA6 560

D8 VDD D8_NODE 
R8 D8_NODE PA7 560


; =========================================
; Сигналы на ножках PA0 PA1 PA2
; будем наблюдать
; в окне виртуального 
; осцилографа - "Scope"

.PLOT V(PA0) V(PA1) V(PA2)
; Рисовать графики напряжения
; в перечисленных узлах схемы

3) Теперь скопируйте текст с желтого фона и вставьте в открытый текстовый файл и сохраните результат: 

"файл" -> "сохранить"

Опять откройте меню 

"файл" -> "сохранить как"   -> 

Вы увидите что наш файл z2_vm имеет расширение .txt   - измените его на .prj    

Всё !    Теперь у нас есть файл описания проекта для VMLAB   -  он в папке  

C:\CVAVR\z1
\z2_vm.prj  

Идем дальше...

4) Запустите VMLAB и откройте созданный проект:

Project > Open Project

Перейдите в папку задачи 1 

C:\CVAVR\z1\

и выберите файл  z2_vm.prj проекта для VMLAB 


5) Через меню View   - откройте два компонента:

SCOPE - это виртуальный запоминающий осциллограф симулятора

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

Через меню Window   - откройте (обычно оно открывается сразу при открытии проекта) окно Code - в этом окне вы увидите текст симулируемой программы. 

В нашем случае - в окне Code будет полный текст нашей программы на Си.

 

     
 

Вы сможете видеть как программа движется по исходному коду на Си по ходу симуляции !  Это исключительно удобно. Такую возможность нам дало включение в проект ссылок на файлы .cof  и .c  

в  VMLAB  вы можете симулировать и ассемблерные программы и просто прошивки - файлы  .hex (см. в примерах симулятора)

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

 
     

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

 виртуальный запоминающий осциллограф симулятора

 
6) В меню Project запустите Re-Build all ...

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

Нажатие зеленого светофора эквивалентно подаче "1" на вывод RESET  МК при включенном питании, но еще не выполнявшем программу. 

В окне Scope  появились три графика для сигналов которые мы будем наблюдать. Установите масштаб по вертикали 2 вольта на деление, а по горизонтали 50 мС

В окне Сode  появилось серое поле слева и зеленые квадратики напротив исполняемых строк кода программы на Си - кликнув по такому квадратику мы можем поставить точку останова программы. подробнее см. задачу 8.

Разместите 3 окна и Control Panel на экране 
компьютера так чтобы видеть их все.

7) Нажмите "светофор" для запуска симуляции программы. 

Программа запустится и остановиться - в окне Messages  появится сообщение. 

Это симулятор сообщает свое мнение "как  бы сделал он делал" - плюем на него и опять нажимаем на "светофор

Симулятор опять останавливается и сообщает что произошел сброс от "сторожевого таймера МК" - мы не указали симулятору что не используем его вот он и сечет...

Опять нажимаем на "светофор" - теперь программа будет работать непрерывно, пока мы ее не остановим. 

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

Во первых не горит светодиод D1 (это ножка МК PA0), а остальные светодиоды горят - т.е. как я и говорил практически мы видим счет от 1. 

Ноль мы не увидим, так как он существует очень короткое время в начале программы, ведь в нашей программе мы делаем паузу ПОСЛЕ инкремента PORTA.

Но запоминающий осциллограф - SCOPE - позволяет нам остановить программу и посмотреть каковы были напряжения в начале ее работы !  

8) Остановите симуляцию - щелкнув красный восьмиугольник  

Перезапустите МК - кликнув по кнопке с круговой темно-синей стрелкой.  Вы как бы отключаете и затем снова подаете питание на МК но создаете "0" на ножке RESET МК - значит программа не стартует! 

Снова запустите симуляцию, кликнув светофор и затем кликнув еще 2 раза, дайте поработать 100 - 150 мС.  И опять остановите щелкнув красный восьмиугольник

Теперь разверните  окно SCOPE и установите разрешение по времени - 1 мкС 

Затем движком горизонтальной прокрутки переместитесь к началу осциллограмм сигналов на ножках PA0_3 и в момент соответствующий 2.1 мС от начала симуляции вы сможете увидеть что все три сигнала имели уровень лог. "0"  

Т.е. в точности по нашему алгоритму был момент когда все светодиоды горели и счет НЕгорящими светодиодами начался именно с НУЛЯ !  

Давайте измерим как долго был этот "ноль". 

 

     
 

Для измерения временного промежутка в окне SCOPE симулятора VMLAB нужно установить вертикальные курсоры 1 и 2 на границах измеряемого интервала и в поле Cursor delta time  появится значение времени между двумя курсорами.

Знайте !

Данные графиков симуляции в VMLAB между вертикальными метками вы можете сохранить в цифровом виде в файл, кнопкой "Export".  Т.е. вы можете в другой программе сделать детальный анализ данных симуляции или построить графики в нужном масштабе.

 
     



Я ставлю 100 нС шаг по времени и затем кликаю в кружочке курсора 1 и ставлю вертикальный курсор на спаде сигнала на PA0. Далее кликаю в кружке курсора 2 и ставлю его правее, на фронте  (переход из "0" в "1") сигнала. 

Как и было обещано в окне Cursor delta time показалось время: 

2.2 мкС - вот столько горели все светодиоды после старта программы МК. 

Дальше ...

9) Восстановите прежний размер окна SCOPE и установите шаг по времени 20 мС нажмите снова "светофор" для продолжения симуляции программы. 


Понаблюдайте за окнами SCOPE  и  Code и за светодиодами.

Видите ... 

     
 

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

Длины этих подсветок пропорциональны времени которое программа выполняет код этих строк.

 
     

Светодиоды переключаются себе не спеша ...


А в окне SCOPE мы видим осциллограммы сигналов соответствующие светодиодам D1_3

Напоминаю: 
сигнал "0" - светодиод ГОРИТ  
сигнал "1" - светодиод не  ГОРИТ.

Естественно наиболее часто меняется сигнал на ноге PA0 - это ж младший бит в регистре PORTA - вот он инвертируется при каждом инкременте значения в порте_А.

Логично по времени между изменениями PA0 определить реальную величину паузы отрабатываемой нашей программой зашитой в МК.

Как измерить время я описал чуть выше! 

Делайте так же.

 

     
 

Удобно поставить курсоры предварительно при существующем масштабе времени. Затем с помощью клика по Zoom in увеличить максимально место установки курсора 2 и поставить его точней. Опять вернуться к прежнему масштабу и с помощью  Zoom in увеличить максимально место установки  курсора 1 и откорректировать его положение.

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

 
     

Я измерил время 4 промежутков между изменениями 
сигнала на PA0  - оно составило 262.1 мС   

После деления на 4 получаем что уровень на PA0 меняется каждые 65525 мкС - это очень близко к рассчитанному нами в задаче 1 и ожидаемому периоду 65,536 мС.

Как точно подогнать временные промежутки отрабатываемые МК читайте в задаче 6

 
Думаю мы вправе сделать вывод что  МК работает в соответствии с ТЗ, алгоритмом и с исходной программой на Си.
Цель задачи достигнута !

Пожалуйста не ленитесь - 

выполните:

Задание по Задачам 01 и 02

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

поверьте, это не сложно но полезно сделать!

 

     
 

Для изменения Си кода программы просто запустите компилятор CodeVisionAVR (VMLAB выключать не нужно!) 
и внесите нужные изменения, затем откомпилируйте проект.

Затем перейдите в VMLAB сделайте глубокий рестарт и затем ReBuid all

Все!  Изменения внесены и все опять готово к симуляции.

Таким образом компилятор и симулятор работают одновременно в одной папке проекта и не мешают а помогают друг другу. 

 
     



Если не получается, подумай:

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

2. Если да, то понял ли ты что нужно чтобы светодиод загорелся?

3. Понял ли ты как происходит изменение: светодиод горит - не горит?

4. Подумай что надо сделать МК, что бы горящий светодиод потух?

5. Если понял, то как программно это можно сделать для одного св.диода ?

Посмотри в руководстве Си для МК какие операции 
помогут это сделать.

Выпиши на бумагу подходящие - нужно точно понимать что они делают.

6. Теперь подумай как это сделать для всех св. диодов сразу.

Решений может быть несколько, а достаточно и 
одного - оно поразительно  просто!


Файлы проекта к задаче 2 вы можете 
скачать одним архивом   z2.rar

 

Дальше ->    Задача 3  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Rating All.BY Rambler's Top100 МЕТА - Украина. Рейтинг сайтов


2009-2015 123avr.com