PDA

Просмотр полной версии : Макрос побитного вывода сигнатуры (beeper)



tigdin
05.04.2015, 20:30
Здравствуйте!

В общем, возникла необходимость попищать пьезиком, причем по-разному. Был сооружен макрос, приложенный к сообщению.
Идея его работы в том, что он работает точно: то есть прямо тик-в-тик. Когда счетчик достигает нуля, то тут же переключается на начало, без "артефактов" сброса.

Сам макрос побитно выводит в порт 21-битную сигнатуру со входа. В сигнатуре: 1- пищим, 0 - молчим. Период 0.2 секунды. Соответственно, 1111100000 -- 1 секунду пищим, 1 секунду молчим. 21-ый бит задает цикличность. 1 -- однократно, 0 -- пищим до упора. Если на входе появляются отличные от старых данные, макрос автоматически перезапускается. "Нулевая" сигнатура со входа не выводится -- макрос останавливается: В случае с однократным выводом, нужно либо записать новую сигнатуру, либо "ноль" и потом ту же, что выводилась перед этим (1ххх100500 -- 0 -- 1ххх100500)

Нет, все работает, проблема в том, что осталось послевкусие дебила -- кажется, что можно было раз в пять проще... Особенно после упорного конструирования макроса fSEL -- когда я нашел потом на форуме макрос rovki и тот, который с "машинным эпсилон"... В общем, Вам лучше не знать, какой fSEL я там у себя наваял... ))) В связи с этим принимается любая, самая злостная критика и злостное тыкание носом во все подряд. Не всегда процесс обучения вкусный и удобный...

Спасибо всем, кто откликнется!

capzap
05.04.2015, 20:46
модель генерирующая входной сигнал имеется? просто влом домысливать какая послеовательность всеже должна поступать

tigdin
05.04.2015, 21:41
Если запустить макрос на исполнение (отладку) и на вход подать тестовые сигнатуры, то выход будет переключаться в соответствии с сигнатурой. Например,
Тестовые сигнатуры: 1946272 - 3 тире 3 точки однократно (двоичное: 1 1101 1011 0010 1010 0000); 897696 - 3 тире 3 точки циклично (двоичное: 0 1101 1011 0010 1010 0000). То есть это и есть входной сигнал. На счет модели -- пока нет готовой. Саму "моргалку" я сделал, а вот "собрать в кучу" сигналы из разных источников не успел.
В общем, проблема в том, что мне кажется, что это сделано как-то коряво -- используя обратные связи. Нормально clock-ать без них не получилось: Счетчик по-разному считает. Например, дойдя до нуля на секунду перебрасывается на 65535, а потом на 20 (19) бит. Либо "проглатывался" один такт (цикл) в старшем бите и время "пищания" становилось меньше на 0.2 секунды. Сейчас, если тыкать макрос по шагам видно, во-первых, одинаковое время "работы" каждого бита, во вторых, после нуля сразу же появляется "правильный" 20-ый (19 от нуля) бит. Но я выяснил, что если изменить период сигнала (BLINK), то и схему надо корректировать. Отсюда вывод об ограниченных умственных возможностях... )))

capzap
05.04.2015, 21:50
Если запустить макрос на исполнение (отладку) и на вход подать тестовые сигнатуры, то выход будет переключаться в соответствии с сигнатурой. Например,
Тестовые сигнатуры: 1946272 - 3 тире 3 точки однократно (двоичное: 1 1101 1011 0010 1010 0000); 897696 - 3 тире 3 точки циклично (двоичное: 0 1101 1011 0010 1010 0000). То есть это и есть входной сигнал.
это пока понятно только Вам, пока Вас будут "пинать" создайте модель генератора в виде макроса, включили первый вход , выход выдал определенную последовательность импульсов, подали сигнал на второй вход макроса на выходе другая последовательность например циклическая, не по програмистки это как то самому на входе импульсы набивать, так и тестирование легче пойдет основного блока

tigdin
05.04.2015, 21:57
Ага, понял... Сейчас прилеплю...

В общем, тестовый проект в архиве. Если включать-выключать входы -- видно, что происходит на выходах. Если включить вход I3, то на выходе будет циклическая последовательность нулей и единиц (clock, меандр). НО! Если, ткнуть в макрос BEEP3 левой кнопкой мыши и выставить параметр Th и Tl в 0.2 секунды, вся последовательность летит к чертям... Вот что еще обнаружилось... Я и говорю, как-то все это... (((

rovki
05.04.2015, 22:54
В симуляции важно правильно выставить время цикла и периода иначе может исказится картинка (визуализация) ,но в железе будет все нормально ...

rovki
05.04.2015, 23:06
жаль что вы предлагаете обсудить готовое решение ,а не задачу .К Цели ведут много дорожек...
Про тире и точки вы как мне кажется не случайно говорите?Уж не Морзе делаете ли..;)

tigdin
05.04.2015, 23:36
rovki, здравствуйте! Нет, не Морзе )). Нужно, чтобы, в зависимости от состояний, пищало по разному. Попробую сформулировать проблему.

