toweroff 1 13 января, 2019 Опубликовано 13 января, 2019 · Жалоба Добрый день Никак не соображу, возможно ли таймер заставить посчитать количество тактов, в течение которых на каком-то входе была "1"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 180 13 января, 2019 Опубликовано 13 января, 2019 · Жалоба На каком-либо произвольном - нет. На входе захвата - вполне. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 13 января, 2019 Опубликовано 13 января, 2019 · Жалоба 9 minutes ago, Arlleex said: На каком-либо произвольном - нет. На входе захвата - вполне. Хмм.. Как? Вход захвата вполне устраивает, но никак не соображу как настроить. Там, как я понимаю, только счётный вход по выбираемому фронту Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 180 13 января, 2019 Опубликовано 13 января, 2019 · Жалоба 18 минут назад, toweroff сказал: Хмм.. Как? У практически любого МК таймер можно тактировать от внешнего источника и от внутреннего. Не путайте вход захвата и вход синхронизации таймера. Таймер, будучи настроенным в режиме захвата (capture mode), считает в выбранном направлении и с настроенной частотой до тех пор, пока на внешнем входе захвата логический уровень не перейдет в определенное, заранее настроенное состояние (например, переход из 0 в 1). Как настраивать таймер в режим захвата расписано на просторах гугла, в том числе тут. Ну плюс мануал на МК все-таки пошерстите в разделе TIM Capture mode Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 13 января, 2019 Опубликовано 13 января, 2019 · Жалоба 10 minutes ago, Arlleex said: У практически любого МК таймер можно тактировать от внешнего источника и от внутреннего. Не путайте вход захвата и вход синхронизации таймера. Таймер, будучи настроенным в режиме захвата (capture mode), считает в выбранном направлении и с настроенной частотой до тех пор, пока на внешнем входе захвата логический уровень не перейдет в определенное, заранее настроенное состояние (например, переход из 0 в 1). Ну так и я о чём? Именно переход с настраиваемым фронтом + настройка "дребезга". У меня его (перехода) может и вообще не быть - вход может находиться всё время в "0" или "1" Мне нужно, чтобы таймер, тактируясь от внутреннего источника, в течение определенного времени считал пульсы, в которых некий вход в "1". Пока только вот какая картина вырисовывается: 1. TIM1 управляет TIM2 и в конце времени счёта вычитывает счётчик TIM3 2. TIM2 генерит с нужной частотой PWM. Выход таймера через "И" подаётся на вход TIM3, настроенный на счёт, допустим, по "rise"-фронту 3. TIM3 просто считает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 13 января, 2019 Опубликовано 13 января, 2019 · Жалоба 2 часа назад, toweroff сказал: Ну так и я о чём? Именно переход с настраиваемым фронтом + настройка "дребезга". У меня его (перехода) может и вообще не быть - вход может находиться всё время в "0" или "1" Мне нужно, чтобы таймер, тактируясь от внутреннего источника, в течение определенного времени считал пульсы, в которых некий вход в "1". Пока только вот какая картина вырисовывается: 1. TIM1 управляет TIM2 и в конце времени счёта вычитывает счётчик TIM3 2. TIM2 генерит с нужной частотой PWM. Выход таймера через "И" подаётся на вход TIM3, настроенный на счёт, допустим, по "rise"-фронту 3. TIM3 просто считает :)) Таймер с двумя/тремя каналами. Первый канал - захват по пину с однократным запуском таймера и пересбросом по фронту. Второй канал - на этот же пин с захватом по спаду во второй канал длительности "1" с генерацией прерывания. Третий канал - в режиме сравнения - туда можно занести таймаут. Какие примерно длительности нужно ловить и с какой периодичностью импульсов? Это анти-ШИМ режим таймера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan24190 0 13 января, 2019 Опубликовано 13 января, 2019 · Жалоба Можно на одном канале сделать. Если настроить захват по обоим фронтам. Как только произошло событие перехода 0->1 значение счетчика сохранится в регистр захвата t1 - это отправная точка. Далее ждем события перехода 1->0, после которого опять сохранится значение счетчика в регистр захвата - это конечная точка t2. Потом "беззнаковое" вычитание t2 - t1 даст длительность периода в "тиках" таймера. Если будут переполнения, то считать количество переполнений n, и тогда длительность измеряемого периода увеличится на n * разрядность таймера. У меня на F3 так без проблем работает. А т.к. периферия у stm одинаковая почти, то и на F0 скорее всего прокатит. Можно пойти дальше и сделать ведомый таймер, который будет считать количество переполнений таймера-мастера... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 16 января, 2019 Опубликовано 16 января, 2019 · Жалоба В общем так... В силу мелкого (20 ног) контроллера, используемых методов, необходимой периферии, выведенных на ноги таймеров и прочих пятен на Луне и сошедшихся звёзд, пришлось использовать два таймера и EXTI (один таймер в два канала как раз и задаёт режимы работы устройства, второй засекает время, прерывание пина инкрементирует счётчик) Работает. Зато перешерстил описание таймеров, много полезного, оказывается Те таймеры, которые могут именно иметь SlaveMode, уже заняты пинами другой периферии, отсюда и пляски Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться