Страница 1 из 2

Блок мультиплексора 74HC4051 из скетча

Добавлено: 17 апр 2021, 12:03
konsys
Добрый день.
есть скетч работы мультиплексора 74HC4051
AnalogMultiplexing.ino
я попробовал создать пользовательский блок
74HC4051_(Code_-_Basic).ubi
Посмотрите пожалуйста правильно ли я его сделал?
Правильно ли назначил и присвоил типы данных на входы и выходы блока?

Блок мультиплексора 74HC4051 из скетча

Добавлено: 18 апр 2021, 20:49
konsys
Нет идей?

Блок мультиплексора 74HC4051 из скетча

Добавлено: 19 апр 2021, 07:47
Naladchik
konsys писал(а): 18 апр 2021, 20:49Нет идей?
Вывод в сериал порт в сам блок зря вставили.
При этом из блока в саму программу не передаются данные с опрашиваемого канала (нет выхода, данные отправляются в сериал порт, зачем? почему не на выход блока?).
Да и какой канал в данный момент опрашивается - непонятно. Задать номер опрашиваемого канала нечем, каналы опрашиваются в цикле.
Для чего данный блок и как им пользоваться?

Блок мультиплексора 74HC4051 из скетча

Добавлено: 19 апр 2021, 11:18
konsys
Naladchik писал(а): 19 апр 2021, 07:47
konsys писал(а): 18 апр 2021, 20:49Нет идей?
Вывод в сериал порт в сам блок зря вставили.
При этом из блока в саму программу не передаются данные с опрашиваемого канала (нет выхода, данные отправляются в сериал порт, зачем? почему не на выход блока?).
Да и какой канал в данный момент опрашивается - непонятно. Задать номер опрашиваемого канала нечем, каналы опрашиваются в цикле.
Для чего данный блок и как им пользоваться?
Добрый день и спасибо за ответ, а то я уж было отчаялся.
принцип и описания работы, впрочем как и сам скетч, я взял отсюда
https://www.youtube.com/watch?v=OgaeEiHemU4
как вытащить отправку в сериал порт не представляю да и не знаю засем
1. Нет входа задания канала. Каналы перебираются по циклу. Как определить с какого канала поступили данные?
2. Нет выхода данных с канала. Как Вы планируете использовать в программе данные с этого блока?
3. Внутрь блока вставлен вывод в сериал порт - могут быть конфликты с другими частями/блоками программы.

1) в порядке очередности через точку с запятой
2)
005.jpg
3) за это не знаю - а как правильно
1. Два входа. Разрешение работы блока и задание номера опрашиваемого канала.
2. Один выход. Данные с опрашиваемого канала.
3. Номера пинов для подключения модуля должны задаваться в параметрах блока, а не его выходами
1) а зачем разрешать? пусть фигачит цикл при включении устройства? или разрешение обязательно?
2) один выход с данными есть
3) если честно не понял

Блок мультиплексора 74HC4051 из скетча

Добавлено: 20 апр 2021, 06:49
Ushakovkz
Добрый день! под свои нужды состряпал вот так.
в блоке поменяй под свои пины.

Блок мультиплексора 74HC4051 из скетча

Добавлено: 20 апр 2021, 11:44
Naladchik
[ref]Ushakovkz[/ref],
Код из Вашего блока:
...
if(Mux1_State[0] < 100) {a1 = 1; } else {(a1 = 0);}
...
Получается если на канале нет сигнала "Mux1_State[(х)] < 100", то на выходе блока значение - "a(х+1) = (х+1)",
иначе, если есть сигнал то на выходе блока нуль - "a(х+1) = 0"
Как то нелогично, или это так и задумано?

Блок мультиплексора 74HC4051 из скетча

Добавлено: 20 апр 2021, 12:57
Ushakovkz
делал блок под свои нужды, "опрос кнопок".
Если не нажимать кнопку то на выходе 1023, при нажатии прыгает от 20 до 0 поэтому от поставил от фонаря "< 100"

