Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Ответ:
Отправлено
Тумблер (62.176.13.156) 07 августа 2018, г. 18:59
В ответ на:
Ответ: отправлено
Exp_t 07 августа 2018, г. 16:01
Что именно нужно, я описал в 1-м сообщении - однако, опишу подробнее.
---
Таймер работает в "в нормальном" режиме (все биты WGMxx равны 0).
Тактовая серия - внешняя, 1 мГц (от кварцевого генератора).
Внешним импульсом (1 [шт] за 10 [сек]) взводится
внешний триггер 74HC74.
(Триггер взводится импульсом аппаратно, а сбрасывается программно по переполнению таймера 1.)
Внешний импульс синхронен с тактовой серией 1 мгц.
Взведение триггера открывает "ворота" и 1 мГц поступает
на вход таймера 1. В регистры OCR1A/OCR1B занесены уставки времени (в тактах). В момент равенства кодов T1CNT и OCR1A/OCR1B на выходах OC1A(PD5)/OC1B(PE2) появляется сигнал, в соответствии с указанным в битах 7-4 TCCR1A.
Может быть установлена 1, может 0, может произойти инверсия
текущего состояния (toggle). Всё вышеописанное устойчиво работает.
Однако, необходимо выполнять эту работу постоянно, а не 1 раз.
Для этого выходы OC1A/OC1B надо вернуть в первоначально состояние, т.е. "сбросить".
После переполнения таймера 1 в процедуре прерывания я это делаю.
И вот это - не работает в режиме установки 1, установки 0. В режиме "toggle" всё работает по документации. Исходники я привёл в одном из сообщений.
Составить ответ | Вернуться на конференцию
Ответы