В зависимости от состояний системы на пьезике появляются разные последовательности звуковых импульсов.
Когда реле готово и нет ошибок, загорается зеленый индикатор и раздается сигнал, например, однократно два коротких сигнала бип-бип.
Когда входим в режим уставок, загорается оранжевый световой сигнал и однократно три коротких сигнала.
Когда уставки сохраняются -- один длинный сигнал.
Когда ошибка, загорается красный индикатор и система непрерывно пищит бип-бип-бип...
Когда нажимаем кнопки (которые не щелкают), раздается короткий однократный сигнал.
Вот и пришла идея, сделать нечто, которое читает последовательность нулей и единиц -- сигнатуру и в зависимости от порядка нулей и единиц издает разные звуки. Единица -- сигнал 0.2 секунды, Ноль -- пауза 0.2 секунды. И еще одним битом указывать тип сигнала -- однократный или непрерывный. Коммутацию на входе макроса осуществлять мультиплексором, который в зависимости от адреса (номера) флага на входе посылает на выход нужную последовательность (сигнатуру).
Еще есть кнопка, нажатие которой вызывает отключение сигналов на некоторое время, спустя которое система пищит снова. Такую назойливость подсмотрел у фашистов на оборудовании. Там сигнал отключается, но спустя некоторое время железяка снова начинает орать, пока не устранять проблему. Чтобы умники не могли выключить звук и оборудование будет "висеть" в проблемном состоянии неопределенное время...
В общем, как-то так...
rovki, может быть Вам известен более простой способ? После Вашего макроса fSEL мне стало совсем стыдно... :rolleyes:

rovki
06.04.2015, 00:04
Так это для слабо видящих что ли нужно ?На слух работать .А сколько разных звуковых комбинаций нужно то-состояний системы и кто формирует эти состояния ?От этого зависит путь ..

Алексей Геннадьевич
06.04.2015, 08:16
tigdin Посмотрите вот эти ГОСТы. Всё давно уже придумано.

ГОСТ Р 51340-99 Безопасность машин. Основные характеристики оптических и звуковых сигналов опасности. Технические требования и методы испытаний
ГОСТ Р 51341-99 Безопасность машин. Эргономические требования по конструированию средств отображения информации и органов управления. Часть 2. Средства отображения информации


Так это для слабо видящих что ли нужно ?На слух работать .А сколько разных звуковых комбинаций нужно то-состояний системы и кто формирует эти состояния ?От этого зависит путь ..

Звук является дополнительным каналом информации. Перед включением автоматической линии в автоработу 5-10 секунд воет сирена. Нужно для того, чтобы или аварийный трос дёрнуть, или с рабочей зоны выпрыгнуть.

tigdin
06.04.2015, 13:05
Так это для слабо видящих что ли нужно ?На слух работать .А сколько разных звуковых комбинаций нужно то-состояний системы и кто формирует эти состояния ?От этого зависит путь ..
rovki, добрый день! Я предполагал, что система будет пикать, когда нажимаются кнопки (раз уж стоить пьезоизлучатель), когда есть готовность и когда возникает ошибка. В общем-то при ошибке нужно орать даже, а не пикать, потому что это либо неисправность датчика уровня, либо проблема с клапанами (их два) для воды. И в первом и во втором случае, чтобы обратили внимание, пока количество воды, перелившееся через край не стало большой проблемой...

tigdin Посмотрите вот эти ГОСТы. Всё давно уже придумано.
Алексей Геннадьевич, я внимательно изучаю всю документацию, о которую Вы мне рекомендуете! Спасибо Вам огромное! Как Вы думаете, в этом случае, с этим увлажнителем, стОит ли следовать стандартам? В общем-то, нужно просто прерывисто верещать, если неисправен датчик или клапаны. Остальное -- лишь маленький бонус, не более чем... )

rovki
06.04.2015, 16:40
для слуха лучще разные мелодии сирен ,чем точка -тере ,,попробуй подсчитай ....так все же сколько нужно разных сигналов реально ,8,16 или 100?
И почему вам нужно 19 разрядов именно,а не 16 или 32?

