Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: авр+кодек(воспроизведение)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Григорий2000
Уважаемые! Как наиболее просто воспроизвести звук на mega с применением не самого дорогого цап или кодек(ни разу не включал). с качеством не хуже 8 бит 22кГц
aaarrr
Если хотите просто, то возьмите любой SPI ЦАП - AD53xx, например.
Если дешево и сердито - I2S ЦАП, например, MAX5556. Потребуется SPI и таймер.
Григорий2000
ad5302 применяется сейчас, но проблема в их доставаемости... хотел заменить на что нибудь по доступнее не сильно увеличиваясь в цене. Интересуют приборы со входомсинхронного выставления сэмпла. Или может кодеки с буфером(такие недорогие существуют в природе?)
I2S - будет дрожание фазы из-за природы сигнала загрузки(отсутствие входа синхронного выставления сэмпла )
aaarrr
Цитата(Григорий2000 @ May 22 2008, 10:35) *
Интересуют приборы со входомсинхронного выставления сэмпла. Или может кодеки с буфером(такие недорогие существуют в природе?)

Т.е. стабильную загрузку обеспечить не получается? Боюсь, что тогда остаются только обычные ЦАПы.
Григорий2000
если использовать только таймер и SPI, то при неоднозначности времени вхождения в прерывание по таймеру(даже из-за 1-го и двухцикловых команд) что дает на генераторе 10-12Мгц разницу во времени выполнения последовательности команд загрузки в 0,1 мкс при периоде на 22кгц в 45мкс дает приличный КНИ. что неприемлимо.
Какие могут быть еще варианты. Сейчас применяю также аппаратный выход таймера для загрузки в ЦАП(внутри из входного регистра в выходной).
В кофидеках(по предв информации) требуется тактирование выставления семпла а также и фильтра что в итоге должно дать повышение качества воспроизводимого сигнала. Внимание вопрос: есть такого направления приборы и чтоб за недорого..? А если с буфером хотя-бы небольшим то вообще сказка!
Rst7
Цитата
если использовать только таймер и SPI, то при неоднозначности времени вхождения в прерывание по таймеру(даже из-за 1-го и двухцикловых команд) что дает на генераторе 10-12Мгц разницу во времени выполнения последовательности команд загрузки в 0,1 мкс при периоде на 22кгц в 45мкс дает приличный КНИ. что неприемлимо.


Не вижу проблем обеспечить точное время начала посылки по SPI (да и вообще, выполнение любых действий), с точностью до такта. Поищите по форуму, тут такое обсуждалось.
Григорий2000
Поищщу..
Эта опреация, насколько мне известно, сжирает драгоценное время...
которого и так мало...
Rst7
Цитата
Эта опреация, насколько мне известно, сжирает драгоценное время...


Ну тактов 20-30 на выравнивание. Много? У вас же порядка 500 между прерываниями таймера (если 22кГц и 10-12МГц)
Григорий2000
достаточно много... по результату... есть еще и другие задачи... (чтение at45db)можно конечно пытаться все оптимизировать и наверняка все это получится, но... нехотелось бы все остальное перекраивать, хотя наверное придется, потому что еще требуется дополнительная функция...
А если взять младший SAM7 все это прощще реализуется(всм ногодрыгание в строго определенный момент по таймеру без джиттера)?
Rst7
Цитата
А если взять младший SAM7 все это прощще реализуется(всм ногодрыгание в строго определенный момент по таймеру без джиттера)?


В общем случае методы одинаковые.

Да и, кстати, если у вас 8 бит, не погорячились ли Вы, утверждая, что у Вас от джиттера слишком большые искажения?
aaarrr
Цитата(Григорий2000 @ May 22 2008, 12:34) *
А если взять младший SAM7 все это прощще реализуется(всм ногодрыгание в строго определенный момент по таймеру без джиттера)?

На младшем SAM7 процессор вообще почти не будет напрягаться, только PDC переключать. Джиттера не будет.

Цитата(Rst7 @ May 22 2008, 12:37) *
Да и, кстати, если у вас 8 бит, не погорячились ли Вы, утверждая, что у Вас от джиттера слишком большые искажения?

