прерывание по таймеру увеличит а не сократит общее время цикла контроллера. Вы просто пытаетесь запустить критичную по времени задачу независимо от цикла контроллера, в вашем случае пожалуй нет смысла, прерывание можно вызвать по значению счётчика. скорость считать одной командой.
для оптимизации времени цикла разбейте всю прогу на подпрограммы и включайте только те подпрограммы которые нужны в данный момент. если не получается и время цикла многовато для точного определения нужного значения счётчика, как я понял для остановки, используйте прерывание по счётчику, в нём включайте, выключайте нужный выход с немедленной регенерацией. в этом случае у вас будет постоянная и почти стабильная задержка (кажется в сотню мкс) между заданным значением счётчика и отработкой выхода
ну а после остановки спокойно посмотрите в цикле, перестал энкодер крутится или нет.
если вам ещё нужна скорость с которой энкодер крутится, просто считайте частоту со счётчика, у этого контроллера эта фича только для счётчика 0, считать можно с помощью PRV, если не путаю.
что за задачка то? может под неё уже есть решения?
|