Управление аналоговым ТБ с помощью Arduino

Тема в разделе "Arduino & Shields", создана пользователем Salk, 3 окт 2014.

?

Реализуема ли моя идея, с цифровым управлением 3-х канальной аудио-системы

Голосование закрыто 16 окт 2014.
  1. Да, ничего сложного в этом нет

    100,0%
  2. Нет, проще собрать на готовых аудио процессорах с функциями ТБ (TDA8425, TDA7318, TDA7439 и т.д)

    0 голосов
    0,0%
  1. ИгорьК

    ИгорьК Давно здесь Команда форума

    Ну явно видно, что сначала курсор надо установить, а потом case выполнять. Он же везде в оду позицию ставится.
    Потом можно избавиться от пробелов в тексте, путем вычисления его длины, вычитания из 16 и установки курсора в позицию 1/2 от вычитания.
    Так ли необходимы уголки?
    Печать можно организовать в виде функции с передачей ей указателя.
    Как-то так.
     
    Последнее редактирование: 4 июн 2015
  2. Salk

    Salk Гик

    Да, действительно. Недооценивал "вес" пробелов и "лишних" знаков на LCD. Сделал все, что Вы сказали: упростил конструкцию, убрал лишние пробелы, сократил некоторые названия станций, курсор вынес один раз перед switch. Правда сейчас при смене станции, экранчик "моргает" - очищается экран перед выводом нового названия станции, да ладно. Раньше я за счет уголков и пробелов просто затирал старые станции.
    Удалось выиграть аж ~15%
    Думаю, хватит чтобы завершить скетч :)
    Спасибо.
     
  3. geher

    geher Гуру

    Строковые константы и большие массивы данных с начальным заполнением, можно загнать в progmem (флэш, куда пишется программа) и тягать оттуда по мере необходимости. Там места всяко больше, чем в ОЗУ.

    Уголки и пробелы можно выводить отдельно от остальной строки. Это тоже теоретически должно помочь сэкономить память, поскольку в приведенном варианте кода уголки хранились с каждой строкой. а при выделении одинакового блока в отдельную строку будет храниться один экземпляр. По крайней мере так по умолчанию делается во всех компиляторах языка C/C++ (дубликаты строк сводятся в одну), Сомневаюсь, что для ардуины сделали исключение.
     
    Salk нравится это.
  4. КвазИ

    КвазИ Нуб

    кому интересно я уже реализовал проект на AD5206 вернее программную часть и проверил
    суть - регулятор громкости одновременно всех каналов с помощью ИК пульта и энкодера с кнопкой (для функции приглушения звука)
    на пульте есть тоже mute и power (выключает включает усилитель)
    при пропадании питания значение громкости не сбрасываеться а запоминаеться
    и самое главное на этом потенциометре не слышны щелчки при изменении громкости ну вернее они слышны тока оч оч слабо когда ухо к динамику приставишь...

    так что если что готов помочь) хотя это мое первое знакомство с ардуино
     
    vitos08 нравится это.
  5. Salk

    Salk Гик

    Круто, поздравляю!
    Питание Цифровых Потенциометров (AD5206) берете от Arduino 5v?
    Земли Arduino и земли усилителя соединены где-то или отдельно друг от друга?
    Когда убавляете громкость до самого минимума, звук полностью заглушается или слышно ещё что-то?
    Искажений при большой входной амплитуде сигнала нет?
    Для запоминаний значений громкости используете EEPROM?
    Вы только управление громкостью будете делать, без темброблока?

    Ну и на последок, где брали и по чем такие прелести AD5206 ?
    Я обыскался их в своё время, только AD7376 нашел из приемлемых.
    Радует, что в AD5206 256 градаций, у AD7376 их 128. И порой шагов недостаёт, особенно заметно на малой громкости.

    Публикуйте здесь свои наработки, фото, видео, я скоро тоже подтянусь :)
     
  6. КвазИ

    КвазИ Нуб

    питание вместе и ардуино и потенциометр земли через 0,1мкФ соеденил фона стало гораздо меньше
    да звук проподает полностью при 0 но я на дисплее (2 восьмисегментных индикатора) отоброжаю макс 99
    т.е. я использовал map(Pos, 0, 99, 0, 255)
    искажения не проверял но уверен что будут т.к. максимальное входное напряжение для ад5206 5В и если подавать больше то и искажения будут....
    да использовал епром)
    темброблок не хочу... толька искажения буду дополнительные(((
    ad5206 брал в поднебесной)))) с доставкой -8,66$
    http://www.aliexpress.com/item/AD52...206B50-TSSOP-genuine-original/1996477310.html

    фото потом, переделваю плату кста использовал arduino nano v3
    дополнительно буду выводить управления реле включения блока питания унч вентилятора.. ну и всякой там фигни)))
     
  7. КвазИ

    КвазИ Нуб

    называеться порадовался за себя....
    баг:
    громкость доходит до 64 (у меня предел 99) и сбрасываться в 0.. что за нах.... ?? и при чем это не всегда иногда нормально до 99.. и не важно через энкодер регулирую или через ик пульт
     
  8. КвазИ

    КвазИ Нуб

    кароч это из-за eprom почему-то..
    в скетче в начале лупа я считываю переменную из епром а в конце записываю в нее и сейчас не пишеться туда значение больше 64... как это исправить?
     
  9. Salk

    Salk Гик

    Я не знаю, пока ещё не доходили руки до EEPROM, да и в моем случае он не нужен, т.к. вместо энкодеров у меня обычные потенциометры, и стартовые значения громкостей задаются ими.
    На крайний случай Вам, можно сделать фиксированное стартовое значения громкости в скетче, а пот от него регулировать.
     
  10. КвазИ

    КвазИ Нуб

    нее, все уже разобрался)))) как говориться свежая голова) я слишком часто записывал значение в епром(

    сейчас только по нажатию power на пульте вот и все)
     
  11. Salk

    Salk Гик

    Можно ещё вопрос насчет RS(PR) и SHDN, как Вы их подключили, вместе или по раздельности. Лог. 1 (5 В) на них берете так же от Arduino?

    И ещё земли, цифровую (от ARDUINO) и аналоговую от БП и усилителей, соединили через 0.1 мкФ? Я правильно понял? А зачем Вам потребовалось соединять земли?
     
  12. КвазИ

    КвазИ Нуб

    а что за RS(PR) и SHDN???
    у меня такого нет)

    без конденстора был фон... в динамиках а с конденсатором он гораздо меньше
     
  13. Salk

    Salk Гик

    Странно, что Вы их не заметили :)
    Это ваш потенциометр (внизу справа):
    3244.jpg
    RS - если подать на него "0", то сбросит все настройки, перейдет в дефолтное состояние, что-то такое.
    SHDN - если подать на него "0", то он просто не позволит включить потенциометры, звук через них не будет проходить. Я объединил их в одну линию и при запуске питания подаю на них +5 В ("1"). Чтобы не сбрасывалось и включалось :)
     
  14. КвазИ

    КвазИ Нуб

    ) у меня не 5204 а 5206 а они этим и отличаются) всё-таки 6 каналов)
     
  15. Salk

    Salk Гик

    Пфууу ... Пха, пха, кхе, кхе ... сколько же пыли в этой теме накопилось ... Стряхнем!
    Ну что ж, всем снова пламенный привет! Проект развивается в точь, как в поговорке: "улита едет, когда-то будет", то и дело стопорясь из-за сбоев в финансировании, наличии лени-матушки и кучей отговорок почему не сегодня. Кстати я дал название проекту - Аудиосистема 2.1 "Архангел", скромно не правда ли? :)
    Но с момента последних моих публикаций скриншотов устройства, многое изменилось.
    Проект, как всегда не доведен до 100%, походу он никогда и не будет закончен на все 100, т.к. планируется и дальше совершенствовать проект, вплоть до почти полной переделки его. Но он уже работоспособен и используется каждый день. Что же до сейчас, мне просто хочется поделится с тем, что имею на сегодняшний момент. И узнать ваши мнения, советы по доработке и т.д.
    В проект добавлено очень много "программных фишек" кол-во которых ограничено лишь 32кБ памяти Arduino Uno. Т.к. проект открытый, то исходники будут также выложены, поэтому пользуясь моментом, смею вас попросить помощи в оптимизации кода, может удастся где сжать или переписать некоторые, написанные мной функции в более компактный код для освобождения драгоценных капель байтов.
    И так, для начала взглянем на структурную схемку для общего понимания работы всего устройства:
    Структурка.jpg
    И описание схемы к ней:
    «Дежурный БП» - маломощный блок питания всегда работает при включении устройства в сеть и питает плату с микроконтроллером (МК). Тем самым включен дежурный режим – режим ожидания. От питания МК работает вся периферия, подключенная к нему – это датчики температуры, часы реального времени (RTC), вентилятор, текстовый LCD-дисплей, ИК-приемник (IR) и т.д.
    По команде с пульта мы включаем «Основной БП» – мощный БП для питания плат усилителей темброблока. На плате «Темброблок» имеется реле, которое выполняет роль селектора входов, с помощью него мы можем выбирать, какой звуковой сигнал поступит на вход темброблока: либо с любого внешнего звуковоспроизводящего устройства, либо с FM-приемника. На плате темброблока также расположены цифровые потенциометры (AD7376 50k), которые заменяют собой обычные переменные резисторы. Управляя ими микроконтроллером, мы можем менять – общую громкость, срез низких частот (НЧ), высоких частот (ВЧ) и отдельно громкость сабвуфера. После, звуковой сигнал с темброблока поступает на плату «Усилитель звука».

    Приводить принципиальную схему, я считаю бессмысленным занятием, т.к. практически не имеет значение какие усилители будут использоваться или какие схемы темброблока, а уж тем более состряпать обычный трансформаторный блок питания, могут все, да и схем в инете полным полно. Фишка Аудиосистемы не в схемах, а в микроконтроллерном управлении ими. В добавок схема очень и очень большая, а если рисовать её ещё и по ГОСТ, то уйдет целый лист А1 и не один день.
    Теперь в письменной форме попытаемся описать всю работы микроконтроллера, за что он отвечает и что к нему подключено. И так из периферии к Arduino мы имеем:
    1. ИК-приемник (38 кГц), позволяет дистанционно управлять системой, в том числе: темброблоком (громкость, ВЧ, НЧ и громкость сабвуфера).
    2. Датчики температуры - DS18b20 (2 шт.) расположены в двух самых горячих точках в корпусе (на радиаторах БП и усилителя), в зависимости от средней температуры по корпусу работает кулер, управляющийся частой ШИМ в 31 кГц, кстати взятый с ШИМ выхода Arduino, только пришлось разогнать. Алгоритм работы кулера не обычный. Вместо диапазонов minTemp и maxTemp была взята одна температура, которую система пытается поддерживать, т.е. если температура меньше этого порога, то кулер не работает, как только она стала равна ей, кулер постепенно начинает раскручиваться до максимума, пытаясь сбить спесь с радиаторов, как только это ему удалось, он также начинает плавно снижать свои обороты до полной остановки. Тем самым я получаю желаемую стабильную безопасную температуру внутри корпуса, при не постоянной работе кулера.
    3. FM-приемник, цифровой радиоприемник на базе TEA5767 (I2c). Станции моего города намертво вбиты в массив в кол-ве 34 штук и листаются с пульта. Но так же есть возможность точной настройки от текущей станции на 0.1 МГц.
    4. LCD 20х4 (I2c) - текстовый ЖК-экран, 4 строки 20 символов, на который выводится всё, от ползунков громкости до настроек и времени. Есть как постоянные менюшки, вроде настроек, меню радио, также есть "всплывающие окошки" вроде - ползунков громкостей, меню информации, которые, по умолчанию выводятся на 3 сек, а после сами исчезают и возвращается меню, которые было до этого. Время отображение этих окошек можно изменять в меню настройки.
    5. RTC (I2c) - обычные часы реального времени на базе DS1307. Как раз таки функцию будильника и не могу реализовать, т.к. памяти осталось с гулькин нос :)
    6. Микросхема эквалайзера на базе MSGEQ7 - интересная микросхема, с помощью неё я не только реализовал красивые "прыгающие" столбики на LCD в такт музыке, но и, внимание, запатентованная мной фишка: "автовключение и автовыключение системы" при наличии или отсутствии звукового сигнала на входе. А вы думали почему у меня на передней панели нет кнопок? Кнопки это прошлый век, автоматика вот что решает. Скажу сразу - на удивление система показывает достойные стабильные показатели, ни одного ложного выключения или включения. Нужно лишь узнать порог тишины при отсутствии сигнала на входе и от него отталкиваться. Так же лучше задать длительный промежуток времени после, которого начнется выключение системы (не менее 30 сек) иначе при паузах между песнями или тихими сценами в фильмах частыми вкл/выкл может испортить весь кайф. Но теперь систему можно и не выключать самому, а смело уходить из дома абсолютно не беспокоясь за неё. А автовключение позволяет и вовсе забыть про кнопки включения и пульты. Достаточно включить ПК и запустить видео или музыку и вауля! Но и с пульта мы также можем всем этим управлять, так сказать в ручном режиме.
    7. Управление темброблоком, а значит и звуком происходит благодаря цифровым потенциометрам - AD7376 (SPI) на 50 кОм, они отвечают за регулировку общей громкости (как стерео, так и сабвуфера); среза НЧ (40-180 Гц) частота среза НЧ возможно управлять только с пульта; срез ВЧ (1.2 кГц - 9 кГц) и громкостью сабвуферного канала, стоящая после ФНЧ. На передней панели выведены 3 ручки обычных переменных резисторов, они также управляют темброблоком (общая громкость, громкость сабвуфера и ВЧ), но подключены к АЦП Ardunio (А1 - А3), значения напряжения с них снимаются и преобразуются в диапазон для управления цифровые потенциометрами. ЦП подключены каскадно.
    8. Led Ring - светодиодные кольца, красивое дополнение к передней панели. Подсвечивает те самые обычные переменные резисторы, точнее по окружности ручек, благодаря сдвиговым регистрам - 74HC595 в каскадном подключении, в кол-ве 9 штук. 6 шт. на ручки переменных резисторов и 3 на значок "Power" и буквы "PC и FM" - обозначающие выбранный вход селектора. При том, что "P" трансформируется в "F", а "C" в "M". У режима Led Ring есть несколько режимов работы, по умолчанию - это когда последовательно светодиоды загораются с лева направо в зависимости от положения ручки, режим "точка" - когда горит один последний светодиод, режим "подкова" - когда светодиоды загораются с двух сторон и сходятся в центре и режим "обратная подкова" - наоборот работе "подковы", когда светодиоды расходятся от верхнего центрального светодиода в разные стороны при кручении ручек переменных резисторов.
    9. Режим St-by на микросхемах усилителей стал управляемым Arduino, что это дало - теперь при включении питания для усилителей, не происходит сильного скачка тока из-за заряда больших фильтрующих конденсаторов. Раньше из-за такого броска Arduino могла перезапуститься и выключить реле питания, тем самым система могла не запуститься с первого раза. Теперь после включения основного БП, 1.5 сек. усилители находятся в режиме St-by (т.е. выключены) за это время конденсаторы успевают зарядится и после включения самих усилителей резкого скачка не происходит. Система гарантировано включается с первого раза. Некое подобие SoftStart - плавное включение.
     
    acos нравится это.
  16. Salk

    Salk Гик

    В заключение могу сказать, что проект удался. Все недуги, преследующие меня в самом начале были устранены. Добился заметного снижения громкости щелчков, в несколько раз, цифровых потенциометров в момент изменения их сопротивления. Сейчас они практически не слышны, очень и очень тихо при полной тишине может в шаге от колонок. Устранена проблема с перезагрузкой Arduino в момент первого включения основного БП из-за большого скачка тока в больших емкостях в БП и на плате усилителя.
    Наконец-то доделал подобие корпуса и более мене грамотно все там распределил. Фон 50 Гц, присутствует, но не сильный, если поднести ухо к колонке довольно близко. Думаю экран на трансформатор и темброблок помогу избавится и от этого. В худшем случае я могу решить эту проблему программно - определяя есть ли на входе звук или нет, я могу через 3-5 сек после его отсутствия включать St-by на микросхемах и так же быстро его выключать при появлении звука, не отключая питания. Но пока не проверял, может 3-5 сек будет мало и получится эффект заикающегося звука. Нужно экспериментировать.
    Звучание системы очень даже достойное, лучше того что мне приводилось слышать из китайских представителей Dialog, Sven и т.п. также формата 2.1 в ценовом диапазоне до 10.000 рублей. Аудиосистема получилась средней мощности: 2х 22 Вт (стерео) и 1х 60 Вт (сабвуфер) при искажениях менее 0,01%. Времени затраченного на этот проект можно судить по первому посту в этой теме :)

    Снять полноценное видео с демонстрацией звучания не получается, т.к. никак не могу найти достойную видеоаппаратуру, а снимать на телефоны с камерами до 13 МП, ни к чему хорошему не приводит, качество звука не передастся, да и стабилизация видео там фуфло.
    Поэтому я нафоткал с разных ракурсов своё творение и сделал видео из слайдов, по возможности с понятными комментариями. Приятного просмотра. Если что-то не понятно, или что-то забыл описать, спрашивайте, дополню. Ну и надеюсь на ваши замечания, советы по улучшению, в частности, кода :)
    Ах да, самое главное - объявляю преогромнейшую благодарность за помощь в проекте в особенности:
    acos, geher, Unixon, ANV и всему сообществу форума amperka.

    Видео:
    Ссылка для полноэкранного просмотра:
    Код (CSS):
    https://youtu.be/i-EjyAonHx0

     

    Вложения:

    acos нравится это.
  17. KiD

    KiD Нуб

    Приветствую всех, господа!
    Не сочтите за оскорбление, хочу попросить помощи. Как полный ламер в программировании, к тому же, весьма поверхностно знакомый с электроникой в целом, тем не менее, одержим одним проектом! ))).
    Я музыкант из глубинки, занимаюсь обучением детей (несколько подростковых рок-групп). Имея сильное ограничение в финансовом плане, приходится все (почти все) делать своими руками.
    Так вот, к делу.
    Имеется самодельный комбо-усилитель (одноканальный) для бас-гитары на 200 Вт. Собран на китайскои усилителе класса D.
    Динамики 15 дюймов американские. Темброблок 7-полосный на LA3006. Работа оконечника устраивает полностью. А вот эквалайзер не нравится. Глубина регулировки, линейность регулировки и т.д.
    Кроме того, если подать сигнал с компа (например), минуя эквалайзер, то звук отличный. Нас устраивает, во всяком случае. А при использовании темброблока, проислодит перегруз на низах, а то и вовсе конец уходит в защиту. При этом, низов на слух меньше, чем при подключении без эквалайзера. Объективно меньше. Срыв начинается при меньшем количестве низов при той же громкости.
    Копать эквалайзер уже нет желания, много времени на это потрачено было мной, и другом-электронщиком.
    Хочется собрать новый эквалайзер. Мечта - с цифровым управлением (выбор частоты, ширины полосы и т.д.)
    Это уже, типа, параметрика получается )). Количество полос - от 5 до 10. Отображение параметров (при регулировке) на ЖК-дисплее, память на 10-100 пресетов. Управление 1-им энкодером. В рабочем режиме - отображение на дисплее уровня сигнала и/или спектра сигнала.
    Понимаю, что хочу слишком многого, но, вдруг есть наработки у кого нибудь уже, которые мне подойдут.
    Готов приобрести Ардуино, соответственно, дисплей-шилд, ну, и, по мелочи, что там еще понадобится.
    Может, кто заинтересуется?)))

    PS
    Забыл добавить)) Неплохо еще иметь кнопку "байпас" для обхода эквалайзера, и кнопку "мьют" для полного приглушения звука. Их, конечно, можно и аппаратно сделать, не используя Ардуино, но, как то не эротично это, при таких наворотах )))
    Ну, а если туда еще тюнер гитарный встроить... Боюсь умереть от оргазма. )))
     
    Последнее редактирование: 10 янв 2017
  18. rkit

    rkit Гуру

    Ардуино недостаточно производительны для ваших целей. Цифровую обработку звука не осилит, памяти на 100 пресетов не хватит, сигнал с достаточной скоростью не отрисует.
     
  19. KiD

    KiD Нуб

    Отказатся от памяти?
    Не отрисует... Вы имеете ввиду, недостаточную скорость работы АЦП и ЦАП? Или их битность недостаточна?
     
  20. rkit

    rkit Гуру

    Нет, я имею в виду что не отрисует. Картинку на экран будет слишком долго рисовать.
    АЦП и ЦАП для звука тоже плохие, да.