ИМХО, да. Есть у нас девайс - AVR с 16@22050 I2S кодеком, музыки играет, - искажений не слышно.
Григорий2000
по крайней мере в те времена когда развлекался с ad5302 и упралял загрузкой на выход(LDAC) програмно и пытался синхронизироваться с таймером и получить как раз при потере производительности синхронную загрузку точно в необходимые отсчеты времени с погрешностью в один цикл(там на 7.3728 было дело) то это дрожание в звуке было в принципе незаметно, за исключением появления шипения , которое можно различить в сравнении с например нешипящим источником тако-го же сигнала при наличии высокочастотных составляющих в исходном фрагменте. т.е чем выше частота исходного сигнала, тем выше уровень шума добавляемый джиттером.
Фраза "слишком большие" скорее всего применимо к конкретной задаче и мной вероятно использовано не к месту(без конкретики).
При возможной небольшой разнице в цене суммы mega8+суперпупер цап и sam7 + простой ЦАП хотел услышать возможные проблемы с применением в этом контексте последних. конкретно о ногодрыгании .. нет ли камней в такой реализации... там-же и прерывания ненапрямую на проц и работа с портом помоему не за такт...
расписывать ненужно поверю скорее наслово, и есть ли разница между NXP и Atmel-ом? при отсутствии средств отладки(тока наверное виглер смогу)
SasaVitebsk
Не устаю повторять. Моторола и TI выпускают готовые кофидеки, в том числе и для CD качества. Там не только кодек, но, что более важно, выходной цифровой фильтр хорошего порядка и качества. Достаточно сложный протокол, но вполне реализуемый.
Григорий2000
будте так любезны назовите парочку если работаете/работали с ними. с вышеозвученными потребностями что можете рекомендовать?
Ден
Можно взять например VS1011 или другие её модификации и не дорого и качественно и просто!
MrYuran
А ещё у ТИ есть МСП430Ф157 стоимостью 4-5 баксов в розницу с ЦАП12 и ДМА на борту.
ДМА модет кидать данные в ЦАП по сигналу прерывания с таймера, пересылка за 1 такт.
sysel
AC'97 кодек (например AD1885). Только кварц повесить не 24.57МГц, а меньше (кодеки производства AD такое допускают, не знаю как другие) для того чтоб по SPI успевать.
aaarrr
Цитата(Григорий2000 @ May 22 2008, 13:13) *
При возможной небольшой разнице в цене суммы mega8+суперпупер цап и sam7 + простой ЦАП хотел услышать возможные проблемы с применением в этом контексте последних. конкретно о ногодрыгании .. нет ли камней в такой реализации... там-же и прерывания ненапрямую на проц и работа с портом помоему не за такт...

С ногодрыганьем на SAM'е плохо: на один "дрыг" нужно минимум 3 такта процессора.

Цитата(Григорий2000 @ May 22 2008, 13:13) *
есть ли разница между NXP и Atmel-ом?

В плане ногодрыганья нет, у NXP думатель быстрее.
Rst7
Цитата
В плане ногодрыганья нет


FastGPIO на LPC обгоняет SAM, но обычный GPIO - медленнее.

Цитата
у NXP думатель быстрее.


Тактовые почти одинаковые. Единственное что, при исполнении из флеша LPC быстрее из-за MAM. Если из озу - то пофиг.
aaarrr
Цитата(Rst7 @ May 22 2008, 14:36) *
FastGPIO на LPC обгоняет SAM, но обычный GPIO - медленнее.

И правда. Знал о наличии FastGPIO, но не думал, что он аж на локальную шину повешен.

Цитата(Rst7 @ May 22 2008, 14:36) *
Тактовые почти одинаковые. Единственное что, при исполнении из флеша LPC быстрее из-за MAM. Если из озу - то пофиг.

Целых 30% в пользу LPC по тактовой.
Rst7
Цитата
Целых 30% в пользу LPC по тактовой.


Тогда уж 27% если сравнивать с LPC210x. wink.gif Если с 213x - то 10% (60 МГц против 55). Но вот DMA в SAM может оказаться очень полезным довеском.
SasaVitebsk
Цитата(Григорий2000 @ May 22 2008, 12:58) *
будте так любезны назовите парочку если работаете/работали с ними. с вышеозвученными потребностями что можете рекомендовать?

Да их там сотни наименований. Мы работали с телефонными кофидеками (Кодер-Фильтр-Декодер), но попутно, при поиске я видел их вагон и маленькую тележку. Для разных применений, например для CD плееров. Тоесть цифровой сигнал непосредственно поступает в чип а вылазит аналоговый после фильтра.

Дело в том, что для приемлемого качества, после ЦАПа вам придётся городить ещё на паре операционниках фильтр, чтобы приемлемый звук получить. Там это уже сделано за вас.

Мы работали и продолжаем работать с мотороловскими mc145564. Только интеграловского производства. Там их море начиная mc14XXXX. Есть и у TI такие же. Ключевое слово для поиска codec.

Я для примера вырезал мелкий кусочек результатов поиска на TI. smile.gif