if(Mux1_State[0] < 100) {a1 = 1; } else {(a1 = 0);}
если номер в массиве равен 0 и значение меньше 100 - записать в переменную int а1-1, иначе а1 = 0
if(Mux1_State[1] < 100) {a2 = 2; } else {(a2 = 0);}
если номер в массиве равен 1 и значение меньше 100 - записать в переменную int а2 - 2, иначе а2 = 0
...................................................................и.т.д.

Отправлено спустя 17 минут 17 секунд:
вот пример, делал на скорую руку.

Блок мультиплексора 74HC4051 из скетча

Добавлено: 20 апр 2021, 13:11
Naladchik
[ref]Ushakovkz[/ref],
Понял.

Блок мультиплексора 74HC4051 из скетча

Добавлено: 20 апр 2021, 14:02
Labu559
konsys писал(а): 19 апр 2021, 11:18 а зачем разрешать? пусть фигачит цикл при включении устройства? или разрешение обязательно?
С таким подходом, даже при успешной реализации Вашего проекта играть вживую/совершенствовать технику игры/получать удовольствие на таком инструменте будет невозможно. Время от нажатия клавиши до начала воспроизведения семпла (ноты) должно быть как можно меньше и не превышать ~20mSec (из моего практического опыта) и так-же с отпусканием клавиши/прекращением воспроизведения. Повторю для концентрации внимания: для живой игры, а не запуска секвенсера (лупа) как на многих подобных видео из Youtube (например). Для примера в моем Roland-е рассинхронизация (задержка) живой игры с автоакомпаниментом равна 7 mSec. При использования в качестве семплера внешнего устройства (особенно програмного, VST/DXi) задержка соответственно увеличивается. Нужно чистить всё лишнее, разбивать микропрограмму на отдельные части/выполняемые только по определённому условию/совпадению условий. Применение аналогового мультиплексора для МИДИ клавиатур связано по моему мнению с аналоговыми сигналами от клавиатуры для определения скорости нажатия клавиши и послекасания (MIDI parameters- velocity,aftertouch). Для саксофона роль первого параметра задается (вероятно) датчиком давления воздуха. Другие аналоговые параметры МИДИ (или SysEx сообщения) для GM их 128 не являются настолько критичными к скорости отработки. На мой взгляд нажатие/отпускание клавиш должно обрабатываться мгновенно, по внешнему прерыванию, запускать алгоритм определения ноты (номер клавиши/сочетания клавиш - к счастью это одноголосный инструмент) и уровня её громкости, а остальные параметры (в том числе легато), рассчитываться и корректироваться уже по ходу воспроизведения семпла. Это моё личное мнение и опыт использования (не проектирования !!!) клавишных инструментов и можете игнорировать это сообщение при наличии твёрдой уверенности в успешном исходе Вашего начинания. :) Желаю успехов.
Я рассмотрел эту тему в контексте этой другой темы ув. ТС, как общий подход к программированию МК.

Блок мультиплексора 74HC4051 из скетча

Добавлено: 20 апр 2021, 14:28
Naladchik
Labu559 писал(а): 20 апр 2021, 14:02 Нужно чистить всё лишнее
Золотые слова!

Блок мультиплексора 74HC4051 из скетча

Добавлено: 20 апр 2021, 16:28
Ushakovkz
Не подскажете?
кто нибудь сможет помочь с таким блоком, реально уже не туда копаю.
viewtopic.php?p=102787#p101858

Блок мультиплексора 74HC4051 из скетча

Добавлено: 21 апр 2021, 15:32
konsys
Ushakovkz писал(а): 20 апр 2021, 06:49 Добрый день! под свои нужды состряпал вот так.
в блоке поменяй под свои пины.
Собрал макетку - буду пробовать 4 варианта программ мультиплексора
Labu559 писал(а): 20 апр 2021, 14:02
Давайте в данной теме обсуждать мультиплексор, а инструмент в другой теме.

