Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Микроконтроллеры PIC фирмы Microchip для начинающих выпуск №28


РАССЫЛКА Микроконтроллеры PIC фирмы Microchip для начинающих
Ведущий: Алексей (pont_a@mail.ru)


Доброго времени суток, дамы и господа!!

Сегодня продолжаем рассматривать модуль захвата/сравнения CCP микроконтроллера PIC18F452! Этот выпуск будет посвящен режиму захвата.

Открываем datasheet и находим раздел «14.0 CAPTURE/COMPARE/PWM (CCP) MODULES». Находим пункт «14.3 Capture Mode». В этом пункте описан режим захвата периферийного модуля CCP!
В данном режиме происходит захват текущего значения таймера и сохранение этого значения в регистры CCPRxH и CCPRxL по какому либо запрограммированному внешнему событию. Внешние события могут быть следующие:

  • каждый спадающий фронт на входе пина CCPx;
  • каждый нарастающий фронт на входе пина CCPx;
  • каждый четвертый нарастающий фронт на входе пина CCPx;
  •  каждый шестнадцатый нарастающий фронт на входе пина CCPx;

Тип события выбирается программистом записью битов CCPxM3:CCPxM0 в регистре CCPxCON.  Какое значение необходимо занести в эти биты для выбора, смотрите в предыдущем выпуске рассылки.
Как только происходит какое либо внешнее событие, после сохранения текущего значения таймера в регистры CCPRxH:CCPRxL, выставляется флаг прерывания CCPxIF, и если разрешено прерывание от этого модуля, то оно вызывается. Не забываем, что флаг сбрасывается программой! Необходимо учитывать, что если захваченное значение не успеет программа прочитать из регистров CCPRxH:CCPRxL, то по появлению нового события на входе пина CCPx, старое, непрочитанное значение затрется новым.  
Поэтому, при собственных разработках будьте внимательны и правильно рассчитывайте время следования входных импульсов и реакцию Вашей программы на них!
Если мы используем режим захвата модуля CCPx, то, нам необходимо, пин RC2(CCP1) или пин RC1(CCP2)  настроить как вход! Запрограммировав, соответственно, регистр TRISC.
Если пин будет настроен на выход, то захват можно генерировать программой, формируя на выходе одно из внешних событий. Очень удобно применять, например, для анализа длительности выполнения основного цикла микроконтроллера. 
Как мы видим по внешним событиям и функциональной схеме, представленной ниже, у модуля CCPx есть прескалер, благодаря которому можно настраивать захват не на каждый фронт, а еще на захват через 4 или 16 фронтов. Обнуляется прескалер: либо, когда модуль CCPx выключается или  работает не в режиме захвата, либо, когда происходит общий сброс микроконтроллера! Поэтому, есть одно замечание, если во время работы в режиме захвата необходимо сменить настройки прескалера, то сначала необходимо отключить модуль CCPx, чтобы очистился прескалер, а потом включить модуль с новыми настройками! Если, модуль не отключать и ввести в регистр CCPxCON, сразу, новое значение, то возможен ложный захват!
Функциональная схема модулей CCP1 и CCP2 в режиме захвата представлена ниже:
Функциональные схемы модулей CCP1 и CCP2 в режиме захвата

В следующем выпуске продолжим рассматривать модуль захвата/сравнения микроконтроллера PIC18F452.  Напишем программу, которая будет работать с CCP1 в режиме захвата! Например, простейший счетчик частоты!

Полный архив рассылки Вы можете прочитать на нашем сайте!  При любом опубликовании текстов данной рассылки ссылка на сайт http://www.2aplusa.ru обязательна!

Желаю Вам удачи! До скорой встречи!


С уважением, Алексей pont_a@mail.ru
Cайт разработчиков 2AplusA http://2aplusa.ru


В избранное