Задача -
упражнение 2
Книги и
учебники по микроконтроллерам AVR
там
Как
и чем прошить прожечь запрограммировать МК AVR читайте на странице 7
курса !
Цель
задачи:
1) получить основные навыки
работы с симулятором МК AVR - VMLAB
2)
ознакомиться со способом текстового
описания схемы симулируемого устройства
- обвязки, обвески МК - значит того что к
нему подключено. Внешние компоненты, подключенные к
выводам МК описываются текстом на SPICE подомном
языке.
3) проверить работу файла "прошивки"
z1.hex полученного в Задаче
01 - на соответствие тому, что мы
ожидали при написании исходного текста
программы на языке Си.
|
|
|
|
Поиск
по материалам Краткого курса AVR
1)
Используйте поиск Windows в папке где
сохраните курс, для того чтобы найти
нужную вам информацию.
Для
этого кликните правой кнопкой мыши (ПКМ)
по папке где сохранен у вас курс и
выбирете "найти..." в
открывшимся диалоге поиска введите
интересующее вас слово во второе
поле.
Например:
вы вводите слово "прерывания" и
запускаете поиск, в результате
получите список файлов в которых
найдено это слово.
Открывайте эти
файлы и вводите слово "прерывания"
в поиск по тексту файла - через меню "Правка"
- "Найти на этой странице".
2) Вы
можете воспользоваться поиском
GOOGLE по краткому курсу - пожалуйста
добавьте эту ссылку
в "избранное" и пользуйтесь. |
|
|
|
|
Для
выполнения задачи необходимы :
- Установленный
в директорию по умолчанию (C:\VMLAB)
программный эмулятор электроники,
симулятор МК AVR - VMLAB
- Visual
Micro Lab
- предварительно нужно изучить-попробовать
6 примеров (step01_06) из папки C:\VMLAB\tutorial -
запустить симулятор и открыть:
"проект
-> открыть проект" - файлы .prj
Посмотрите как происходит эмуляция
работы электронного
устройства
содержащего МК.
Я
очень подробно и с картинками рассмотрел симуляцию
программы в VMLAB в задаче 3.
- желательно
иметь распечатанный постатейно Help
симулятора (или хотя бы скомпилированный
в один файл) - это очень облегчит его освоение.
- Файлы полученные в Задаче
01
- свободное
время и желание.
|
|
|
|
Очень
советую: распечатать
соответствующие небольшие текстовые
файлы-описания проектов step01.prj
- step06.prj
и
"сшить" их в книжку (желательно
с распечатанным Хелпом) -
это очень
УДОБНО!
Эти распечатки будут
вашим кратким справочником по VMLABМ
|
|
|
|
|
Работаем
...
Файл проекта в эмуляторе Visual
Micro Lab - это обычный тестовый файл но
с расширением .prj -
поэтому можно создать его в любом текстовом
редакторе не запуская пока сам
симулятор. 1)
Откройте текстовый редактор - Windows'овский
notepad например - и
кликните меню
"файл" -> "сохранить как"
-> перейдите в папку C:\CVAVR\z1
в которой мы работали в Задаче
01 -> наберите осмысленное имя
файла: z2_vm
-> нажмите "Сохранить"
2) Теперь мы
должны наполнить этот файл содержанием.
Содержание буду писать на бледно желтом
фоне:
|
;
Комментарии в VMLAB пишутся ТОЛЬКО в
одну
; строчку после точки с запятой.
; Пожалуйста комментируйте свои
проекты !
; Не ленитесь. потом спасибо скажете...
; Вот
пример заголовочного комментария:
; Файл-проект для симуляции
по задаче 2
; МК как бы "прошит" файлом - z1.hex
; полученным в задаче 1
; http://proavr.narod.ru/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
|
|
|
|
Как
записывать подключение к МК других
электронных компонентов ищите и
смотрите :
- в Help симулятора
- раздел Hardware components
- в примерах симулятора:
файлы .prj
в папках AVR_demo
и tutorial
- в других задачах курса с VMLAB
Как
ПРАВИЛЬНО подключать к МК
реальные
электронные компоненты ищите и смотрите
:
там где
сказано на стр. 1 курса !
- в
ДатаШитах на компоненты и на МК,
- в АпНоутах
- в проектах
более опытных электронщиков.
Не
изобретайте велосипед!
... если ваша цель - ехать.
|
|
|
|
|
Идем
дальше...
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
Вы
можете не читать, а прослушать курс
с помощью программ читалок !
Например - Говорилка
или Digalo.
|