Блок мультиплексора 74HC4051 из скетча

Добавлено: 22 апр 2021, 03:48
Labu559
konsys писал(а): 21 апр 2021, 15:32
Labu559 писал(а): 20 апр 2021, 14:02
Давайте в данной теме обсуждать мультиплексор, а инструмент в другой теме.
Какой именно мультиплексор предлагаете обсуждать? Тот, что в 1-м сообщении? О нём уже всё сказано в сообщении ув. [ref]Naladchik[/ref], и более добавить нечего.
konsys писал(а): 21 апр 2021, 15:32 Собрал макетку - буду пробовать 4 варианта программ мультиплексора
[spoiler title=5 -й вариант для случая, если стенка окажется крепче черепа:]
Layout_74HC4051.png
Multiplexer74HC4051.flp
[/spoiler]
Странно, помогаешь человеку, а в ответ получаешь словесные гадости и минусы, как бы на 51-ом уже, не "молодо-зелено". :(

Блок мультиплексора 74HC4051 из скетча

Добавлено: 22 апр 2021, 05:03
edyapd
[ref]Labu559[/ref], я вижу, что у вас собран проект в Протеусе. Если вы ещё не удалили его, попробуйте загнать в него вот это
Multiplexer74HC4051_v2.flp

Блок мультиплексора 74HC4051 из скетча

Добавлено: 22 апр 2021, 06:16
Naladchik
Ну тогда и я свой вариант предложу, может кому то будет интересно.
74HC4051_(Code_-_Professional).ubi
Версия FLP 7.3.5
Вся необходимая информация в описании блока.
Из особенностей: пины задаются в самом блоке, 2 режима работы (номер канала/все каналы).

Блок мультиплексора 74HC4051 из скетча

Добавлено: 22 апр 2021, 10:25
Labu559
edyapd писал(а): 22 апр 2021, 05:03 [ref]Labu559[/ref], ... попробуйте загнать в него вот это Multiplexer74HC4051_v2.flp
Здравствуйте ув. Эдуард, рад Вашему возвращению! По Вашему проекту: кажется понял Вашу мысль (циклический автоскан)- работает отлично, но пришлось включатель INH выхода 4051 заземлить (согласно Datasheet) и кнопки как елемент/способ переключения в таком случае конечно лишние [spoiler title= Симуляция и схема.]
EduardVerProteus.png
[/spoiler]
Naladchik писал(а): 22 апр 2021, 06:16 может кому то будет интересно.
Конечно интересно, по крайней мере мне, спасибо Вам! Тоже работает отлично! [spoiler title= До кучи:]
NaladchikVerProteus.png
Multiplexer74HC4051_Naladchik.flp
[/spoiler]
Вам успехов и всем нам меньше агрессии и больше уважения в конце Большого Поста и накануне Светлого Праздника!

Исправил вторую симуляцию в Протеусе.

Блок мультиплексора 74HC4051 из скетча

Добавлено: 22 апр 2021, 11:59
Naladchik
del.

Блок мультиплексора 74HC4051 из скетча

Добавлено: 22 апр 2021, 12:32
konsys
Благодарю за помощь, честно говоря не ожидал, что столько человек откликнется!
Работа исходного кода
https://youtu.be/4MfbqGPqIF0

Хочу сказать сразу
Возможно я сделал ошибки в создании и подключении блоков и метода перебора
Мультиплексор от Naladchik написал в личку

Код от Ushakovkz я не понял как правильно назначить пины ардуино

Мультиплексор от edyapd - я увеличил частоту от 20 мс до 500 мс что бы смотреть изменения
https://youtu.be/Y-wUalq9JWg

Мультиплексор от Labu559 схему не пересобирал, включил как есть, только пины переназначил
https://youtu.be/TDh6UEC7LrM

Мультиплексор от меня
работает, но все равно криво - наверное, намудрил что то с частотой обновления
multiplexor.flp
https://youtu.be/9i3V1hGeTn8

Блок мультиплексора 74HC4051 из скетча

Добавлено: 22 апр 2021, 13:18
edyapd
Labu559 писал(а): 22 апр 2021, 10:25 По Вашему проекту: кажется понял Вашу мысль (циклический автоскан)- работает отлично, но пришлось включатель INH выхода 4051 заземлить (согласно Datasheet) и кнопки как елемент/способ переключения в таком случае конечно лишние
Спасибо, что опробовали. Да, я забыл упомянуть о сигнале выбора микросхемы мультиплексора, там изменения всё правильно. Ну а кнопки они конечно никак не влияют, так как не участвуют в коде.
Меня смутило несколько другое. И вашем и в моём проекте дважды отправляется один и тот же канал. Сперва со старыми данными, потом с обновлёнными. И кажется я нашёл причину. Нужно в блок отправки, на вход send подавать сигнал разрешения с выхода R-триггера, который разрешает запись переменной Input(в моём проекте). В вашем думаю тоже можно обойтись косметическими изменениями, чтобы не было двойной отправки.

Теперь из личного опыта работы с мультиплексорами. Я не использовал 4051, не знаю как она будет работать. Использовал её советский аналог КП2. Так вот, при напряжении питания 3.3В, её можно было опрашивать не чаще 2 раз в секунду, иначе она не успевала переключаться и выдавала всякий мусор. Но для моего проекта это было не критично, так как я собирал данные по освещённости и влажности.
Второе, пока я искал как избавиться от мусора на выходе мультиплексора, наткнулся на обсуждение снятия сигнала с DRUM-установки. Там тоже боролись с тем, что шёл перенос сигнала с предыдущего канала. При этом чем сильнее был сигнал, тем он сильнее влиял. Они пришли к выводу, что нужно жертвовать одним входом на мультиплексоре, заземляя его. И считывание производить чередуя с ним. Например 0 вход заземлён, тогда считывание будет выглядеть как 1-0-2-0-3-0-4-0-5-0-6-0-7-0-1.....
Либо находить задержку на считывание, после переключения адресов.

Блок мультиплексора 74HC4051 из скетча

Добавлено: 22 апр 2021, 15:51
Labu559
edyapd писал(а): 22 апр 2021, 13:18 Меня смутило несколько другое. И вашем и в моём проекте дважды отправляется один и тот же канал.
Ув.Эдуард, нет повода для смущений. Включив порядок выполнения блоков, всё становится на свои места- отправка в UART по изменению данных, сначала отправляется значения счётчика, потом значение АЦП и это две (вторая и предпоследняя) части одной строки. На самом деле данные по отдельности меняются один раз. [spoiler title= Конечно в наших проектах можно вывод в монитор легко поправить: ]
New4051MUX_DMX.png
[/spoiler] А в проекте Ув. Павла это все происходит неразрывно (атомарно?) в пользовательском блоке.
edyapd писал(а): 22 апр 2021, 13:18 ...её можно было опрашивать не чаще 2 раз в секунду, иначе она не успевала переключаться и выдавала всякий мусор...Они пришли к выводу, что нужно жертвовать одним входом на мультиплексоре, заземляя его...
И я о том же, об практическом опыте, потому у меня в проекте стоит слабо подтягивающий к земле аналоговый выход резистор, и в момент переключения я сначала кратковременно отключаю выход мультимплексора (подаю HIGH на INH), пока идет расчёт данных, а PULLDOWN делает свою работу с А0. Кроме того в наших версиях можно использовать несколько мультиплексоров на единственном общем аналоговом входе и на уже используемых (тоже общие для всех) цифровых А, В, С, управляя по отдельности выводом INH для каждого мультиплексора раздельными выходами МК. Для таких именно случаев у меня отдельный INH, а не на земле постоянно.
Приятно вести разговор с людьми, которые понимают о чём речь. :)