| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Подсчёт импульсов
26.01.2012, 22:37
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: Подсчёт импульсов
Подавайте импульсы на ножку прерывания, настройте прерывание по фронту или спаду, и добавьте таймаут для обнуления регистра с количеством импульсов, если этих импульсов нет слишком долго (пауза)
|
|
|
|
26.01.2012, 23:05
|
|
|
Вид на жительство
Регистрация: 16.09.2011
Сообщений: 342
Сказал спасибо: 10
Сказали Спасибо 170 раз(а) в 103 сообщении(ях)
|
Re: Подсчёт импульсов
Какое семейство контроллеров/процессоров? Какой конкретно контроллер?
5. А то и значит, что не работает. Для работы модуля CCP необходима синхронизация приращения таймера с фронтом внутреннего тактового генератора.
Компаратор - имеется ввиду конечно же цифровой компаратор в модуле CCP - Capture/Compare/PWM. Работает CCP от таймера TMR1. Текущее значение таймера сравнивается со значением, записанным в регистры сравнения CPPR и в случае равенства значений выполняется какое-либо действие, установленное битами настройки модуля. Назови конкретно модель контроллера, расскажем, как сделать
|
|
|
|
26.01.2012, 23:16
|
|
|
Вид на жительство
Регистрация: 16.09.2011
Сообщений: 342
Сказал спасибо: 10
Сказали Спасибо 170 раз(а) в 103 сообщении(ях)
|
Re: Подсчёт импульсов
Сообщение от yellow87
|
Смущает смысл сравнения: значение TMR сравнивается с значением в CCPR1 и генерируется прерывание.
А я думал, что он сравнивает значение в регистре CCPR1 с числом импульсов на входе ССР1.
Так как же мне решить эту задачу?
|
Дак потому что таймер TMR1 может получать приращение от разных источников - как от внешнего, так и от внутреннего. CPP не имеет своего входа в режиме сравнения. Он получает сигнал счета от таймера TMR1.
В регистре CCPR содержится либо значение таймера TMR1, если CCP наботает в режиме захвата, либо значение для сравнения с содержимым таймера TMR1, если CCP работает в режиме цифрового компаратора. Событие при равенстве регистров CCPR и TMR1 определяется настройками модуля.
Ты путаешь два разных режима работы модуля CCP - режим захвата и режим сравнения.
Оба режима работают на основе таймера/счетчика TMR1. Этот TMR1 может получать счетный импульс от разных источников - от внешнего входа напрямую или через предделитель, либо от внутреннего тактового генератора с частотой Fosc/4, напрямую или через предделитель.
Далее, если модуль работает в режиме захвата, то событием захвата будет фронт сигнала на входе CCP, в зависимости от битов настройки в регистре CCP1CON. При этом значение регистров таймера будет переписано в регистры CCPR.
А если модуль работает в режиме сравнения, то изначально в регистры CCPR заносится значение, до которого должен досчитать таймре TMR1. Конкретное действие в случае равенства будет отпределяться настройками модуля.
Последний раз редактировалось Bumbarra; 26.01.2012 в 23:30.
|
|
|
|
27.01.2012, 05:24
|
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: Подсчёт импульсов
Спасибо вам, Bumbarra, за некоторые разъяснения.
Но всё равно до конца не ясно.
Как осуществить синхронизацию приращения таймера с фронтом внутреннего тактового генератора. Ведь импульсы, которые я хочу измерять не имеют кварцевой частоты. А вообще очень быстро меняют свою частоту следования(от нуля до 200 Гц)
Смысл работы модуля в режиме захвата мне ясен. НО как настраивать синхронизацию?
И смысл расчёта тоже не понимаю. Зачем ТОР ?
Я теперь примерно так себе представляю рачёт
|
Код:
|
///// main()
flag=0;
CCPR=58;
SET_TIMER1(0);
///// #int_ССР1
if(flag чётный)
CCPR+=74; // то пришёл 58-ой импульс
// настраиваемся на следующий 74-ый
else CCPR+=58; // то пришёл 74-ый импульс
//настраиваемся на следующий 58-oй
flag=!flag; // меняем определитель импульса |
PIC16F877 + MPLAB + PIC_CCS_C
Последний раз редактировалось yellow87; 27.01.2012 в 05:27.
|
|
|
|
27.01.2012, 08:09
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Подсчёт импульсов
Возми контроллер где есть 2 CCP для автоматической работы и быстродействия,главное чтоб входные частоты с внешки заводились на каждый таймер с кем работает CCP.
Да и проблема в счет с частотой в 200 Гц смех,за паузы между счетом можно много чего сделать...
__________________
Глаза боятся,а руки делают.
Последний раз редактировалось CERGEI1982; 27.01.2012 в 08:12.
|
|
|
|
27.01.2012, 09:56
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Подсчёт импульсов
Сообщение от yellow87
|
Спасибо вам, Bumbarra, за некоторые разъяснения.
Но всё равно до конца не ясно.
Как осуществить синхронизацию приращения таймера с фронтом внутреннего тактового генератора. Ведь импульсы, которые я хочу измерять не имеют кварцевой частоты. А вообще очень быстро меняют свою частоту следования(от нуля до 200 Гц)
Смысл работы модуля в режиме захвата мне ясен. НО как настраивать синхронизацию?
|
Попробуйте еще раз вернуться к документации на МК. В ней должны быть приведены блок-схемы отдельных модулей в разных режимах. Очень доступные рисунки. Попробуйте возникшие вопросы задать себе и поискать в этих рисунках на них ответ.
Синхронизация в вашем пониманиие - это всего лишь формирование внутреннего отображения входного сигнала с привязкой его фронта и спада к внутреннему тактирующему импульсу. Обычно это реализуется путем защелкивания входного состояния триггером. Наиболее частая реализация - D-триггер, на D-входе входной уровень, на клоке - внутренняя тактировка. На выходе повтор входного уровня, но уже с привязкой к клоку. Ничего для вас нового.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
27.01.2012, 10:05
|
|
|
Вид на жительство
Регистрация: 29.04.2007
Адрес: Иркутск
Сообщений: 311
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: Подсчёт импульсов
Сообщение от CERGEI1982
|
|
Возми контроллер где есть 2 CCP
|
Я написал что использую PIC16F877 - там два ССР
Сообщение от CERGEI1982
|
|
Да и проблема в счет с частотой в 200 Гц смех,за паузы между счетом можно много чего сделать...
|
Я писал, что сегодня 200Гц, завтра 200кГц
А с синхронизацией ничего так и не ясно, кроме того что в асинхронном режиме ССР не работает.
Буду проверять на практике.
|
|
|
|
27.01.2012, 10:23
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,042
Сказал спасибо: 589
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
|
Re: Подсчёт импульсов
Сообщение от CERGEI1982
|
Возми контроллер где есть 2 CCP для автоматической работы и быстродействия,главное чтоб входные частоты с внешки заводились на каждый таймер с кем работает CCP.
Да и проблема в счет с частотой в 200 Гц смех,за паузы между счетом можно много чего сделать...
|
У PIC16F877 и так есть 2 модуля ССР, но работают они от одного таймера TMR1. Я так понимаю, Вы предлагаете один модуль ССР использовать в режиме сравнения и без триггера специальных функций (это для счета 5  , а второй ССР использовать в режиме сравнения плюс триггер специальных функций (это для счета 74), по которому сбрасывается TMR1. Можно и так. Но, программный сброс TMR1 в обработчике прерываний ССР1 много ресурсов не скушает, хотя у ТС процессор уж очень занят.
|
|
|
|
27.01.2012, 10:51
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,042
Сказал спасибо: 589
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
|
Re: Подсчёт импульсов
Сообщение от yellow87
|
А с синхронизацией ничего так и не ясно, кроме того что в асинхронном режиме ССР не работает.
Буду проверять на практике.
|
Не парьтесь. При частоте 200Гц и даже 200кГц на входе RC0/T1OSO/T1CK счетчика TMR1 Вы разницы (синхронный или асинхронный режим) не заметите. Смело используйте синхронный режим работы счетчика.
Инкремент счетчика TMR1 в синхронном режиме произойдет не по фронту входного сигнала, а немного с запаздыванием (максимум на величину периода тактового сигнала процессора).
Последний раз редактировалось alvadep; 27.01.2012 в 10:56.
|
|
|
|
27.01.2012, 11:15
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Подсчёт импульсов
Сообщение от yellow87
|
|
Я написал что использую PIC16F877 - там два ССР
|
Узкий выбор что то у вас.Но хозяин барин
__________________
Глаза боятся,а руки делают.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:56.
|
|