Таймер одиночного выстрела состоит из:
n-битный двоичный счетчик
управляется источником входных синхроимпульсов CP
и сбрасывается пусковым входом. С каждым тактовым импульсом увеличивается его значение. Вход сброса должен быть подключен к сигналу запуска таймера.
n-битный регистр LATCH
для хранения значения интервала таймера (продолжительность вашего канала D0..D3
)
n-битный компаратор
для сравнения подсчитанного значения и значения интервала. XOR равных битов равно нулю, поэтому, если вы или все xored биты вместе, результат будет 0
, если значение регистра LATCH и значение счетчика одинаковы.
выходной триггер
чтобы запомнить истечение таймера (для работы в неимпульсном режиме), выход - ваш TA.TB,TC,TD
Стартовый импульс должен также сбрасывать RS в цепи. Я делаю это с помощью WR, но подозреваю вас вместо этого будет сигнал Старт отдельно ...
Что-то вроде этого:
Вам необходимо принять во внимание отрицания и вспомогательные входы используемых микросхем, чтобы они работали должным образом (некоторые отрицали WR, некоторые нет ... то же самое касается всех контактов, поэтому всегда проверяйте таблицу). Поэтому не забудьте добавить выбор микросхем и включение сигналов в их рабочие условия.
многоканальный таймер
Хорошо, вы просто добавляете LATCH и компараторы для каждого канала, каждый из которых подключен к одному и тому же счетчику. Сложная часть - это выбор канала и начальная часть. вам необходимо добавить декодер 1 from 4
, чтобы выбрать правильный LATCH при настройке D0..D3
. Чтобы нарисовать схему для этой части, мне нужно было бы больше узнать о цели этого ... Также, если вы устанавливаете интервалы только вручную, вы можете использовать DIP-переключатели вместо LATCH и выбора схемы. все намного проще.
Все вышеперечисленное можно сделать просто с помощью логических элементов NAND или NAND вместо конкретной реализации IC. Для этого вам нужно использовать Карты Карно и логическую алгебру.
Некоторое время я делал что-то с необработанными воротами, так как теперь гораздо проще и дешевле использовать MCU / FPGA для всего этого, так что будьте осторожны, я мог пропустить что-то тривиальное (например, где-то ворота отрицания) ... в любом случае, даже тогда это должно было уйти от таймеров
Кстати, это представление C ++:
int cnt=0,D=?;
bool TA=0;
for (;;)
{
if (cnt==D) TA=1;
cnt=(cnt+1)&15;
}
[Edit1] 4-канальная версия
Это основано на приведенном выше тексте. Существует также другой вариант с меньшим количеством компонентов, которые используют модуль ОЗУ с 4 полубайтами вместо регистров LATCH и декодер, составляющий единый таймер, непрерывно циклически проходящий по всем каналам с 4-кратным умножением тактовой частоты CP (например, путем XOR с задержанными сигналами CP).
person
Spektre
schedule
08.01.2016