AVR + Си + мультиплексор = Матрица

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Там только пдключение к ЮСБ и всё! Больше ничего нет. Жмём на одну из этих 64-х кнопок, сигнал обрабатывается, и в зависимости от результата посылается число от 1 до 64.

Порты остальные всё заняты будут. Здесь я предполагаю будет возможность обработки одновременно нажатых нескольких кнопок. И деталей минимум. Вместо 8-ми мультиков, всего 2.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

В сторону: чем-то это напоминает маторичика.
Docendo discimus
Контактная информация:
Реклама
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

ibiza11, вы всё правильно понимаете). Сейчас таким способом у меня свободно работают 8 мультиплексоров. Все они настроены на приём данных. Ну а если принцип работы не понятен, то попытаюсь ещё подробней разъяснить. Вот к примеру:
Смотрим на скрин который я прислал. Пусть левый МК отвечает за выход.
Теперь смотрим только на сетку. Подаём на верхнюю синюю дорожку высокий уровень. Теперь поочерёдно считываем инфу со второго мультика (тоесть, поочерёдно опрашиваем его ноги, они зелёные.) И так поочерёдно со всеми ногами. Когда кнопка нажата, то на зелёную ногу пойдёт сигнал с синей.
Сейчас основной вопрос в том, как сделать ВЫХОД с мультиплексора. ВХОД работает нормально , а выход пропадает в мультиплексоре.

pyzhman маторичика - а это что такое? :)
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

http://radiokot.ru/forum/viewtopic.php?f=3&t=48284. Читать с начала до конца. :)
Docendo discimus
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

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

Сообщение Jack_A »

pyzhman писал(а):В сторону: чем-то это напоминает маторичика.
Ничего личного, никого не желая обидеть, но тут автоматом всплыло из В.Высоцкого :

"Он над нами издевался --
Сумасшедший, что возьмешь..."
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Затея хорошая, если это опрос 64-ех кнопок двумя лапками мк. Но вы бы привели схему. Она даст гораздо больше нежели все описания; лучше один раз увидеть, чем сто раз услышать.
Docendo discimus
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

isx писал(а):Подаём на верхнюю синюю дорожку высокий уровень. Теперь поочерёдно считываем инфу со второго мультика (тоесть, поочерёдно опрашиваем его ноги, они зелёные.)
Вы здесь сами себе противоречите:
Если "подаем на верхнюю синюю дорожку высокий уровень", то на адресных входах мультиплексора установившееся состояние, например 001. Далее Вы пишете "поочерёдно считываем инфу со второго мультика". Как Вы это будете делать? Изменять состояние адресных входов? Но ведь они у Вас объединены с первым "мультиком"(с), следовательно он тоже будет переключаться, одновременно со вторым. :kill:
Ставим плюсы: )
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

На другом форуме сейчас тоже обсудили этот момент. Решил освободить ещё 3 пина для второго мультика. Теперь проблема с выходом. Почему из мультика ничего не выходит не смотря на то, что с ноги МК выходит высокий уровень...
Ну показал же скрин, как ещё подробней то? Чес слово не знаю. Схемы нет, собиралось всё на ходу. Остальные элементы сейчас значения не имеют (вам ведь не станет понятней если я кварц нарисую и светодиоды на пинах)...
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

Думаю тут надо уже думать не о принципе или программе, а проверять работу самого мультиплексора.
для полноты картины приведу схему, которую неспеша набросал за 15 минут.
Изображение
неужели так сложно было это сделать??? вместо того, чтобы разводить флуд аж на 2 страницы, после которых понятно лишь одно: если бы автор нарисовал схему с самого начала, то вопроса бы не возникло, как такового или вопрос ограничился бы одним ясным ответом - разделить адресные шины.
Вложения
Schematic Prints.PNG
Схема
(67.84 КБ) 1178 скачиваний
Ставим плюсы: )
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Мультиплексоры исправны. Проверял неоднократно...
Мне вот что ещё написали на другом форуме:
а сам мультиплексор переводил в режим демельтиплексора ? т.е сигнал на com in/out менял ?
Про это я не в курсе... Как это делается никто не знает?
ibiza11 Это то же самое что и я делал, только по другому нарисовано. Схем я никогда не рисовал таких, а если б нарисовал чё нидь не так, то потом тут чёрт пойми что было. Вы же всё прекрасно поняли с первого раза и без иллюстраций, наверное другие просто не дочитали или прочли невнимательно......
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

