Воспроизведение звуковых фрагментов на ЦАП LPC2368. Раздел: Микроконтроллеры ARM7 LPC от NXP.

Eugene's MCU

Воскресенье, 13.07.2014, 19:09

Главная | | Мой профиль | Выход | RSS
Меню сайта
Категории каталога
Рекламный блок





Рекомендовать этот сайт:

Главная » Статьи » Применения » Микроконтроллеры ARM7 LPC от NXP


Воспроизведение звуковых фрагментов на ЦАП LPC2368
   
      Цифроаналоговый преобразователь серии LPC формирует на выводе микроконтроллера напряжение пропорциональное 10-и битному числу записанному в регистр DACR. При этом напряжение определяется формулой:
      AOUT = VALUE/1024 × VREF.

      где: AOUT – выходное напряжение ЦАП на выводе AOUT;
             VALUE – значение в регистре DACR;
             VREF – опорное напряжение на выводе VREF.

      Регистр DACR 32-х разрядный, а значение для ЦАП записывается в два младших байта регистра. Значащими разрядами при этом являются старшие
десять бит – 5…15. Для инициализации преобразователя достаточно разрешить его подключение к одному из выводов микроконтроллера, например P0.26:
      PINSEL1 |=(1<<21); // Set P0.26 to DAC output.

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

      Для отладки выведем через ЦАП синусоиду, описанную в 50 точках восьмиразрядными числами в массиве:
      unsigned char sin[50]=
      {127,111,95,80,66,52,40,29,20,12,6,2,0,0,2,6,12,20,29,40,52,66,80,95,111,127,143,158,174,188,201,
      214,225,234,242,248,252,254,254,252,248,242,234,225,214,202,189,174,159,143};

      Частота синусоиды будет равна частоте записи в ЦАП делённой на число элементов в массиве, например:
      Fsin = 1 000 = 50 000/50.

      Необходимую задержку между записями в регистр DACR для частоты ядра 57,6Мгц подберём опытным путём.
      В результате:
      int main (void)
      {
     
     unsigned char SimpleNum=0; // Счётчик элементов массива.
          unsigned int delay; // Счётчик задержки.
          PINSEL1 |=(1<<21); // Set P0.26 to DAC output.
     
     while ( 1 )
          {
     
          delay=195;
               while (delay>0) {delay--;} // Задержка.
               DACR = sin[SimpleNum++]<<8; // Запись выборки в ЦАП.
               if (SimpleNum>49) SimpleNum=0;
          }
     }
  
     

   
     Программа, выдающая на ЦАП звуковые семплы из файла типа .wav  представлена в проекте >> EugeneDAC.rar (u-Vision 3). В программе реализованы прерывания на таймере TO, по которым осуществляется запись в регистр DACR восьмиразрядных значений звуковой выборки из массива Sound [].
     Частоту дискретизации аудио-файла в программе нужно объявить константой 
     #define Smaples     11000

     В проект заложен массив выборок из файла C:\Program Files\QIP\Sounds\sndAuth.wav с частотой дискретизации 11кГц. Выход ЦАП микроконтроллера через электролит ёмкостью в несколько десятков мкФ нужно соединить со входом любого готового УМЗЧ, хотя кое-что можно расслышать уже на обычном низкоомном динамике.
 
          Для извлечения массива данных из файла .wav нужно:
  1. Найти звуковой файл типа .WAV или .RIFF с параметрами – моно, 8 бит, или преобразовать другой звуковой файл к этим параметрам с помощью  любого аудио-редактора.
  2. Скачать и установить HEX-редактор файлов "Hex Editor Neo” (www.new-hex-editor.com).
  3. Загрузить в редактор исходный аудио-файл и преобразовать его в массив:
               >> Edit; 
               >> Export: введите имя текстового файла для сохранения массива;
               >> Formatted Values  выберите параметры сохранения: Elements: hex, Group: Bytes, Type: C/C++ Array.

             
 
  1. В созданном текстовом файле появится массив b1 []. Содержимое этого массива нужно скопировать в массив Sound [] в файле проекта sound.h.
  2. Откомпилироваться и прошиться, само собой.
 


При использовании материалов сайта ссылка на данный источник обязательна.

Категория: Микроконтроллеры ARM7 LPC от NXP | Добавил: eugenemcu (01.10.2010) | Автор:

Просмотров: 5413 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Статистика

Наш магазин




Какую среду разработки Вы используете?

[ Результаты · Архив опросов ]
Всего ответов: 1556



Им нужна Ваша помощь: