Haamu 0 23 января, 2016 Опубликовано 23 января, 2016 (изменено) · Жалоба Контроллер STM32L151. Стоит необходимость очень точного (до тика контроллера) измерения времени между некоторыми событиями. Последовательность событий такая: 1) Дергаю ногой 1, в этот момент надо начать отсчет времени. 2) В момент появления сигнала на ноге 2 нужно сохранить посчитанный временой интервал, дернуть ногой 3 и стартонуть отсчет второго интервала, при этом сделать это всё максимально синхронно! 3) В момент появления сигнала на ноге 4 сохранить второй временой интервал. На этом всё. Собственно вопрос в том, как так по хитрому настроить срабатывание таймеров, чтобы сделать всё этом максимально синхронно? Сразу уточню, что ноги подключена как попало, поэтому использовать их как внешний триггер не получится. Изменено 23 января, 2016 пользователем Haamu Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 23 января, 2016 Опубликовано 23 января, 2016 · Жалоба Сразу уточню, что ноги подключена как попало, поэтому использовать их как внешний триггер не получится. Тушите свет, сливайте воду, все расходимся. Для начала надо придумать схему синхронизации таймеров (внутри STM32 их много, они хитрые и дают множество вариантов взаимодействия). Потом распределить ноги, потом рисовать схему и плату. А вот так задним числом - без вариантов. Нет, кто-то там наверху мог помочь и сделать "как попало" так, чтобы получилось "как должно быть", но так не бывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 24 января, 2016 Опубликовано 24 января, 2016 · Жалоба Собственно вопрос в том, как так по хитрому настроить срабатывание таймеров, чтобы сделать всё этом максимально синхронно? Ну, в случае если запуск точности не требует - то можно. Весь смысл - не вылезать из прерывания, а лишь переходить из одного - в другое. Код прерывания разместить в памяти. Не в курсе - но если есть CCRAM - то только там. Только таким способом можно быть 100% уверенным в нулевой латентности событий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 24 января, 2016 Опубликовано 24 января, 2016 · Жалоба Достаточно одного таймера с двумя input capture. Настраиваете параметры триггера и прерывание на второй таймер ставите. В прерывании считаете разность в регистрах, что и есть точное время между событиями. Обязательно считать в беззнаковой арифметике, тогда переполнение таймера между срабатываниями не исказит результат. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба 2) В момент появления сигнала на ноге 2 нужно сохранить посчитанный временой интервал, дернуть ногой 3 и стартонуть отсчет второго интервала, при этом сделать это всё максимально синхронно! Ну как бы уже видно, что "до тика процессора" у вас не получится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Haamu 0 26 января, 2016 Опубликовано 26 января, 2016 · Жалоба А в случае, если все-же завести эти сигналы на нужные ноги контроллера, как тогда это можно настроить и какие сигнала на какие ноги заводить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 26 января, 2016 Опубликовано 26 января, 2016 · Жалоба А в случае, если все-же завести эти сигналы на нужные ноги контроллера, как тогда это можно настроить и какие сигнала на какие ноги заводить? Ну так Tarbal рассказал, как надо: Достаточно одного таймера с двумя input capture. Настраиваете параметры триггера и прерывание на второй таймер ставите. В прерывании считаете разность в регистрах, что и есть точное время между событиями. Обязательно считать в беззнаковой арифметике, тогда переполнение таймера между срабатываниями не исказит результат. Даташит вроде бы говорит, что таймеры TIM2, TIM3 и TIM4 могут тактироваться на частоте процессора. Выбирайте любой из них, подключайте 2 канала - и вперёд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться