Страница 1 из 1
Программный триггер на ASM
Добавлено: Вт апр 04, 2017 12:16:36
jeka79
Подскажите как можно реализовать аналог этой схемы в программе под контроллер AVR.
По части первых 3х состояний без вопросов, а вот как 4-5 организовать не знаю.

Re: Программный триггер на ASM
Добавлено: Вт апр 04, 2017 19:11:49
B@R5uk
У вас не верное количество состояний.
Re: Программный триггер на ASM
Добавлено: Вт апр 04, 2017 20:13:03
dm37
Re: Программный триггер на ASM
Добавлено: Ср апр 05, 2017 02:29:49
jeka79
описал только те состояния которые нужны на выходе.
Re: Программный триггер на ASM
Добавлено: Ср апр 05, 2017 09:59:49
Jack_A
Из 2 бит получить 5 состояний ? .... тянет на Шнобелевскую премию. Переворот в науке. При состояниях Х1=1, Х2=0 на выходе появляется либо 1, либо 0 в зависимости от цены на бананы в Зимбабве.
Re: Программный триггер на ASM
Добавлено: Ср апр 05, 2017 10:24:38
pyzhman
jeka79 писал(а):...аналог этой схемы...
Выкладывайте всю задумку целиком.
Re: Программный триггер на ASM
Добавлено: Ср апр 05, 2017 11:20:43
B@R5uk
jeka79 писал(а):только те состояния которые нужны
Работоспособность устройства определяется не только теми состояниями, которые нужны, но и теми, которые могут возникнуть в процессе работы. Задача программиста заключается в том, чтобы учесть
все возможные исключительные ситуации, а не только рабочие. Тем более, что вы, судя по всему, даже понятия не имеете, что в вашей задаче
состояний ситуаций почти в два раза больше.
Поведение
устройства с памятью (которое вы планируете реализовать) определяется не только состояниями на входе, но и состояниями самого устройства. Вообще, если пунктуально следовать схеме, то у вас два
внешних входа и два
внутренних входа. На каждые из получающихся 16 комбинаций вы обязаны продумать какие должны быть
сигналы на выходе и каким должно стать
внутреннее состояние устройства (благо что эти две, вообще говоря,
разные вещи в вашем случае дублируют друг друга).
Реально можно ограничиться одним внутренним состоянием и двумя значениями на входе. И рассматривать таблицу истинности из восьми значений.
Re: Программный триггер на ASM
Добавлено: Чт апр 06, 2017 01:54:48
jeka79
Кол-во состояний указано правильно, не знаю к чему весь сарказм в предыдущих сообщениях, все это часть реальной схемы, протестировано и успешно работает. Первые 3 состояния неизменны в данной реализации триггера, можете сами смоделировать в том же proteus и проверить, 4 и 5 на инвертирующем выходе выдает либо 0 либо 1. Какие вы еще можете придумать другие состояния, я не понимаю. Идея в том чтобы аналоговый триггер запихать в микроконтроллер, опыта нет, только учусь.
Готовых примеров реализации тех же RS триггеров не нашел, гуглил, либо чисто теория расписанная на пару страниц, либо темы без ответов.
Добавлено after 8 minutes 32 seconds:
И это в данном случае не совсем RS триггер.
Для понимания где это работает, включения насоса наполнения воды в бочку, по 2м датчикам (нижнего и верхнего уровня).
Насос включается только тогда, когда емкость наполнилась, а потом полностью опустошилась.
При этом выход из строя нижнего датчика не повлияет на набор воды в бак, продолжится его работа по верхнему уровню, без триггирования.
Re: Программный триггер на ASM
Добавлено: Чт апр 06, 2017 03:40:00
Demiurg
Имитировать логические элементы можно с помощью таблиц, другое дело триггеры. Запоминание состояния. Здесь уже напрашивается конечный автомат. Ключевое слово состояние.
Re: Программный триггер на ASM
Добавлено: Чт апр 06, 2017 09:26:57
Jack_A
Триггеры - тоже можно с помощью таблиц, просто вводится еще одна переменная - предыдущее состояние триггера. И получится - конечный автомат.

И последние 2 строки обсуждаемой таблицы будут выглядеть так :

А в предыдущих строках в колонке Qt будет Х - состояние любое.
И если такое объяснение будет понятно ТС, то он станет более внятно формулировать свои вопросы вместо обижаться .
И алгоритмически реализация последних двух состояний будет выглядеть просто: "если Х1=1 и Х2=0 - ничего не менять на выходе" .
Re: Программный триггер на ASM
Добавлено: Чт апр 06, 2017 12:33:02
BOB51
Реализация в ассемблере "в лоб" - табличный метод.
У АВРки или таблица в ОЗУ или таблица в ПЗУ.
Соответственно и набор регистров/команд подбираем.

Re: Программный триггер на ASM
Добавлено: Пт апр 07, 2017 08:58:17
Jack_A
В общем случае - да. Но для такого простейшего случая - чересчур. Пара
CPI ... Или даже одна
CPI, если биты Х1, Х2 разместить в одном регистре .

