По части первых 3х состояний без вопросов, а вот как 4-5 организовать не знаю.
Программный триггер на ASM
- Реклама
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Программный триггер на ASM
У вас не верное количество состояний.
Re: Программный триггер на ASM
описал только те состояния которые нужны на выходе.
Re: Программный триггер на ASM
Из 2 бит получить 5 состояний ? .... тянет на Шнобелевскую премию. Переворот в науке. При состояниях Х1=1, Х2=0 на выходе появляется либо 1, либо 0 в зависимости от цены на бананы в Зимбабве.
- Реклама
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Программный триггер на ASM
Выкладывайте всю задумку целиком.jeka79 писал(а):...аналог этой схемы...
Docendo discimus
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Программный триггер на ASM
Работоспособность устройства определяется не только теми состояниями, которые нужны, но и теми, которые могут возникнуть в процессе работы. Задача программиста заключается в том, чтобы учесть все возможные исключительные ситуации, а не только рабочие. Тем более, что вы, судя по всему, даже понятия не имеете, что в вашей задаче состояний ситуаций почти в два раза больше.jeka79 писал(а):только те состояния которые нужны
Поведение устройства с памятью (которое вы планируете реализовать) определяется не только состояниями на входе, но и состояниями самого устройства. Вообще, если пунктуально следовать схеме, то у вас два внешних входа и два внутренних входа. На каждые из получающихся 16 комбинаций вы обязаны продумать какие должны быть сигналы на выходе и каким должно стать внутреннее состояние устройства (благо что эти две, вообще говоря, разные вещи в вашем случае дублируют друг друга).
Реально можно ограничиться одним внутренним состоянием и двумя значениями на входе. И рассматривать таблицу истинности из восьми значений.
Re: Программный триггер на ASM
Кол-во состояний указано правильно, не знаю к чему весь сарказм в предыдущих сообщениях, все это часть реальной схемы, протестировано и успешно работает. Первые 3 состояния неизменны в данной реализации триггера, можете сами смоделировать в том же proteus и проверить, 4 и 5 на инвертирующем выходе выдает либо 0 либо 1. Какие вы еще можете придумать другие состояния, я не понимаю. Идея в том чтобы аналоговый триггер запихать в микроконтроллер, опыта нет, только учусь.
Готовых примеров реализации тех же RS триггеров не нашел, гуглил, либо чисто теория расписанная на пару страниц, либо темы без ответов.
Добавлено after 8 minutes 32 seconds:
И это в данном случае не совсем RS триггер.
Для понимания где это работает, включения насоса наполнения воды в бочку, по 2м датчикам (нижнего и верхнего уровня).
Насос включается только тогда, когда емкость наполнилась, а потом полностью опустошилась.
При этом выход из строя нижнего датчика не повлияет на набор воды в бак, продолжится его работа по верхнему уровню, без триггирования.
Готовых примеров реализации тех же RS триггеров не нашел, гуглил, либо чисто теория расписанная на пару страниц, либо темы без ответов.
Добавлено after 8 minutes 32 seconds:
И это в данном случае не совсем RS триггер.
Для понимания где это работает, включения насоса наполнения воды в бочку, по 2м датчикам (нижнего и верхнего уровня).
Насос включается только тогда, когда емкость наполнилась, а потом полностью опустошилась.
При этом выход из строя нижнего датчика не повлияет на набор воды в бак, продолжится его работа по верхнему уровню, без триггирования.
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Программный триггер на ASM
Имитировать логические элементы можно с помощью таблиц, другое дело триггеры. Запоминание состояния. Здесь уже напрашивается конечный автомат. Ключевое слово состояние.
Re: Программный триггер на ASM
Триггеры - тоже можно с помощью таблиц, просто вводится еще одна переменная - предыдущее состояние триггера. И получится - конечный автомат.
И последние 2 строки обсуждаемой таблицы будут выглядеть так :

А в предыдущих строках в колонке Qt будет Х - состояние любое.
И если такое объяснение будет понятно ТС, то он станет более внятно формулировать свои вопросы вместо обижаться .
И алгоритмически реализация последних двух состояний будет выглядеть просто: "если Х1=1 и Х2=0 - ничего не менять на выходе" .
А в предыдущих строках в колонке Qt будет Х - состояние любое.
И если такое объяснение будет понятно ТС, то он станет более внятно формулировать свои вопросы вместо обижаться .
И алгоритмически реализация последних двух состояний будет выглядеть просто: "если Х1=1 и Х2=0 - ничего не менять на выходе" .
- Вложения
-
- Qt.JPG
- (2.67 КБ) 1380 скачиваний
Re: Программный триггер на ASM
Реализация в ассемблере "в лоб" - табличный метод.
У АВРки или таблица в ОЗУ или таблица в ПЗУ.
Соответственно и набор регистров/команд подбираем.