как вы проверяли что они исправны?
для вашего сведения у этого мультиплексора нет настроек "in/out" и потому он называется аналоговым, что проводит ток в обе стороны.
вся информация по микросхеме содержится в ее документации и я вам советую изучить ее. если у вас проблемы с английским языком, при должном желании можно найти русскоязычную документацию на микросхему в интернете. также существует вариант найти советский аналог этой микросхемы и почитать на нее описание, которых в гугле навалом.
Ставим плюсы: )
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Как ВХОДЫ они работают исправно (все 8 мультиков) как выход ни один. Документацию уже читаю, пытаюсь найти причину...
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

ibiza11, вы дружище заслуживаете монумента "Железные нервы, или отсутствие таковых". Я восхищен.
:)
Docendo discimus
Контактная информация:
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

За что ему ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ спасибо)
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Блин, теперь ещё одна проблема всплыла... Первый мультик стоял на пинах PB2 PB3 и PB4 . Освободил ещё под второй мультик пины PB0 PB1 и PB5, подключаю, а ничё не пашет(сигнал принимает только с нулевого входа мультиплексора, а остальные вообще "не в теме")...

PORTB = 0b10000000;
DDRB = 0b01111111;
..............
PORTB &= 0b11011100;
PORTB |= multa << 2;

Вот код на СИ, вроде всё верно. Может пины подряд идти должны(больше не знаю к чему прикопаться)?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

повторяю вопрос "как вы их проверяли?"
вы только и твердите, что ничего не работает. ваши посты напоминают отчет о результате, а не описание процесса. для того, чтобы кто-нибудь мог вам помочь, нужно описать все свои действия, вывести читателя к проблеме, а не тыкать в нее и говорить "ниче не пашет". объясните нормально, разложите все по полочкам.
Ставим плюсы: )
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Вообщем проверял так:
Есть у меня устройство некое (микшер самопальный) У него на мультиплексорах весит потенциометр (как делитель напряжения). Напряжение регулируется от 0 до 5В. В этом промежутке на каждые 5 мВ нога реагирует изменением сигнала (от 0 до 1024 соответственно). На каждой ноге такого мультиплексора весит по одному делителю, и когда сигнал изменяется, то в компьютер идёт миди команда (от 0х00 до 0x7f соответственно). Вот на место этого мультиплексора я ставил свои подопытные, и микшер исправно работает...

Второй мультиплексор я поставил, всё заработало... Нужно было изменить код, так как шли пины не по порядку а с разрывом (0; 1 и 5):
PORTB |= (multa & 3)|((multa & 4)<<3);

Осталась только проблема с демультиплексированием. Выхода нет по прежнему..
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

pyzhman, только сейчас заметил Ваш пост) Спасибо) Эх погубит меня доброта)

isx, так бы и сказали, что проверили мультиплексоры в другом устройстве. зачем говорить про всякие там 5мВ и потенциометры...
в общем не знаю, что вы там делаете, весь код вы не выкладываете. пишу так, как я себе это представляю.
Изображение
Код специально написан и сделан скрин, дабы лень истреблять))) хоть как то)
Вложения
mux_code.png
(46.87 КБ) 1014 скачиваний
Ставим плюсы: )
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Спасибо за код, но я его как то поверхностно воспринимаю (в школе бейсик учил, и месяца два назад начал с си знакомство). Код то могу выложить, не очень секретный :))
if (usbInterruptIsReady())
{ // if no key event check analog input
if (multa == 7 ) {multa = 0;} else {multa++;}

PORTB &= 0b11011100;
PORTB |= (multa & 3)|((multa & 4)<<3); // change mux input line PB4..PB2
_delay_ms(1);

for(multt=0;multt<=5;multt++){

PORTB &= 0b11100011;
PORTB |= multt << 2; // change mux input line PB4..PB2
_delay_ms(1);
valuea = adc(5);
// hysteresis
if (adcOld[5 + multt*10] - valuea > 7
|| adcOld[5 + multt*10] - valuea < -7) {

adcOld[5+multt*10] = valuea;
// MIDI CC msg
midiMsg[0] = 0x0b;
midiMsg[1] = 0xb0;
midiMsg[2] = multt; // cc 70..77
midiMsg[3] = valuea >> 3;
sendEmptyFrame = 0;
usbSetInterrupt(midiMsg, 4);
};


}




}

Касательно вашего кода. Делали ли вы какие нибудь различая при использовании микросхемы как мультиплексор и демультиплексор?

Вот вообщем что я делал:
В вышеуказаном коде я подключал мультики как входы. Оба сигнал воспринимают нормально.
Затем 3-ю ногу (которая должна принимать сигнал и мультиплицировать его) первого мультика я кидал на землю, но на выходе у него ничего не выходило ни из одной ноги.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»