Теперь разберемся с частотой оцифровки. Тактовую частоту МК для такой схемы лучше выбирать максимально возможной, для большинства AVR это 16 МГц (чтобы еще повысить качество звука, можно специально взять модель 2313, у которой максимальная частота 20 МГц, но мы будем ориентироваться на 16 МГц). Легко подсчитать, что реверсивный 8-разрядный счетчик будет считать туда и обратно с частотой f такт/510, т. е. при такой тактовой частоте получится около 32 кГц. Это и будет несущая частота f опна выходе ШИМ, что удовлетворительно, т. к. она выходит за пределы слышимого диапазона. Однако требуемая частота оцифровки исходного звука может быть все же заметно ниже (что удобно в целях экономии памяти). Пусть она составляет 4 кГц (это может возмутить аудиофилов, но для передачи речи это нормальный показатель).
Тогда можно сразу выбрать характеристики RC-фильтра: чтобы отфильтровать 32 кГц простой RC-цепочкой, нам желательно, чтобы частота среза не превышала частоту оцифровки, т. е. 4 кГц. Тогда 32 кГц затухнут в 8 раз по сравнению с верхней частотой диапазона оцифровки, и мы их влияние не почувствуем. Параметры фильтра рассчитываются по формуле f cp= 1/2π RС, и нашим требованиям удовлетворяют параметры R = 10 кОм и С = 3,9 нФ.
Для хранения звука используем память с I 2С-интерфейсом АТ24С512. Одному отсчету тут будет соответствовать ровно один байт, одной секунде звучания — 4 кбайт. Итого 65 536 байт дадут нам около 16 с звучания. Этого достаточно, чтобы произнести стандартную предвыборную речь кандидата в президенты, если предварительно ее отредактировать и выбросить все фразы, не несущие смысловой нагрузки.
Все параметры схемы мы рассчитали, можно приступать к проектированию. В качестве звукового усилителя возьмем описанный в главе 6 микроусилитель МС34119. Выбор усилителя не имеет большого значения, но данная микросхема «умеет» работать с однополярным напряжением 5 В и это удобно. Общая схема соединений показана на рис. 19.3. Полную схему включения МС34119 см. на рис. 6.15.
Рис. 19.3. Принципиальная схема для использования AVRв режиме голосовой сигнализации
Программа для вывода звука
Здесь мы для простоты выберем АТ9 °C8515 семейства Classic (а точнее, ATmega8515 в режиме совместимости с АТ9 °C8515, потому что оригинал может работать максимум на 8 МГц тактовой частоты, а мы рассчитывали на 16 МГц). Это проще для нашего рассмотрения, поскольку в семействе Classic имеется лишь один режим PWM для таймеров, а в Mega их много и это лишь путает. В крайнем случае, разобраться в том, как дополнить программу выбором нужного нам в данном случае режима Phase Correct PWM вы сможете самостоятельно. Для работы с интерфейсом I 2С в программе используется тот же самый, что и в главе 16 , включаемый файл i2c.prg (см. Приложение 5 , листинг П5.3).
В целях компактности из него можно для данного случая удалить процедуры, относящиеся к RTC ( write_i2cи read_i2c), но будьте осторожны, чтобы не удалить что-то нужное. Кроме того, следует обратить внимание на величину задержки в процедуре delay— там у нас установлена величина 5 мкс в расчете на 4 МГц. При 16 МГц задержка укоротится вчетверо, и память будет работать на пределе (400 кГц), что не очень хорошо. Хотя обычно (если линия передачи не слишком длинная) память справляется, но помнить об этом параметре в случае возникновения каких-то сбоев следует. Но и снижать скорость шины до тех величин, что у нас были в измерителе не следует, т. к. чтение может не успеть за битрейтом (см. далее).
Программа для данного случая содержится в листинге 19.1.
Листинг 19.1
/==== программа вывода цифрового звука ====
;процессор mеgа8515 в режиме 8515, частота 16 МГц
.include "853 5def.inc"
.equ T_Sample = 193 ;предварительное значение для Timer 0 при 4 кГц
.equ bSample = 0 ;бит готовности к чтению
;регистры temp и DATA определены в "I2С.рrg" (Приложение 5)
.def FLAGS = r19
; прерывания
rjmp RESET ;начальный загрузчик
reti
reti
reti
reti
reti
reti
rjmp TIMO ;обработчик прерывания переполнения Timer 0
reti
reti
reti
reti
.include "I2C.prg"
RESET:
ldi temp,0b00100000
out DDRD,temp ;ОС1А — на выход
ldi temp,(1<< ;инициализация PWM
out TCCR1A,temp
ldi temp,1< ;включаем Timer1, 1/1
out TCCR1B,temp
ldi temp,(1<< ;включаем Timer0, 1/64
Читать дальше
Конец ознакомительного отрывка
Купить книгу