Курс AVR123.nm.ru


Electronic Banner Exchange (ElBE)
 


 

 
         
 

 

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

 

 

поиск   GOOGLE   по  Краткому Курсу AVR

 

Книги и учебники по микроконтроллерам  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.

 

 

 

 

 

 

Сайт управляется системой uCoz