Помогите подобрать цифровые компоненты
- Войдите на сайт для отправки комментариев
Здравствуйте, уважаемое сообщество.
Возникла следующая задача.
Имею на руках Arduino AtMega2560, Arduino USB host shield и китайский планшет на Google Android 4.
Эта колбаса между собой отлично коннектится и опрашивается.
Есть аналоговое устройство (представим что это эквалайзер или компрессор) с переменными резисторами на борту разного номинала и типа (20кОм, 50кОм, 100кОм, 500кОм, линейные и логарифмические) и парой кнопок - органы управления.
Необходимо выпаять эти переменники и кнопки и заменить их на какие-нибудь цифровые компоненты, чтобы управлять всем через Android-интерфес (просто запихнув во внутрь ардуину, а планшет приклеив сверху). По программированию вопросов не возникает, но абсолютно нехватает знаний в области радиоэлектроники.
Есть база готовых настроек переменников и кнопок устройства, необходима между ними переключаться через интерфейс ПО. При этом должна быть возможность считывать текущее положение каждого переменника.
Собственно вопрос: какие цифровые переменники подойдут в такой схеме (производитель, стоимость)? Или может нужно идти другим путем? В радиоэлектронике нуб. Хотелось бы не самое дорогое и не самое громоздкое решение.
Заранее спасибо всем откликнувшимся.
Ну кнопки - не понятно зачем менять. Кнопка это же и есть "самое цифровое устройство". Либа замкнута либо разомкнута.
Переменники менять? А зачем? Что вы хотите добится? Чем именно не устраивает переменник плюс analogRead?
Ближайшим "цифровым братом" аналогового переменника будет энкодер.
Но, честно говоря, я так, до конца и не понял что же именно вы хотите.
Толи "повысить точность" чтения показания переменников, толи "крутить програмно переменник".
Вообщем что вам нужно "читать" или "управлять"?
И то и другое. Необходимо управлять, чтобы в один клик устанавливать настройки из БД пресетов. Считывать необходимо, чтобы при подключении другого Android устройства получить текущие настройки и при необходимости сохранить их в готовый пресет.
Простите, но я по прежнему не понимаю что вы хотите.
Попробуте объяснить не "как это для пользователя выглядит", а "что вы хотите от ардуино".
Раз у вас связка с андроид работает нормально, и с програмированием нет пробелем - вынисите адроид/бд и проч. за скобки.
Какуе задачи должна выполнить именно арудина и "кнопки/переменники"?
Например "прочитать кнопку и отправить ее состояние в USB".
"Принять команду по USB" и зажечь светодиод... и т.п.
А уж что там будет андроид делать с данными, где хранить - это его личное дело :)
Что-бы не "мешать всю в кучу". Попробуйте объяснить на примере "только кнопок" или "только переменников".
Давайте виртуально "упростим", пока, пульт до одного типа устройств (наверное с кнопками проще будет).
Ок, спасибо за терпение))
Если отбросить все, то нужно:
1. Имея массив настроек переменников (пусть они будут доступны как константы в скетче) если каждый имеет положение от 1 до 128 быстро изменить их положение на такое: "первый - 45, второй - 67, третий - 90" и т.д.
2. Считать положение каждого переменника и дальше с ним что-то сделать (записать в память, передать по USB и т.д.)
Если еще короче - нужно избавиться от крутилок на устройстве, управляя крутилками и считывая их положение средствами Arduino. На какие компоненты нужно заменить эти крутилки, если сейчас эти "крутилки" имеют номиналы 20кОм, 50кОм, 100кОм и 500кОм (есть линейные, есть логирифмические), итого 15 крутилок?
Мне предложили продукцию MAXIM-DALLAS - цифровые переменники с памятью работающие через I2C. Комплект обойдется в 50$, а я пока даже понятия не имею, получится ли все мне все это подключить к AtMega2560. Хотелось бы получить ответ как выйти из положения подешевле, имеяя минимум знаний в области радиоэлектроники. Грубо говоря, чтобы с таким же успехом как "помигать светодиодом" я смог "повернуть ручку потенциометра" или "прочитать положение резистора"
"Избавится от крутилок" и " считывая их положение средствами Arduino" - это как-бы взаимоисключащая штука.
И "что-же именно" должны делать эти крутилки - вы так и не описали (может все-таки про кнопки?)
>я смог "повернуть ручку потенциометра" или "прочитать положение резистора"
А это, мягко говоря противоположные задачи. И даже, вообщем-то, не связанные между собой.
На одном входе - читаете, на другом другом "рулите". Как вход соотностися с выходом (линейно, логарифмически или еще как-то) - это уже завист от програмной части.
Читать - наверное попроще будет. http://arduino.cc/en/Tutorial/AnalogReadSerial
Если вас устраивает что резистор "помнит последние положение" и "имеет ограничители". Если нет - можете на энкодеры посмотреть (выглядят внешне очень похоже. такие-же крутилки, то "крутить можно до опупения").
"повернуть ручку потенциометра" - общего ответа уже не будет. завист от того в какую схему этот энкодер включен, какие-то токи через него идут, что и как с него замеряется в той схеме где вы его хотите "подменить на ардуину". Это может быть и "ничего не нужно, тупо проводком соеденить" и RC+цепочка плюс транзитор и т.д. и т.п.
Вообщем ставте ТЗ более конкретно. Отделяйте мухи от котлет. Дробите задачи на "как читать кнопку" (есть ответ на форуме), "как изображать кнопку" (обсуждалось), как читать переменник (энкодер и т.п.), как "изображать переменник", как "запоминатьданные при отключении питания".
Решайте эта задачи "по частям", а потом програмно соберети эти кубики "воедино". А то "сразу все гамузом" даже объяснить "что хотите" - трудно.
Я не знаю как еще можно объяснить. Попытаюсь сократить до максимума. Есть готовое устройство, на котором стоит регулятор (тембра, баланса, громкости и т.п.). В качестве регулятора - переменный резистор фирмы Alpha номиналом 100кОм. Мне нужно избавиться от его механической части полностью, заменив его на цифровой резистор, который сможет принять на какую-то ногу данные о том в какую позицию ему нужно стать, а с другой ноги в случае чего вернуть информацию о его текущем положении. И таких резисторов мне нужно 15 штук разного сопротивления. Чтобы я мог мгновенно отправить 15 резисторам информацию в какое положение им стать. Или же опросить их все чтобы узнать в каком положении находится какой. Т.е. исключить всю ручную механику, выпаяв все эти ручгые крутилки. Это вся задача.
Есть готовое устройство, на котором стоит регулятор (тембра, баланса, громкости и т.п.).
Я так понимаю вы делаете типа цифровой микшерный пульт или диджейский....,тогда вам нужно почитать по применению АЦП и ЦАП в микшерах или усилителях.
Если все проще, то обратите внимание на резисторная оптопара.
Постарался все нарисовать и описать максимально возможным для меня образом (в GIMP не силен, за рисунок не пинайте).
На рисунке:
1. Android-планшет
2.Arduino USB-Host Shield
3.Arduino AtMega2560
4.Аналоговое устройство обработки звука.
Устройство 1 с помощью устройства 2 умеет передавать любые команды на устройство 3.
Устройство 4 имеет ряд потенциометров (фирмы Alpha от 20кОм до 500кОм) для регулировки своих параметров.
Задача:
избавиться от всех ручных потенциометров на устройстве 4, сделать управление доступным только с помощью устройства 3, полностью имитируя работу ручных потенциометров. Иметь возможность опросить каждый потенциометр на устройстве 4 и вернуть данные на устройство 1.
Уже готово:
Устройства 1,2 и 3 успешно общаются между собой. Устройство 1 может передать любую команду на устройство 3 с помощью ПО и устройства 2. Устройство 3 может вернуть любые данные на устройство 1 с помощью устройства 2.
Не готово:
Устройство 3 не скомутировано с устройством 4, т.к. у автора (т.е. меня) нет познаний в области радиоэлектроники.
Автор думает, что:
1.В мире радиоэлектроники есть цифровые потенциометры, которые умеют принимать на какую-нибудь контактную ногу данные о положении, которое они должны принять, и быстро стать в это положении.
2.Эти же потенциометры другой ногой могут вернуть данные о своем текущем положении.
3.Ему подойдут цифровые потенциометры фирмы MAXIM-DALLAS, которые ему предлагают на радиорынке, он их легко скомутирует.
4.В электронике логика похожа на ту, к которой он привык в программировании.
Автор просит:
1.Не спрашивать его, зачем ему это все нужно (ему дейтсвительно это нужно).
2.Помочь сообщество ткнуть его носом на материалы или описания готовых комплектующих или схем для решения его задачи.
3.В идеале показать ссылки или маркировки готовых комплектующих, которые автор купит на радиорынке или закажет из Китая.
4.Не смеяться с того, что он кроме закона Ома мало что знает в области радиоэлектроники.
Спасибо всем кто дочитал и тем, кто может быть ответит.
Начну с последнего.
>Не смеяться с того, что он кроме закона Ома мало что знает в области радиоэлектроники.
А я все-таки поймеюсь. Грустно. Но не стого что "автор не знает", а с того что считает что это "очень мало" :) "Закон ома+здравый смысл" (логическое мышление) - этого достаточно для решеняи 80% схемотехнических задач с адуиной. Так что это уже очень не плохая база :) Знали бы вы сколько людей, почему-то, не хотят с ним разбиратся и при этом желают что-то строить на ардуино (и желательно сразу "мега-супер-проект").
А если кто и будет смеется, так "а вам не все равно"? ;)
И еще одно "отсупление": уж теперь-то вас никто не обвинит что вы "не старались объяснить". Вы уж тоже простите нас "за тупизну". Специфика форумного общения такова что не всегда просто объяснить/понять.
Ладно ближе к телу.
Путаница возникла от того, что вы, сначала немного смешали "задачу" и "один из способов решения" который вы нашли.
В целом мы имеем два подохода:
1. Который вы нашли. Не морочимся и покупаем готовые цифровые потенциометры. Только, скорее всего, мы будем читать/писать не через "одну/другую" ногу, а через "шину". То есть будем "посылать ему команду занять какое-то состояние" и послать команду "доложи о текущем состоянии". В этом случае у нас ардуина будет "тупым конвертером" между USB и шиной на которой висят "потенциометры фирмы MAXIM-DALLAS". Задачей ее будет "брать и пересылать команды/ответы". К сожалению ответить на вопрос "он их легко скомутирует" - затруднительно. Фирма даллас столько всего производит :) Если бы вы сказали какие именно потенциометры вам предлагают. Возможно было-бы легче разобратся подойдут ли они вам и как их подключать.
2. Ардуина сама будет "изображать потенциометр". Тогда задача "Считать положение каждого переменника" - для ардуины не ставится (вот она "причина непонимания друг-друга"). Переменников нет. Читать нечего. "Состояние переменников" уже хранится внутри ардуины и она должна только "докладывать" об этом, если андроид попросил. То есть задача "читать состояние переменников" стоит перед андроидом, а не перед дуиной (она сама "переменник").
В этом варианте потребуется больше хмурить мозг по поводу внешней обвзяки. Без "разбиратся" и вспоминть закон Ома - тут уже не получится. "В общем виде" - ответить уже намного сложней.
Возможно несколько вариантов "как подружить ардуину и ваше аналоговое устройство". Это может быть и RC цепочка (резистор+конденсатор), и транзистор (или каскад), и упоминавшися тут резисторная оптопара.
В идеале - нужно видеть схему того самого "аналогового устройства". Как минимум взять тестер и померять какие напряжение есть на тех выходах тех потенциометров что сейчас стоят, какие токи через него проходят.
Одно дело когда через нашу обвязку (которая должна менять сопротивление в зависимости от выходов ардуины) идет 5v/0.5mA и другое если там 12v/2A
Есть еще и третий вариант. "Фантастический". Видел только в виде готовых устройств. В продаже не встречал. Гибрид переменника и шаговика. То есть все тот же "переменник аналоговый", но у него есть моторчик который может его крутить. В муз центре видел. Пультом ДУ меняешь громкость и ручка "сама крутится". Выглядит завораживающе (хотя, конечно уже о "быстро поменять" - речь не идет). А можно подойти и рукой покрутить.
Если бы лично передо мной стаяла такая задача, я бы, наверное "брал готовые". Скорее всего компактней и надежней получится (особенно если брать "многоканальные", когда одна микруха сразу несколько потенциометров из себя изображает). Какие именно - слишком много их. Проще, все-таки, танцевать от тех что "проще достать". То есть тех что "вам предлагают". Потом гуглить их дашит, смотреть подходят ли они вам.
Кстати у далласа даже документик "как выбирать правильный дигитал пот" имеется http://www.analog.com/static/imported-files/overviews/Choosing_the_Corre...
Большое спасибо за развернутый ответ.
Насчет "фантастических потенциометров с моторчиком" (моторизированные фейдеры) - мне такие тоже показали, но их стоимость непомерно высока (есть модели до 50$ за штуку). Очень не по карману :)
Поэтому все же склоняюсь в сторону цифровых потенциометров. Ваша ссылка в итоге привела меня к чтению об SPI и I2C, я так понял именно с этим и прийдется иметь дело.
По поводу существующих потенциометров - напряжение колеблится от 2 до 3,5 вольт, ток маленький. Разрулить питание всей схемы мне обещался помочь местный
прокаженныйэлектрик. Так что я надеюсь в итоге общими усилиями все получится.Как закончу (если закончу и если меня не убъет током или я не брошу начатое) - выложу историю сюда в "проекты". Я смотрю тема связки Arduino USB-host shield и Google Android мало озвучена на форуме.
Еще раз спасибо.
Поэтому все же склоняюсь в сторону цифровых потенциометров. Ваша ссылка в итоге привела меня к чтению об SPI и I2C, я так понял именно с этим и прийдется иметь дело.
Да прийдется. Но ничего сложного в этом нет. У дуины есть их аппаратная реализация и готовые библиотки. Так что "разбиратся в тонкостях протоклоа"
- не прийдется.
С точки зрения подключения (я говорю "в общем", у конкретных моделей могут быть свои нюансы/грабли) разница между ними будет в том что "многодевайсовости" по SPI
к каждому еще один проводок нужно будет тянуть (кроме самой шины) что-бы указать "с кем им них вы хотите общатся". Или ставить еще и пару сдвиговый регистров (копейки стоит)
А в I2C - все вешаются на одни и те же два проводка.
И "к кому мы обращаемя" мы задаем просто "указывая адрес" при вызове функции.
Это означает все устройства на шине - должны иметь разные адреса. Поэтому нужно еще смотреть в даташит и убедится что производитель позволяет менять I2C адрес у устройства.
При этом, бывает например что из 7-ми бит адреса. Производитель, к примеру, "жестко задал" 5-ть бит, а вам разрешает менять - только два бита. В итоге это означает что на одну шину вы сможете повесить только четыре таких устройства одновременно.
Так что, прежде чем покупать - все-таки давайте список "что вам предлагают" :) И влюбом случае имеет смысл начинать с покупки "адын штук".
И еще. Я так понял, что некоторые из них имеют собственную память (и умеют отвечать "в каком положении стою"), а некоторые - нет. Те которые имеют - могут запоминть и при выключении, а некоторые "сбрасываются".
Подозреваю что "которые без памяти" - будут самыми дешовыми. Но будет "чуток сложней" (значит запоминать "текущие положение" нужно будет внутри ардуины).
По поводу существующих потенциометров - напряжение колеблится от 2 до 3,5 вольт, ток маленький. Разрулить питание всей схемы мне обещался помочь местный прокаженный электрик. Так что я надеюсь в итоге общими усилиями все получится.
Мц... тогда вообщем-то есть все шансы и без "цифровых обойтись". RC-цепочка (конденсатор+резистор) плюс транзистор.
Но в аналоге я уже немного "плаваю", поэтому и сказал что "я бы брал цифровые"). Возможно AlexFisher или Максим тут смогут подсказать.
Правда потреюуется еще PWM выдавать на ноги. А Pwm выходов аппаратных у меги 14-ть, а нам нужно 15-ть... Да и USB-шилд займет ноги. Значит еще с програмным PWM возится...
Вообщем, как на меня морокливо. Проще "купить". Но может ошибаюсь и более "железно-продвинутые" меня поправят.
О... Кстати про USB шилд. Он же тоже у нас "ноги займет". Скорее всего SPI (смотрите даташит на свой шилд).
Что подводит нас к тому что I2C выглядит все "симпопотней".Да и цена $50 за 15-ть штук выглядит "терпимой" для разового девайса. Не серийного. А бывают еще "многоканальные" может на них и дешевле получится.
Вот вот про всякие видео про "электронные регуляторы"
http://www.youtube.com/watch?v=G9hZy1vWOoM&feature=relmfu
http://www.youtube.com/watch?v=MvRRiFfhj7Y
По поводу что лучше SPI или I2C, на мой взгляд если не идет речь о экономии выводов дуины и не важно количество проводов от устройств к дуине SPI лучше. С программной точки зрения не важно сколько устройств у вас на шине все равно МК может работать только с одним устройством. Поэтому даже если у вас шилд будет на SPI, а потенциометры на I2C все равно МК будет работать в один момент времени только либо с I2C либо с SPI, поэтому на мой взгляд проще переберать SS нежеле дергать разные интерфейсы работать с адресами устройств и плюс к тому же SPI в разы быстрее чем I2C. SPI проще в работе и обычно SPI-цифровой потенциометр имеет только входную линию данных, потому как от него никакие данные не нужны и не нужно его опрашивать и узнавать в каком он "положении" за этим должен следить программист - что вы туда отправили в том "положении" он и есть. Что бы SPI работал в одностороннем режиме достаточно просто не подключать одну из линий, I2C всегда работает в двустороннем режиме. Вот пример как работают с одним из таких потенциометров MCP41010. Да и цена на него около 50 рублей. Хотя могу и ошибаться, честно говоря не разбирался досканально с I2C, может он тоже до гениальноти прост.
maksim
Спасибо за информацию, но я все же остановлюсь на I2C как мне подсказал leshak, мне кажется это намного проще реализовать и работать с такой штукой. Двойной потенциометр (с независимыми "ползунками") от Catalyst например CAT5221 мне обойдется всего в 3$, в его даташите я увидел, что ему можно задать один из 16 адресов, т.е. я на одну шину повешу 8 таких потенциометров (только разных номиналов) и получу как раз свои 15 "крутилок", и этим самым займу вмего пару пинов на Ардуине. Останется имитировать работу еще 3 кнопок с фиксацией (а это не проблема) и моя задача решена :)
leshak
На видео примеры работы потенциометров на up/down, не совсем то, что мне нужно... Буду покупать на I2C, это показалось мне самым простым решением. В спецификации увидел, что есть возможность писать положение в EEPROM самого потенциометра, это положение он приймет после включения питания. Это решает еще одну мою программную задачу: каждый пресет настроек в моем Android-приложении имеет 2 канала (списка настроек потенциометров) - A и B (как бы двойной пресет). B я буду хранить в EEPROM потенциометра, A - текущее положение потенциометра. И просто между ними переключаться в пределах одного пресета. При выборе другого пресета B пишем в EEPROM потенциометра, A отдаем потенциометру чтобы он принял положение. Если не прав, поправьте, пожалуйста.
Спасибо откликнувшимся, буду курить анналы.