Цифровой регулятор уровня звука на Arduino и микросхеме PT2258

Потенциометр представляет собой механическое устройство, с помощью которого можно получить необходимое значение сопротивления, что приведет к изменению величины протекающего через него тока. В электронных схемах у потенциометра достаточно много применений, но одно из наиболее частых – это управление уровнем звука в усилителях звуковой частоты.

Потенциометр не усиливает сигнал, он образует делитель напряжения, с помощью которого входной сигнал ослабляется на заданную величину. В этой статье мы рассмотрим цифровой регулятор уровня звука на микросхеме PT2258 и плате Arduino. Также вы можете посмотреть следующие проекты на аналогичную тематику на нашем сайте:

Микросхема PT2258

Микросхема PT2258 представляет собой 6-ти канальный электронный контроллер звука и построена на основе CMOS технологии. Микросхема PT2258 изначально была спроектирована для работы с многоканальными аудио-видео приложениями.

Внешний вид и схема микросхемы PT2258

Микросхема работает по интерфейсу I2C и обеспечивает диапазон ослабления от 0 до -79dB с шагом 1dB. Изготовляется в 20-ти контактном корпусе DIP или SOP.

Основные технические характеристики микросхемы:

  • 6 входных и выходных каналов (для домашних аудио систем формата 5.1);
  • выбираемый адрес I2C;
  • хорошая развязка между каналами (для приложений с малым уровнем шума);
  • отношение сигнал/шум (S/N ratio) более 100 дБ;
  • рабочее напряжение от 5 до 9 В.

Как работает микросхема PT2258

Данная микросхема передает и принимает данные от микроконтроллера по линиям интерфейса I2C SCL и SDA, которые образуют шину. Для устойчивой работы рекомендуется данные линии использовать с подтягивающими резисторами сопротивлением 4,7 кОм.

Подключение линий интерфейса I2C SCL и SDA с помощью подтягивающих резисторов

Далее мы кратком рассмотрим принципы работы микросхемы PT2258 по линиям интерфейса I2C. Если вам неинтересна данная информация, то вы можете ее пропустить потому что всю эту работу берет на себя библиотека для Arduino.

Валидация (подтверждение) данных

  • данные на линии SDA считаются правильными (подтвержденными) только когда на линии SCL состояние HIGH;
  • состояния линии SDA (HIGH и LOW) изменяются только когда на линии SCL состояние LOW.

Валидация данных в протоколе I2C

Условия начала и окончания передачи

Условие начала передачи (Start Condition) активируется когда:

  1. На линии SCL установлено состояние HIGH.
  2. Линия SDA переключается из состояния HIGH в LOW.

Условие окончания передачи (Stop Condition) активируется когда:

  1. Линия SCL установлена в состояние HIGH.
  2. Линия SDA переключается из состояния LOW в HIGH.

Условия начала и окончания передачи в микросхеме PT2258

Примечание: эта информация очень полезна для отладки сигналов.

Формат данных

Каждый байт, передаваемый по линии SDA, состоит из 8 бит. Каждый байт должен заканчиваться битом подтверждения.

Подтверждение

Подтверждение (Acknowledgment) гарантирует устойчивое и правильное функционирование. Во время импульса подтверждения (Acknowledge Clock Pulse) микроконтроллер устанавливает контакт SDA в состояние HIGH и в этот же самый момент периферийное устройство (к примеру, аудио процессор) устанавливает на контакте SDA состояние LOW.

Подтверждение данных в микросхеме PT2258

Периферийное устройство (в нашем случае PT2258) должно сформировать подтверждение после приема байта, линия SDA будет оставаться в состоянии HIGH во время девятого (9th) импульса синхронизации (Clock Pulse). После этого передатчик ведущего устройства (master) должен сформировать сигнал STOP для прекращения передачи.

Подтверждение данных от приемника

Выбор адреса (Address Selection)

Адрес I2C микросхемы PT2258 зависит от состояния CODE1 (контакт № 17) и CODE2 (контакт № 4). Возможные при этом адреса представлены в следующей таблице.

CODE1 (PIN No. 17) CODE2 (PIN No. 4) HEX ADDRESS
0 0 0X80
0 1 0X84
1 0 0X88
1 1 0X8C

Протокол интерфейса

Состоит из следующих элементов:

  • стартовый бит;
  • байт адреса чипа;
  • бит подтверждения (ACK);
  • байт данных;
  • стоповый бит.

Протокол интерфейса в микросхеме PT2258

Вспомогательные операции

После того, как на микросхему будет подано питание, необходимо подождать, по меньшей мере, 200ms перед тем как передавать первый бит данных, иначе передача данных может окончиться передачей.

После этой задержки первое, что нужно сделать, это очистить регистр при помощи передачи “0XC0” по линии I2C, это гарантирует в дальнейшем правильное функционирование устройства.

