|
Курс AVR123.nm.ru |
|
||
|
Задача упражнение 6 Цель
задачи : 2) Сконфигурировать таймер_0
в ATmega16 и создать программу
прерывающуюся 50 раз в секунду от переполнения таймера и отправляющую при
этом пару символов с помощью USART например через
адаптер rs232 на COM порт ПК.
Для
выполнения задачи необходимо:
- прочитать курс не оставив непонятностей. - свободное время и желание.
Напомню:
Самая подробная и полная информация Вот даташит AVR на русском языке в низу той странички.
Книги и
учебники по электронике
Язык Си для МК - самое нужное там Страницы курса : заглавная 1 2 3 4 5 6 7 8 9 Задачи-упражнения курса по
AVR -
там
Работаем:
Результаты
будут выводится в окно "терминал"
контрольной панели Сохраните файлы задачи 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 настроим таймер:
- частоту переполнения - 50 Гц (50 раз в секунду) - выбираем коэф. пред-делителя частоты кварца на 1024 Теперь
таймер_0
будет "тикать" - т.е. добавлять к числу
в регистре - поставим галочку "по переполнению прерывание"
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 период тактирующего микроконтроллер сигнала . В рассматриваемой программе это могло бы выглядеть так:
Таким способом можно очень точно подгонять различные временные интервалы, а проверять результат подгонки можно в симуляторе VMLAB или PROTEUS или в реальном устройстве.
Теперь нужно подправить
главную функцию - main()
Все ! Компилируйте ...
Результат "ОК"
Давайте проверим как работает программа спомощью симулятора Visual Micro Lab
Создайте в
папке z3icc_vmlab текстовый файл проекта vm.prj
Я очень подробно и с картинками рассмотрел симуляцию программы в VMLAB в задаче 3.
Я проверил программу в симуляторе - Все работает! Вот скриншот.
С помощью
вертикальных меток - курсоров я измерил
период возникновения прерываний таймера,
он равен времени между изменениями
напряжения на ножке PA2
Как и было задано в задаче !
Обратите особое внимание на начало графиков сигналов в окне SCOPE - они точно отображают процесс настройки ножек МК и появление сигналов на них. Объясните себе эти графики !
Файлы к этой
задаче
Дальше
самостоятельно продумайте что делает, Не
должно остаться вопросов
Последнюю
компиляция я делал на ICC 7.05
Тоже успешно.
Все Задачи курса
вот здесь краткий курс КАК ! Согласование ВЧ устройств.
|
|
Сайт управляется системой uCoz
|