Совет - умейте правильно находить информацию!
|
Задача - упражнение 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
СПОНСОР - социальная сеть Hi5.LT