u-law, 2.048 MHz - TCM29C16 - TI Product Folder (Obsolete)
... Combined Single-Chip PCM Codec and Filter (Rev. H) (tcm29c16.pdf, 388 KB) 20 Feb 1997 Download ... Combined Single-Chip PCM Codec and Filter (Rev. H) (tcm29c16.pdf, 388 KB) 20 Feb 1997 Download ...
http://focus.ti.com/docs/prod/folders/print/tcm29c16.html - 59.37k HTML file

u-law and A-law, 1.536, 1.544, 2.048 MHz - TCM29C13 - TI Product Folder (Obsolete)
... Combined Single-Chip PCM Codec and Filter (Rev. H) (tcm29c13.pdf, 388 KB) 20 Feb 1997 Download ... Combined Single-Chip PCM Codec and Filter (Rev. H) (tcm29c13.pdf, 388 KB) 20 Feb 1997 Download ...
http://focus.ti.com/docs/prod/folders/print/tcm29c13.html - 58.87k HTML file

18-bit Stereo AC97 DSPCodec - TLV320AIC27 - TI Product Folder (Obsolete)
... Stereo Audio Codec (Rev. A) (tlv320aic27.pdf, 732 KB) 27 Sep 2000 Download ... 18-Bit Stereo Codec ...
http://focus.ti.com/docs/prod/folders/print/tlv320aic27.html - 49.58k HTML file

u-law, 2.048 MHz, Interface for DSP - TCM29C18 - TI Product Folder (Obsolete)
... Line Card Codec/Filter Combo System/Design Considerations (slwa006.htm, 8 KB) 05 Dec 1996 Abstract ...
http://focus.ti.com/docs/prod/folders/print/tcm29c18.html - 51.7k HTML file

Single Channel Codec - TLC32047 - TI Product Folder (Obsolete)
... Single Channel Codec - TLC32047 - TI Product Folder (Obsolete) ... TLC32047, Status:OBSOLETE Single Channel Codec ...
http://focus.ti.com/docs/prod/folders/print/tlc32047.html - 41.29k HTML file

20-Bit Stereo Audio Codec, 104 dB SNR - TLC320AD75 - TI Product Folder (Obsolete)
... 20-Bit Stereo Audio Codec, 104 dB SNR - TLC320AD75 - TI Product Folder (Obsolete) ... TLC320AD75, Status:OBSOLETE 20-Bit Stereo Audio Codec, 104 dB SNR ...
http://focus.ti.com/docs/prod/folders/print/tlc320ad75.html - 40k HTML file
Григорий2000
Уважаемые! Прошу прощения, но ненашел на форуме обсуждения реализации строго когерентного выполнения последовательности команд в прерывании по таймеру. ткните пальцем или напомните фразу по которой вести поиск. И еще... немаловажным считается факт легкопродаваемости для первоначального общения, что про некоторые нескажешь.
Rst7
Ну что-нибудь типа такого
Код
#pragma diag_suppress=Ta006
__interrupt void DoADC(void)
{
  UREG m;
  UREG b;
  asm("MOVW R17:R16,R31:R30");
  asm("IN R30,0x32");
  asm("SUBI R30,0x14");
  asm("ANDI R30,15");
  asm("CLR R31");
  asm("SUBI    R30, LOW((-(NOP_LIST/2) & 0xFFFF))");
  asm("SBCI    R31, (-(NOP_LIST/2) & 0xFFFF) >> 8");
  asm("IJMP");
  asm("NOP_LIST: NOP");
  asm("NOP");
  asm("NOP");
  asm("NOP");
  asm("NOP");
  asm("NOP");
  asm("NOP");
  asm("NOP");
  asm("NOP");
  asm("NOP");
  asm("NOP");
  asm("NOP");
  asm("NOP");
  asm("NOP");
  asm("NOP");
  asm("MOVW R31:R30,R17:R16");
.....
.....
.....
}

#pragma diag_default=Ta006

#pragma vector=TIMER0_COMP_vect
__raw __interrupt void INTERRUPT_DISPATCH(void)
{
  ((void(*)(void))DoADC)();
  if (USART_LOCK) return;
  USART_LOCK=1;
  __enable_interrupt();
  ((void(*)(void))UsartRx)();
  __disable_interrupt();
  USART_LOCK=0;
}


На самом деле можно выбросить код, который для работы со вложенными прерываниями (при этом откорректировав число в asm("SUBI R30,0x14") ). Закопипастил просто с рабочего проекта.
Григорий2000
Ок! Спасибо! Вкурил!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.