Re: Программный триггер на ASM
Добавлено: Пт апр 07, 2017 12:41:36
BOB51
Табличка шустрее - там сразу JMP в указанной ячейке и/или непосредственно обработчик и количество проверок равно одному разу.
При том, что у нас возможны аж четыре комбинации состояний на входе (т.е. до 4 сравнений).
в Z адрес начала таблички/области подпрограмм обработки
гдей-то собственно принятый код
сложим с содержимым Z после предобработки
и затем
IJMP/ICALL

Re: Программный триггер на ASM
Добавлено: Пт апр 07, 2017 13:05:38
Z_h_e
jeka79 писал(а):Насос включается только тогда, когда емкость наполнилась, а потом полностью опустошилась.
Если насос включен, проверяете только датчик по которому должно произойти отключение, если выключен, то другой и все.
Re: Программный триггер на ASM
Добавлено: Пт апр 07, 2017 13:48:05
Jack_A
BOB51 писал(а):Табличка шустрее - там сразу...J
Еще раз : в общем случае - да. Но тут :
Код: Выделить всё
.equ X1 =2
.equ X2 =1
cpi r16,X2
breq nothing
brlo off_bit
on_bit: sbi PORT_O,our_bit
rjmp nothing
off_bit: cbi PORT_O,our_bit
nothing: ......
Куда уж проще, 3 команды - и никаких таблиц
Re: Программный триггер на ASM
Добавлено: Сб апр 08, 2017 05:43:38
akl
Логично для битовых операций использовать соответствующие команды. Например
Код: Выделить всё
TEST:
.equ X1=1
.equ X2=2
.equ OUT_=0
SBIS PIND,X1
CBI PORTD,OUT_
SBIS PIND,X1
RJMP TEST_GO
SBIC PIND,X2
SBI PORTD,OUT_
TEST_GO:
;
;
;
RJMP TEST
Re: Программный триггер на ASM
Добавлено: Сб апр 08, 2017 11:59:22
jeka79
спс, буду тестить в сравнение с триггером на 561 серии, скорость выполнения тут не важна, лишь бы работало.
Добавлено after 27 minutes 20 seconds:
Еще вопрос по части реализации, переключение будет происходить сразу при первом импульсе на вход, допустим забрызгивание датчика, еще не полной бочки, выключит насос.
Если датчики связать через резистивный делитель и включить ацп, выигрыш в кол-ве входов + своего рода антидребезг какой никакой получится, т.к ацп вроде как не быстро считает.
или же таймер мудрить как на обработчиках конопок делают?
или аналоговую фильтрацию типа рс цепочек.
хотелось бы минималистически. тинька 13а.
Re: Программный триггер на ASM
Добавлено: Сб апр 08, 2017 12:46:24
akl
jeka79 писал(а):вопрос по части реализации, переключение будет происходить сразу при первом импульсе на вход, допустим забрызгивание датчика, еще не полной бочки, выключит насос.
...хотелось бы минималистически. тинька 13а.
Да, если опросится низкий уровень на X1, на выходе появится или подтвердится 0.
Спойлер
Код: Выделить всё
.include "tn13def.inc"
.equ X1=1
.equ X2=2
.equ OUT_=0
.org 000
START:
LDI R16,$F9
OUT DDRB,R16
TEST:
SBIS PINB,X1
CBI PORTB,OUT_
SBIS PINB,X1
RJMP TEST_GO
SBIC PINB,X2
SBI PORTB,OUT_
TEST_GO:
;
;
;
RJMP TEST
.EXIT
Re: Программный триггер на ASM
Добавлено: Сб апр 15, 2017 18:45:23
jeka79
Тут вся сложность в установке последних 2х состояний, из описанных примеров идет проверка первых 3х статичных состояний, а то что в функции TEST_GO: и есть проблемой.
Скажем так, заведем переменную флаг, где будем хранить последнее состояние OUT
проверяем X1 = 1 и X2 = 0 и проверяем флаг допустим FLAG = 0
ставим OUT = 1 и FLAG = 1.
Но это приводит к цикличной переустановки флага и выхода в каждом цикле пока по входам установлено X1 = 1 и X2 = 0
Как это организовать по нормальному, как это реальный триггер делает чет ума не приложу.
Добавлено after 41 minute 50 seconds:
Все вроде разобрался, завел еще один флаг FLAG_SET, который соответствует выходу 8 по схеме из 1 поста, он устанавливается в 0 когда X1 и X2 = 1 проверяем его при установке в 0 выхода и скидываем в 0, теперь все вроде корректно работает.
Re: Программный триггер на ASM
Добавлено: Вс апр 16, 2017 07:55:09
BOB51
Флаг статуса положения анализа относительно события.
Или отсев антидребезга в различных состояниях прожки относительно комбинации входных сигналов.
А таковых заметно больше, чем 4 состояния 2х входных линий.
