Программный триггер на ASM

Обсуждаем контроллеры компании Atmel.
Ответить
Аватара пользователя
jeka79
Встал на лапы
Сообщения: 104
Зарегистрирован: Сб янв 07, 2017 10:14:29
Откуда: Н-Новгород

Программный триггер на ASM

Сообщение jeka79 »

Подскажите как можно реализовать аналог этой схемы в программе под контроллер AVR.
По части первых 3х состояний без вопросов, а вот как 4-5 организовать не знаю.

Изображение
Реклама
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Re: Программный триггер на ASM

Сообщение B@R5uk »

У вас не верное количество состояний.
Реклама
dm37
Родился
Сообщения: 10
Зарегистрирован: Вс апр 02, 2017 18:20:34

Re: Программный триггер на ASM

Сообщение dm37 »

Аватара пользователя
jeka79
Встал на лапы
Сообщения: 104
Зарегистрирован: Сб янв 07, 2017 10:14:29
Откуда: Н-Новгород

Re: Программный триггер на ASM

Сообщение jeka79 »

описал только те состояния которые нужны на выходе.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Программный триггер на ASM

Сообщение Jack_A »

Из 2 бит получить 5 состояний ? .... тянет на Шнобелевскую премию. Переворот в науке. При состояниях Х1=1, Х2=0 на выходе появляется либо 1, либо 0 в зависимости от цены на бананы в Зимбабве.
Изображение
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Программный триггер на ASM

Сообщение pyzhman »

jeka79 писал(а):...аналог этой схемы...
Выкладывайте всю задумку целиком.
Docendo discimus
Реклама
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Re: Программный триггер на ASM

Сообщение B@R5uk »

jeka79 писал(а):только те состояния которые нужны
Работоспособность устройства определяется не только теми состояниями, которые нужны, но и теми, которые могут возникнуть в процессе работы. Задача программиста заключается в том, чтобы учесть все возможные исключительные ситуации, а не только рабочие. Тем более, что вы, судя по всему, даже понятия не имеете, что в вашей задаче состояний ситуаций почти в два раза больше.

Поведение устройства с памятью (которое вы планируете реализовать) определяется не только состояниями на входе, но и состояниями самого устройства. Вообще, если пунктуально следовать схеме, то у вас два внешних входа и два внутренних входа. На каждые из получающихся 16 комбинаций вы обязаны продумать какие должны быть сигналы на выходе и каким должно стать внутреннее состояние устройства (благо что эти две, вообще говоря, разные вещи в вашем случае дублируют друг друга).

Реально можно ограничиться одним внутренним состоянием и двумя значениями на входе. И рассматривать таблицу истинности из восьми значений.
Аватара пользователя
jeka79
Встал на лапы
Сообщения: 104
Зарегистрирован: Сб янв 07, 2017 10:14:29
Откуда: Н-Новгород

Re: Программный триггер на ASM

Сообщение jeka79 »

Кол-во состояний указано правильно, не знаю к чему весь сарказм в предыдущих сообщениях, все это часть реальной схемы, протестировано и успешно работает. Первые 3 состояния неизменны в данной реализации триггера, можете сами смоделировать в том же proteus и проверить, 4 и 5 на инвертирующем выходе выдает либо 0 либо 1. Какие вы еще можете придумать другие состояния, я не понимаю. Идея в том чтобы аналоговый триггер запихать в микроконтроллер, опыта нет, только учусь.
Готовых примеров реализации тех же RS триггеров не нашел, гуглил, либо чисто теория расписанная на пару страниц, либо темы без ответов.

Добавлено after 8 minutes 32 seconds:
И это в данном случае не совсем RS триггер.
Для понимания где это работает, включения насоса наполнения воды в бочку, по 2м датчикам (нижнего и верхнего уровня).
Насос включается только тогда, когда емкость наполнилась, а потом полностью опустошилась.
При этом выход из строя нижнего датчика не повлияет на набор воды в бак, продолжится его работа по верхнему уровню, без триггирования.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Программный триггер на ASM