У АВРки или таблица в ОЗУ или таблица в ПЗУ.
Соответственно и набор регистров/команд подбираем.
Re: Программный триггер на ASM
В общем случае - да. Но для такого простейшего случая - чересчур. Пара CPI ... Или даже одна CPI, если биты Х1, Х2 разместить в одном регистре .

- Вложения
-
- XY.JPG
- (11.15 КБ) 1455 скачиваний
Re: Программный триггер на ASM
Табличка шустрее - там сразу JMP в указанной ячейке и/или непосредственно обработчик и количество проверок равно одному разу.
При том, что у нас возможны аж четыре комбинации состояний на входе (т.е. до 4 сравнений).
в Z адрес начала таблички/области подпрограмм обработки
гдей-то собственно принятый код
сложим с содержимым Z после предобработки
и затем
IJMP/ICALL

При том, что у нас возможны аж четыре комбинации состояний на входе (т.е. до 4 сравнений).
в Z адрес начала таблички/области подпрограмм обработки
гдей-то собственно принятый код
сложим с содержимым Z после предобработки
и затем
IJMP/ICALL
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программный триггер на ASM
Если насос включен, проверяете только датчик по которому должно произойти отключение, если выключен, то другой и все.jeka79 писал(а):Насос включается только тогда, когда емкость наполнилась, а потом полностью опустошилась.
Последний раз редактировалось Z_h_e Пт апр 07, 2017 15:06:00, всего редактировалось 1 раз.
Re: Программный триггер на ASM
Еще раз : в общем случае - да. Но тут :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: ......Re: Программный триггер на ASM
Логично для битовых операций использовать соответствующие команды. Например
Код: Выделить всё
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 TESTRe: Программный триггер на ASM
спс, буду тестить в сравнение с триггером на 561 серии, скорость выполнения тут не важна, лишь бы работало.
Добавлено after 27 minutes 20 seconds:
Еще вопрос по части реализации, переключение будет происходить сразу при первом импульсе на вход, допустим забрызгивание датчика, еще не полной бочки, выключит насос.
Если датчики связать через резистивный делитель и включить ацп, выигрыш в кол-ве входов + своего рода антидребезг какой никакой получится, т.к ацп вроде как не быстро считает.
или же таймер мудрить как на обработчиках конопок делают?
или аналоговую фильтрацию типа рс цепочек.
хотелось бы минималистически. тинька 13а.
Добавлено after 27 minutes 20 seconds:
Еще вопрос по части реализации, переключение будет происходить сразу при первом импульсе на вход, допустим забрызгивание датчика, еще не полной бочки, выключит насос.
Если датчики связать через резистивный делитель и включить ацп, выигрыш в кол-ве входов + своего рода антидребезг какой никакой получится, т.к ацп вроде как не быстро считает.
или же таймер мудрить как на обработчиках конопок делают?
или аналоговую фильтрацию типа рс цепочек.
хотелось бы минималистически. тинька 13а.
Re: Программный триггер на ASM
Да, если опросится низкий уровень на X1, на выходе появится или подтвердится 0.jeka79 писал(а):вопрос по части реализации, переключение будет происходить сразу при первом импульсе на вход, допустим забрызгивание датчика, еще не полной бочки, выключит насос.
...хотелось бы минималистически. тинька 13а.
Спойлер
Код: Выделить всё
.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
.EXITRe: Программный триггер на ASM
Тут вся сложность в установке последних 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, теперь все вроде корректно работает.
Скажем так, заведем переменную флаг, где будем хранить последнее состояние 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
Флаг статуса положения анализа относительно события.
Или отсев антидребезга в различных состояниях прожки относительно комбинации входных сигналов.
А таковых заметно больше, чем 4 состояния 2х входных линий.

Или отсев антидребезга в различных состояниях прожки относительно комбинации входных сигналов.
А таковых заметно больше, чем 4 состояния 2х входных линий.




