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

Помогите создать блок мультиплексора 74HC4051

Создаем свой блок. Вопросы, помощь знатоков.
konsys
Сержант
Сообщения: 103
Зарегистрирован: 13.07.2017{, 23:21}
Репутация: 0
Контактная информация:

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

#1

Сообщение konsys » 17.04.2021{, 12:03}

Добрый день.
есть скетч работы мультиплексора 74HC4051
AnalogMultiplexing.ino
(746 байт) 47 скачиваний
я попробовал создать пользовательский блок
74HC4051_(Code_-_Basic).ubi
(36.87 КБ) 64 скачивания
Посмотрите пожалуйста правильно ли я его сделал?
Правильно ли назначил и присвоил типы данных на входы и выходы блока?

konsys
Сержант
Сообщения: 103
Зарегистрирован: 13.07.2017{, 23:21}
Репутация: 0
Контактная информация:

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

#2

Сообщение konsys » 18.04.2021{, 20:49}

Нет идей?

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

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

#3

Сообщение Naladchik » 19.04.2021{, 07:47}

konsys писал(а):
18.04.2021{, 20:49}
Нет идей?
Вывод в сериал порт в сам блок зря вставили.
При этом из блока в саму программу не передаются данные с опрашиваемого канала (нет выхода, данные отправляются в сериал порт, зачем? почему не на выход блока?).
Да и какой канал в данный момент опрашивается - непонятно. Задать номер опрашиваемого канала нечем, каналы опрашиваются в цикле.
Для чего данный блок и как им пользоваться?
Win10-64. FLProg Portable.
Изображение

konsys
Сержант
Сообщения: 103
Зарегистрирован: 13.07.2017{, 23:21}
Репутация: 0
Контактная информация:

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

#4

Сообщение konsys » 19.04.2021{, 11:18}

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

как вытащить отправку в сериал порт не представляю да и не знаю засем
1. Нет входа задания канала. Каналы перебираются по циклу. Как определить с какого канала поступили данные?
2. Нет выхода данных с канала. Как Вы планируете использовать в программе данные с этого блока?
3. Внутрь блока вставлен вывод в сериал порт - могут быть конфликты с другими частями/блоками программы.

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

Ushakovkz
Рядовой
Сообщения: 4
Зарегистрирован: 27.03.2021{, 09:19}
Репутация: 1
Откуда: Казахстан
Имя: Alexandr

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

#5

Сообщение Ushakovkz » 20.04.2021{, 06:49}

Добрый день! под свои нужды состряпал вот так.
в блоке поменяй под свои пины.
Вложения
74ср4051_(Code_-_Basic).ubi
(62.56 КБ) 71 скачивание

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

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

#6

Сообщение Naladchik » 20.04.2021{, 11:44}

Ushakovkz,
Код из Вашего блока:
...
if(Mux1_State[0] < 100) {a1 = 1; } else {(a1 = 0);}
...
Получается если на канале нет сигнала "Mux1_State[(х)] < 100", то на выходе блока значение - "a(х+1) = (х+1)",
иначе, если есть сигнал то на выходе блока нуль - "a(х+1) = 0"
Как то нелогично, или это так и задумано?
Win10-64. FLProg Portable.
Изображение

Ushakovkz
Рядовой
Сообщения: 4
Зарегистрирован: 27.03.2021{, 09:19}
Репутация: 1
Откуда: Казахстан
Имя: Alexandr

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

#7

Сообщение Ushakovkz » 20.04.2021{, 12:40}

делал блок под свои нужды, "опрос кнопок".
Если не нажимать кнопку то на выходе 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 секунд:
вот пример, делал на скорую руку.
Вложения
Безымянный.jpg
Schematic_4051.PDF
(31.19 КБ) 48 скачиваний

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

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

#8

Сообщение Naladchik » 20.04.2021{, 13:11}

Ushakovkz,
Понял.
Win10-64. FLProg Portable.
Изображение

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

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

#9

Сообщение Labu559 » 20.04.2021{, 14:02}

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

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

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

#10

Сообщение Naladchik » 20.04.2021{, 14:28}