rovki
06.04.2015, 18:25
Вот вам дугой немного принцип -на основе сдвигающего регистра .Кроме того в проекте встроен калькулятор для перевода бинарного кода в целочисленное число ,которое записывается потом в ПЗУ (в свойствах) ручками .....В проекте регистр на 16 разрядов ,но можно и 32(или19) поставить (сменить константу ).

tigdin
06.04.2015, 20:44
Ответ как всегда исчерпывающе-убийственный ))). Как раз была мысль о сдвиговом регистре, но не рискнул реализовать. В общем-то, я думал так: период 0.2 секунды, соответственно, на секунду пять разрядов. Ну и, вроде как, две секунды длительности вполне достаточно. То есть 10 разрядов. 20 разрядов получилось в виду экспериментов по уменьшению периода звучания. Так что 16 разрядов за глаза!
Огромное спасибо, rovki!

tigdin
06.04.2015, 20:49
rovki, скажите, пожалуйста, а эти кругленькие сетевые переменные не сломаются при работе? ))) Это как бы скрытые резервы, если не использовать сетевое подключение? )

rovki
06.04.2015, 21:13
Так калькулятор после заполнения ППзу можно удалить :D .но если оставить то не помещает .Да, регистр получился фактически кольцевой ..Одноразовый(1цикл) режим сами допилите ,если нужно

tigdin
06.04.2015, 22:07
Ага, вот сижу.... )))

rovki
06.04.2015, 22:30
Ага, вот сижу.... )))
Зачем сидеть немного добавить и поехали...

Алексей Геннадьевич
07.04.2015, 08:01
Как Вы думаете, в этом случае, с этим увлажнителем, стОит ли следовать стандартам?
В общем-то, нужно просто прерывисто верещать, если неисправен датчик или клапаны. Остальное -- лишь маленький бонус, не более чем... )
ГОСТы не просто-так пишутся, а исходя из физических возможностей человека и физиологических особенностей его реакции. Меньше голову ломать приходится.
Хотя-бы тревожную тональность верещалки подберёте быстрее;)

tigdin
07.04.2015, 09:39
ГОСТы не просто-так пишутся, а исходя из физических возможностей человека и физиологических особенностей его реакции. Меньше голову ломать приходится.
Хотя-бы тревожную тональность верещалки подберёте быстрее;) Здравствуйте, Алексей Геннадьевич! На выходе пьезик через реле просто, точнее бузером его называют. Подали питание и он орет... Что-то около 3 килогерц. Ну или около того... Так что выбора особо нет..


Зачем сидеть немного добавить и поехали...
rovki, здравствуйте! А я сдвиговый регистр из бибибки отковырял! Классный макрос! )

rovki
07.04.2015, 12:07
Здравствуйте, Алексей Геннадьевич! На выходе пьезик через реле просто, точнее бузером его называют. Подали питание и он орет... Что-то около 3 килогерц. Ну или около того... Так что выбора особо нет..


rovki, здравствуйте! А я сдвиговый регистр из бибибки отковырял! Классный макрос! )
регистр реверсивный кроме того

tigdin
07.04.2015, 22:27
В общем, не понял я как регистр работает... Все супер, принцип понятен, но ни фига не понял... )))

rovki
07.04.2015, 22:38
Главное что работает .Есть и более понятные для электронщика регистры сдвига ,гляньте в библиотеке макросов ,что в проекте ....:rolleyes:

tigdin
11.04.2015, 23:47
rovki, здравствуйте! В общем, решил не пищать. "Ног" не хватает. Но вот такой маленький вопрос по сдвиговому регистру. Он на схеме присоединен у выходу Q1. Если я все правильно понял, то срабатывает регистр по фронту импульса. Но за ним стоИт EXTRACT. Если мне, например, на выход Q2 нужно будет подавать синхроимпульсы (CLK), то брать их с BLINK1, по отрицательному перепаду того же импульса? Вроде бы работает, но в железе сигнал через регистр+extract успеет гарантировано "добежать" до Q1 раньше clock? Ну по принципу выставили бит на Q1, потОм строб на Q2?

rovki
12.04.2015, 07:47
Да по заднему фронту генератора синхроимпульса сдвига регистра -будет гарантировано .:rolleyes:

tigdin
12.04.2015, 20:35
rovki, здравствуйте!
Спасибо большое! Это многое меняет в проекте, с которым сейчас работаю! Долго рассказывать про него, но синхронность и чистота вывода через Ваш сдвиговый регистр позволит упростить многие элементы того, что я там наваял ))