Сообщение Demiurg »

Имитировать логические элементы можно с помощью таблиц, другое дело триггеры. Запоминание состояния. Здесь уже напрашивается конечный автомат. Ключевое слово состояние.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Программный триггер на ASM

Сообщение Jack_A »

Триггеры - тоже можно с помощью таблиц, просто вводится еще одна переменная - предыдущее состояние триггера. И получится - конечный автомат. :) И последние 2 строки обсуждаемой таблицы будут выглядеть так :
Изображение
А в предыдущих строках в колонке Qt будет Х - состояние любое.
И если такое объяснение будет понятно ТС, то он станет более внятно формулировать свои вопросы вместо обижаться .
И алгоритмически реализация последних двух состояний будет выглядеть просто: "если Х1=1 и Х2=0 - ничего не менять на выходе" .
Вложения
Qt.JPG
(2.67 КБ) 1380 скачиваний
Изображение
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Программный триггер на ASM

Сообщение BOB51 »

Реализация в ассемблере "в лоб" - табличный метод.
У АВРки или таблица в ОЗУ или таблица в ПЗУ.
Соответственно и набор регистров/команд подбираем.
8)
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Программный триггер на ASM

Сообщение Jack_A »

В общем случае - да. Но для такого простейшего случая - чересчур. Пара CPI ... Или даже одна CPI, если биты Х1, Х2 разместить в одном регистре .

Изображение
Вложения
XY.JPG
(11.15 КБ) 1455 скачиваний
Изображение
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Программный триггер на ASM

Сообщение BOB51 »

Табличка шустрее - там сразу JMP в указанной ячейке и/или непосредственно обработчик и количество проверок равно одному разу.
При том, что у нас возможны аж четыре комбинации состояний на входе (т.е. до 4 сравнений).
в Z адрес начала таблички/области подпрограмм обработки
гдей-то собственно принятый код
сложим с содержимым Z после предобработки
и затем
IJMP/ICALL
:hunger:
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Программный триггер на ASM

Сообщение Z_h_e »

jeka79 писал(а):Насос включается только тогда, когда емкость наполнилась, а потом полностью опустошилась.
Если насос включен, проверяете только датчик по которому должно произойти отключение, если выключен, то другой и все.
Последний раз редактировалось Z_h_e Пт апр 07, 2017 15:06:00, всего редактировалось 1 раз.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Программный триггер на ASM

Сообщение 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 команды - и никаких таблиц
Изображение
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Программный триггер на ASM

Сообщение 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
Аватара пользователя
jeka79
Встал на лапы
Сообщения: 104
Зарегистрирован: Сб янв 07, 2017 10:14:29
Откуда: Н-Новгород

Re: Программный триггер на ASM

Сообщение jeka79 »

спс, буду тестить в сравнение с триггером на 561 серии, скорость выполнения тут не важна, лишь бы работало.

Добавлено after 27 minutes 20 seconds:
Еще вопрос по части реализации, переключение будет происходить сразу при первом импульсе на вход, допустим забрызгивание датчика, еще не полной бочки, выключит насос.
Если датчики связать через резистивный делитель и включить ацп, выигрыш в кол-ве входов + своего рода антидребезг какой никакой получится, т.к ацп вроде как не быстро считает.
или же таймер мудрить как на обработчиках конопок делают?
или аналоговую фильтрацию типа рс цепочек.
хотелось бы минималистически. тинька 13а.
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Программный триггер на ASM

Сообщение 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
Аватара пользователя
jeka79
Встал на лапы
Сообщения: 104
Зарегистрирован: Сб янв 07, 2017 10:14:29
Откуда: Н-Новгород

Re: Программный триггер на ASM

Сообщение 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, теперь все вроде корректно работает.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Программный триггер на ASM

Сообщение BOB51 »

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

Вернуться в «AVR»