Labu559 писал(а):
20.04.2021{, 14:02}
Нужно чистить всё лишнее
Золотые слова!
Win10-64. FLProg Portable.
Изображение

Ushakovkz
Рядовой
Сообщения: 4
Зарегистрирован: 27.03.2021{, 09:19}
Репутация: 1
Откуда: Казахстан
Имя: Alexandr

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

#11

Сообщение Ushakovkz » 20.04.2021{, 16:28}

Не подскажете?
кто нибудь сможет помочь с таким блоком, реально уже не туда копаю.
viewtopic.php?p=102787#p101858

konsys
Сержант
Сообщения: 103
Зарегистрирован: 13.07.2017{, 23:21}
Репутация: 0
Контактная информация:

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

#12

Сообщение konsys » 21.04.2021{, 15:20}

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

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

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

#13

Сообщение Labu559 » 22.04.2021{, 03:48}

konsys писал(а):
21.04.2021{, 15:32}
Labu559 писал(а):
20.04.2021{, 14:02}
Давайте в данной теме обсуждать мультиплексор, а инструмент в другой теме.
Какой именно мультиплексор предлагаете обсуждать? Тот, что в 1-м сообщении? О нём уже всё сказано в сообщении ув. Naladchik, и более добавить нечего.
konsys писал(а):
21.04.2021{, 15:32}
Собрал макетку - буду пробовать 4 варианта программ мультиплексора
5 -й вариант для случая, если стенка окажется крепче черепа:Показать
Layout_74HC4051.png
Multiplexer74HC4051.flp
(293.98 КБ) 45 скачиваний
Странно, помогаешь человеку, а в ответ получаешь словесные гадости и минусы, как бы на 51-ом уже, не "молодо-зелено". :(
Последний раз редактировалось Labu559 22.04.2021{, 12:04}, всего редактировалось 1 раз.

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

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

#14

Сообщение edyapd » 22.04.2021{, 05:03}

Labu559, я вижу, что у вас собран проект в Протеусе. Если вы ещё не удалили его, попробуйте загнать в него вот это
Multiplexer74HC4051_v2.flp
(252.3 КБ) 58 скачиваний

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

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

#15

Сообщение Naladchik » 22.04.2021{, 06:16}

Ну тогда и я свой вариант предложу, может кому то будет интересно.
74HC4051_(Code_-_Professional).ubi
(337.96 КБ) 62 скачивания
Версия FLP 7.3.5
Вся необходимая информация в описании блока.
Из особенностей: пины задаются в самом блоке, 2 режима работы (номер канала/все каналы).
Win10-64. FLProg Portable.
Изображение

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

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

#16

Сообщение Labu559 » 22.04.2021{, 10:25}

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

Исправил вторую симуляцию в Протеусе.
Последний раз редактировалось Labu559 22.04.2021{, 12:21}, всего редактировалось 1 раз.

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

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

#17

Сообщение Naladchik » 22.04.2021{, 11:59}

del.
Win10-64. FLProg Portable.
Изображение

konsys
Сержант
Сообщения: 103
Зарегистрирован: 13.07.2017{, 23:21}
Репутация: 0
Контактная информация:

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

#18

Сообщение konsys » 22.04.2021{, 12:32}

Благодарю за помощь, честно говоря не ожидал, что столько человек откликнется!
Работа исходного кода


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

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

Мультиплексор от edyapd - я увеличил частоту от 20 мс до 500 мс что бы смотреть изменения


Мультиплексор от Labu559 схему не пересобирал, включил как есть, только пины переназначил


Мультиплексор от меня
работает, но все равно криво - наверное, намудрил что то с частотой обновления
multiplexor.flp
(421.48 КБ) 42 скачивания
Последний раз редактировалось konsys 22.04.2021{, 14:05}, всего редактировалось 2 раза.

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

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

#19

Сообщение edyapd » 22.04.2021{, 13:18}

Labu559 писал(а):
22.04.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.....
Либо находить задержку на считывание, после переключения адресов.

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

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

#20

Сообщение Labu559 » 22.04.2021{, 15:51}

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

Ответить

Вернуться в «Разработка пользовательских блоков»