Страница 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Нет идей?
Вывод в сериал порт в сам блок зря вставили.
При этом из блока в саму программу не передаются данные с опрашиваемого канала (нет выхода, данные отправляются в сериал порт, зачем? почему не на выход блока?).
Да и какой канал в данный момент опрашивается - непонятно. Задать номер опрашиваемого канала нечем, каналы опрашиваются в цикле.
Для чего данный блок и как им пользоваться?
Добрый день и спасибо за ответ, а то я уж было отчаялся.
принцип и описания работы, впрочем как и сам скетч, я взял отсюда
как вытащить отправку в сериал порт не представляю да и не знаю засем
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
Благодарю за помощь, честно говоря не ожидал, что столько человек откликнется!
Работа исходного кода
Хочу сказать сразу
Возможно я сделал ошибки в создании и подключении блоков и метода перебора
Мультиплексор от
Naladchik написал в личку
Код от
Ushakovkz я не понял как правильно назначить пины ардуино
Мультиплексор от
edyapd - я увеличил частоту от 20 мс до 500 мс что бы смотреть изменения
Мультиплексор от
Labu559 схему не пересобирал, включил как есть, только пины переназначил
Мультиплексор от меня
работает, но все равно криво - наверное, намудрил что то с частотой обновления
multiplexor.flp
Блок мультиплексора 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, а не на земле постоянно.
Приятно вести разговор с людьми, которые понимают о чём речь.
