Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SSM2603: странное смещение на выходе.
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Вопросы аналоговой техники
Artem_Petrik
Схему включения взял из даташита. После инициализации SSM2603 на ее выходах устанавливается напряжение отличное от Vcc/2, причем в правом и левом каналах разное. При этом на выводе Vmid все в порядке. Если на вывод PBDAT подавать отличные от 0 данные, то они какбы складываются с этим непонятным оффсетом. Если результат сложения выходит за допустимые пределы, то он переполняеся так, как если сложение происходит в цифре (типа: 0xFFFFFF + 5 = 4). Т.е. такое ощущение, что SSM-ка перед ЦАП-ом прибавляет к пришедшим данным какое-то число.

Пока разбирался, выяснил, что отличное от Vcc/2 напряжение появляется после подключения к выоду сигнала от DAC. Если DAC отключить, и включать всякие bypass или sidetone, то смещение такое как надо.
От режима работы цифрового интерфейса (master/slave, кол-во бит), не зависит.

Вот пример инициализации.
Код
  // Power on CLKOUT, OSC, DAC. no power OUT, ADC, MIC, LINEIN.
  Ssm2603_WriteReg(0x06, 0x010);
  // Configure other registers.
  Ssm2603_WriteReg(0x02, 0x179); // dac volume 0dB
  Ssm2603_WriteReg(0x04, 0x012); //dacsel, mutemic.
  Ssm2603_WriteReg(0x05, 0x000);
  Ssm2603_WriteReg(0x07, 0x04A); // master 24bit I2s
  Ssm2603_WriteReg(0x08, 0x080); // 48k @ 12.288MHz
  // Wait time for charging Vmid Capasitor.
  wait_ms(1000);
  // Set ACTIVE bit in reg R9
  Ssm2603_WriteReg(0x09, 0x001);
  wait_ms(1000);        // на всякий случай :)

  // !!! Сейчас на выходе Vcc/2 как и положено.

  // Set OUT bit in R6 to 0
  Ssm2603_WriteReg(0x06, 0x007);

  // !!! Напряжение на выходах "отпрыгнуло" от Vcc/2 вниз на разные значения.


Может уважаемый All сталкивался с такой проблемой и знает как ее победить? Ато у меня уже иссякли идеи sad.gif
Artem_Petrik
Удалось побороть это непонятное смещение следующим образом: после полной инициализации (как раньше) ресетнуть SSM-ку (write 0 to Reg 0F), и повторить инициализацию заново. После этого все смещения в норме (Vcc/2). Еще поиграюсь, может получится прийти к какой-то менее кривой процедуре инициализации.
grv
У меня что-то подобное. При подаче с другой стороны с такого же кодека синусоидального сигнала на приеме вижу смещенный синус и порванный в районе верхужки или низовья. Такое впечатление что это происходит при арифметическом переполнении в DAC, т.к. отрезанная верхушка вылазит по вертикали с другой стороны .

На чем закончилась эппопея с кодеком, удалось добиться стабильной работы? У меня такой глюк вылазит где то в 30% случаев после включеня. Читал регистры когда все ок и когда все плохо - не отличаются. Сначала грешил на i2c. тайминг. паузы.

Кстати, нарастание VMID при инициализации и 10uF кондере происходит за 1секунду а не за 100мс как кое-кто обещал sm.gif
Artem_Petrik
Цитата(grv @ Feb 3 2011, 13:57) *
На чем закончилась эппопея с кодеком, удалось добиться стабильной работы? У меня такой глюк вылазит где то в 30% случаев после включеня. Читал регистры когда все ок и когда все плохо - не отличаются. Сначала грешил на i2c. тайминг. паузы.

Да, пока все осталось так, как предыдущем посте описано.Из-за цейтнота некогда разбираться в причинах, работает и хорошо. У меня такой глюк не в 30% случаев, а всегда, только величина смещения меняется. Но ресет с повторной инициализацией проблему решает.

задержки я увеличивал до неприличия - не помогало, так что дело не в них.

А кондер, да, заряжается поболе секунды, со 100 мс это они привирают. Но даже если при инициализации соответствующую паузу сделать секунд 10, обсуждаемый глюк все равно не исчезает.
grv
Цитата(Artem_Petrik @ Feb 3 2011, 18:44) *
Да, пока все осталось так, как предыдущем посте описано.Из-за цейтнота некогда разбираться в причинах, работает и хорошо. У меня такой глюк не в 30% случаев, а всегда, только величина смещения меняется. Но ресет с повторной инициализацией проблему решает.

задержки я увеличивал до неприличия - не помогало, так что дело не в них.

А кондер, да, заряжается поболе секунды, со 100 мс это они привирают. Но даже если при инициализации соответствующую паузу сделать секунд 10, обсуждаемый глюк все равно не исчезает.


Ясно, попробую проделать у себя.
grv
Цитата(grv @ Feb 3 2011, 19:25) *
Ясно, попробую проделать у себя.


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

wait_ms(1000); // на всякий случай sm.gif

так вот без нее холодный пуск не работает maniac.gif
Начинает напрягать отсутствие ноги Reset в кодеке.
У меня вообще может в девайсе кодека 2 быть. Чуствую интересное еще впереди.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.