Только в этом месяце - скидки на паяльники и электронику с нашими кодами (123avr.com) : |
|
Совет - умейте правильно находить информацию!
|
Задача упражнение 6 Цель
задачи : 2)
Сконфигурировать таймер_0 МК ATmega16 и
создать программу прерывающуюся 50 раз в
секунду от переполнения таймера и
отправляющую при этом пару символов с
помощью USART например через адаптер
rs232 на COM порт ПК.
Для выполнения задачи
необходимо:
- прочитать курс не оставив непонятностей. - свободное время и желание.
Работаем: Результаты будут выводится в окно "терминал" контрольной панели (Control Panel) эмулятора - старший байт (HB), затем младший (LB). Окно "терминал" эмулирует работу COM порта ПК. Результат каждого измерения будет выводиться в новой строке. - сохраните файлы задачи 01 из папки work - затем очистите ее. 1) Запускаем компилятор ICC
2) нажмите иконку запуска мастера "Application Builder"
Это очень удобный инструмент! Он
позволяет создать Си код для
конфигурирования МК под вашу задачу даже не зная
досконально ДШ и МК.
- используемый МК -> М16 (значит ATmega16) - частоту кварца 3,6864 МГц Такие "не круглые" частоты используют для точного задания стандартных скоростей COM портов ПК. В разделе USART ДШ есть таблица где их можно найти. - комментарий
можете добавить по своему усмотрению.
4) в секции Potrs (порты МК) настроим направление работы (вход или выход) отдельных ножек МК. По умолчанию - т.е. после включения питания МК или после сброса по уровню "0" на "Reset" - все ножки МК являются входами с высоким сопротивлением (порядка 10 мегаОм и более). Поэтому в
мастере, в поле "Direction" изначально
находятся буквы "I" от слова "Input"
= Вход. Это соответствует нулям в
соответствующих битах регистра DDRx для
порта X. Соответственно запись в
соответствующий бит числа "1" (установка
бита) делают ножку МК Выходом. И на этой
ножке будет уровень определяемый
значением бита в регистре PORTx - эти
значения отражаются в поле Value.
Значения в клеточках меняйте кликая мышкой. На рисунке выше сделана такая настройка ножек МК: PA0 - вход с подтяжкой (pull-up) PA1 - вЫход и "0" на ножке. PA2 - вЫход и "1" на ножке.
Вы можете присвоить свои названия ножкам МК - кликните правой кнопкой мыши на бит_2 и на меню кликните левой кнопкой:
В открывшимся окне введите название - желательно связанное с функциональным назначением ножки. Я планирую использовать PA2 для выдачи диагностического сигнала поэтому назову:
И клик "Ок" 5) в секции Timer0 настроим таймер:
Теперь таймер_0 будет "тикать" - т.е. добавлять к числу в регистре TCNT0 единицу каждые 1024 периода колебаний кварца. - поставим галочку "по переполнению прерывание"
6) в секции UART настроим USART МК на передачу данных в обычном формате COM порта ПК 8N1 и выберем довольно высокую скорость - 115200 бод в сек. вот так:
7) под кнопочкой Options выбираем и кликаем:
добавить функцию main() в текст программы.
8) Нажимаем кнопку "ОК" - сгенерированный текст программы на языке Си появился в рабочем окне компилятора.
Мы
получили программу на языке Си конфигурирующую МК
под нашу задачу даже не глядя
в ДШ - великолепно! 9) Создайте рабочую папку для проекта: z3icc_vmlab и сохраните в ней полученный текст программы в виде файла icc.c
10) Теперь нужно создать проект:
11) Включим в созданный проект файл .c исходным текстом программы:
затем:
добавить файл:
12) Настроим проект:
правда из настроек всего то выбрать нужный тип МК:
Так как больше изменений не требуется - жмем "ОК" УРА ! у нас все
готово для компиляции
13) Кликаем по пиктограмме "построить проект":
Компилятор
подумает чуток и выдаст сообщение о результате компиляции:
Настроим
компилятор ICC на отображение русских букв. Откройте диалог настройки "красивости" интерфейса компилятора:
Вот он:
Выбираем русский язык:
и "ОК"
Давайте
посмотрим повнимательней #include
<iom16v.h> #include
<macros.h>
Итак, если мастер начального кода нас не подвел то после запуска МК с залитой в него программой будут происходить переполнения таймера_0 и будет вызываться соответствующая функция обработчик. Давайте дополним эту функцию изменением уровня на ножке PA2 МК - это позволит узнать о вызове функции обработки прерывания и измерить реальный период прерывания в VMLAB. И добавим вывод некоторых символов на ПК.
добавляемый текст красным :
PORTA ^= BIT(TEST_OUT); Вы должны знать из Си для МК и задачи 01 курса. Если не понятно - ПЕРЕЧИТАЙТЕ !
Внимание ! Не всегда
удается получить так Боле "тонко" можно подогнать время между прерываниями добавив в самом начале функции обработчика прерывания по переполнению таймера_0 нужное количество ассемблерных инструкций NOP. NOP делает паузу в 1 период тактирующего микроконтроллер сигнала. В рассматриваемой программе это могло бы выглядеть так:
Таким
способом можно очень точно подгонять различные временные интервалы,
а проверять результат подгонки
Теперь нужно "подрихтовать"
главную функцию:
Все ! Компилируйте ...
Результат "ОК" Давайте проверим как работает программа с помощью симулятора Visual Micro Lab Создайте в
папке z3icc_vmlab текстовый файл проекта vm.prj такого содержания:
Я очень подробно и с картинками рассмотрел симуляцию программы в VMLAB в задаче 3. Я проверил программу в симуляторе -Все работает! Вот скриншот.
С помощью
вертикальных меток - курсоров я измерил
период возникновения прерываний таймера,
он равен времени между изменениями
напряжения на ножке PA2
Как и было задано в задаче ! Обратите особое внимание на начало графиков сигналов в окне SCOPE - они точно отображают процесс настройки ножек МК и появление сигналов на них. Объясните себе эти графики !
Файлы к этой
задаче
Дальше
самостоятельно продумайте что делает, Не
должно остаться вопросов
Последнюю
компиляция я делал на ICC 7.05
|
|
Copyright 2009-2019 123avr.com