Сторінки

11 серп. 2012 р.

Аудиопроцессор TDA7313

Несколько лет назад в рамках курсового проекта мы с напарником разработали и сделали усилитель с аудиопроцессором TDA7313. Как то меня потянуло на былые времена, вот и захотел рассказать, что это за микросхема и с чем ее едят.
Сразу предупреждаю, что микросхема эта очень старая (выпускалась еще 20 лет назад), но несмотря на это ее по прежнему производят (наверное).
С datasheet-ом на эту микросхему можно ознакомиться по ссылке ниже:
Документация на микросхему
Рассмотрим структуру TDA7313:
Как видим микросхема имеет 3 стерео входа, каждый из которых можно выбрать. Одновременно может работать только 1 стерео вход. Присутствуют регуляторы ВЧ (TREBLE), НЧ (BASS) и громкости звука (VOL). Сигнал выдается на 4 выхода (псевдоквадро). Микросхема так же имеет опцию тонкомпенсации (LOUDNESS). Управление осуществляется с помощью I2C. Обвязка минимальная - несколько конденсаторов и два резистора. Номинальное напряжение питания  9В.
Работать с этим аудиопроцессором очень просто и приятно. Для начала нужно передать по I2C старт-бит, потом передать адрес микросхемы и в конце запросить подтверждение (ACK) путем подачи еще одного такта на линию SCL шины  I2C  (см. рисунок ниже):
S = Start
ACK = Acknowledge 
Адрес всегда фиксирован, по этому нельзя управлять более чем одной микросхемой на одной шине. Из микросхемы нельзя ничего читать (по крайней мере этого я не нашел в документации), по этому младший бит адреса, отвечающий за направление передачи, от ведомого к ведущему или наоборот, всегда равен нулю. 
После того как будет передан адрес микросхемы передается байт данных. Старшие биты этого байта указывают на то, какому из внутренних регистров микросхемы предназначаются данные, а остача бит - это само значение, записываемое в регистр. Ниже приведена таблица регистров из документации.

Представим себе, что мы хотим установить громкость. Управлять громкостью для этой микросхемы значит ослабить входной сигнал в некоторое количество dB. Пусть интересующее значение ослабления равно -50.125 dB. Чтобы решить данную задачу мы должны записать в регистр Volume control значение соответствующее  -50.125 dB. Для этого подготовим байт данных. Два старших бита этого байта должны быть равными 0, т.к. адрес интересующего нас регистра это два нуля (см. таблицу).  Значение ослабления I = 10Bx + 1,25Ax (см. таблицу сверху), где Ax - десятичное числовое значение, кодируемое  группой битов А; Bx - десятичное числовое значение, кодируемое группой битов B. Т.е. значению в 50.125 dB отвечает двоичное число 101001b. Следовательно наш байт данных для установки нужной нам громкости равен 0b00101001.
 Получается, что для того, чтобы установить уровень громкости соответствующий ослаблению в 50.125 dB нужно передать по I2C следующую информацию:

S - старт бит
0b10001000 - адрес микросхемы и направление от ведущего к ведомому
ACK - запрос подтверждения (ведущий должен выдать SCK, ведомый ответит нулем на SDA)
0b00101001 - записать в регистр Volume control значение соответствующее -50.125 dB
P - стоп бит (опционально, если не хотим записывать в другие регистры)

Вообще в документации приведены таблицы различных значений для каждого регистра.
Отдельно хотелось бы поговорить о регистре Audio swich, т.к. он немного отличается от других регистров тем, что содержит в себе настройки не одного параметра, а сразу нескольких. С помощью этого регистра можно: выбрать вход путем переключения входных аналоговых мультиплексоров, включить или выключить тонкомпенсацию, задать общий коэффициент усиления  микросхемы.
Для работы с микросхемой TDA7313 я сделал небольшую библиотеку. Она содержит класс TDA7313_t, имеющий следующие методы:

       void Init(void) - инициализация
       void SetVolume(uint8_t vol) - установка громкости от 0 до 100%
       void SetFrontBalance(uint8_t leftValue,uint8_t rightValue) - регулировка баланса передних динамиков. Входные параметры от 0 до 10 единиц.
       void SetRearBalance(uint8_t leftValue,uint8_t rightValue) - регулировка баланса задних динамиков.
       void SetBass(int8_t bass) - регулировка тембра НЧ (от -14 до 14 дБ).
       void SetTreble(int8_t treble) - регулировка тембра ВЧ (от -14 до 14 дБ).
       void SelInput(Input_t input) - выбор стерео входа. Входным параметром может быть:
  • INPUT_1
  • INPUT_2
  • INPUT_3
  • INPUT_4 - физически не выведен на выводы микросхемы
       void SetLoudness(Loudness_t ld) - включение/выключение тонкомпенсации. Входным параметром может быть:
  • LOUDNESS_ON - включить тонкомпенсацию
  • LOUDNESS_OFF- выключить тонкомпенсацию
       void SetAmplification(Amplification_t amp) - установка коэффициента усиления микросхемы. Доступны следующие коэффициенты:
  • AMP_PLUS_11_25_dBm
  • AMP_PLUS_7_5_dBm
  • AMP_PLUS_3_75_dBm
  • AMP_PLUS_0_dBm
Библиотека использует для доступа к шине I2C библиотеку-драйвер.
Исходник библиотеки для работы с TDA7313, а также драйвер I2C для МК stm8s здесь:
Библиотека для работы с TDA7313
Для работы на других МК изменять библиотеку для работы с TDA7313 не нужно, только реализацию I2C.
На этом все.

9 серп. 2012 р.

Привет мир!!!

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