Цифроаналоговый преобразователь серии 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 нужно:
Найти звуковой файл типа .WAV или .RIFF с параметрами – моно, 8 бит,
или преобразовать другой звуковой файл к этим параметрам с помощью любого аудио-редактора.
Загрузить в редактор исходный аудио-файл и преобразовать
его в массив:
>> Edit;
>> Export: введите имя текстового файла для
сохранения массива;
>> Formatted Values выберите параметры сохранения: Elements:
hex, Group: Bytes, Type: C/C++ Array.
В созданном текстовом файле появится массив b1 [].
Содержимое этого массива нужно скопировать в массив Sound [] в файле проекта sound.h.
Откомпилироваться и прошиться, само собой.
|