Очистка регистра в микросхеме PT2258

Описанная операция очищает целый регистр, теперь нам необходимо установить значение в регистре, иначе регистр будет хранить устаревшее значение и мы получим неправильное значение на выходе.

Чтобы обеспечить правильную настройку звука необходимо последовательно передавать коды 10dB и 1dB на аттенюатор, иначе микросхема может работать неправильно. Более наглядно это процесс представлен на следующей диаграмме:

Принцип регулировки уровня звука в микросхеме PT2258

Чтобы обеспечить правильное функционирование микросхемы PT2258 убедитесь в том, скорость (частота) передачи данных по интерфейсу I2C никогда не будет превышать 100KHz.

Более подробно принципы функционирования микросхемы PT2258 можно изучить в даташите на нее.

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. Микросхема PT2258 (купить на AliExpress).
  3. Макетная плата.
  4. Соединительные провода.
  5. Кнопки.
  6. Резистор 4,7 кОм, 5% - 2 шт. (купить на AliExpress).
  7. Резистор 150 кОм, 5% - 4 шт.
  8. Резистор 10 кОм, 5% - 2 шт.
  9. Конденсатор 10 мкФ – 6 шт. (купить на AliExpress).
  10. Конденсатор 0,1 мкФ – 1 шт. (купить на AliExpress).

Схема проекта

Схема цифрового регулятора уровня звука на Arduino и микросхеме PT2258 представлена на следующем рисунке.

Схема цифрового регулятора уровня звука на Arduino и микросхеме PT2258

В демонстрационных целях схема собрана на макетной плате.

Примечание: все компоненты на макетной плате следует размещать как можно ближе друг к другу чтобы уменьшить влияние паразитных емкостей и индуктивностей.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Для упрощения написания программы для нашего проекта мы использовали библиотеку PT2258 с сервиса GitHub, написанную пользователем с ником sunrutcon.

Это отлично написанная библиотека, но поскольку она очень старая и содержит некоторые баги, мы решили пофиксить их прежде чем использовать ее в нашем проекте.

Сначала скачайте эту библиотеку с GitHub и распакуйте ее.

Файлы библиотеки PT2258

После извлечения ее из архива вы увидите в ней два файла. Откройте файл PT2258.cpp любым текстовым редактором, мы использовали Notepad++.

Вы увидите в нем, что буква “w” библиотеки для работы с протоколом I2C (wire library) написана с маленькой буквы, что несовместимо с последними версиями Arduino, вам следует заменить ее на большую букву “W”. Это все, что необходимо сделать с данным файлом.

Далее код программы мы начнем с подключения в него необходимых библиотек. Библиотека Wire используется для связи по протоколу I2C между платой Arduino и микросхемой PT2258. Библиотека для работы с PT2258 содержит всю необходимую информацию чтобы данная микросхема могла работать по протоколу I2C. Библиотека ezButton используется для подключения кнопки.

Далее объявим объекты для работы с микросхемой PT2258 и двумя кнопками.

Далее определим уровень звука по умолчанию – он будет использоваться при подаче питания на микросхему.

Далее инициализируем последовательную связь и установим частоту синхронизации для шины I2C.

Следует отметить, что очень важно для нашего проекта установить частоту для шины I2C, поскольку максимальная частота этой шины, которая поддерживается микросхемой PT2258, составляет 100KHz.

Далее проверим действительно ли микросхема PT2258 может работать по протоколу I2C.

Далее установим задержку срабатывания для кнопок, необходимую для борьбы с дребезгом контактов (debounce delay).

И, наконец, инициализируем микросхему PT2258 и установим в ней уровни звука и контакты по умолчанию.

На этом мы закончим функцию Void Setup(). В функции Void Loop() нам необходимо вызвать функции циклов (loop function) из класса кнопок.

Следующая секция условия if предназначена для увеличения уровня звука.

Следующая секция условия if предназначена для уменьшения уровня звука.

Тестирование работы проекта

Для тестирования нашего проекта мы использовали следующие компоненты:

  1. Трансформатор с отводами 13-0-13.
  2. Два динамика 4Ω 20W в качестве нагрузки.
  3. Источник аудио сигнала (смартфон).

Тестирование работы проекта

Для управления уровнем звука использовались две кнопки в схеме проекта. Более подробно эти процессы можно посмотреть на видео, приведенном в конце статьи.

Чтобы улучшить работу схемы ее можно собрать на печатной плате – это позволит уменьшить нежелательные шумы. Также можно добавить дополнительный фильтр для устранения высокочастотных шумов.

Исходный код программы (скетча)

Видео, демонстрирующее работу схемы

(Проголосуй первым!)
Загрузка...
731 просмотров


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *