Только в этом месяце - скидки на паяльники и электронику с нашими кодами (123avr.com) :
![]() |
|
Совет - умейте правильно находить информацию!
|
Задача - упражнение 2Цель задачи:
Для выполнения задачи необходимы :- Установленный
в директорию по умолчанию (C:\VMLAB)
программный эмулятор электроники,
симулятор МК AVR - VMLAB
- Visual
Micro Lab Посмотрите как происходит эмуляция работы электронного устройства содержащего МК. (Я очень подробно и с картинками рассмотрел симуляцию программы в VMLAB в задаче 3.)
Работаем ...Файл проекта в эмуляторе Visual Micro Lab - это обычный тестовый файл но с расширением .prj - поэтому можно создать его в любом текстовом редакторе не запуская пока сам симулятор. 1)
Откройте текстовый редактор - Windows'овский
notepad например - и
кликните меню 2) Теперь мы
должны наполнить этот файл содержанием.
Содержание буду писать на бледно желтом
фоне:
3) Теперь скопируйте текст с желтого фона и вставьте в открытый текстовый файл и сохраните результат: "файл" -> "сохранить"
Опять
откройте меню Вы увидите что наш файл z2_vm имеет расширение .txt - измените его на .prj
Всё
! Теперь у нас есть файл
описания проекта для VMLAB - он в
папке
Идем
дальше...
|
Вы сможете видеть как программа движется по исходному коду на Си по ходу симуляции ! Это исключительно удобно. Такую возможность нам дало включение в проект ссылок на файлы .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
Copyright 2009-2019 123avr.com