Главная Дока Микро-80 Радио-86РК ЮТ-88 Орион-128 Ссылки Новости Письмо

Описание компьютера Радио-86РК
Журнал РАДИО

Таймер КР580ВИ53 в "Радио-86РК"

Возможности формирователя звукового сигнала компьютера “Радио-86РК” (далее - просто РК) ограничены, а качество синтезированного звука невысоко. Значительно лучших результатов можно добиться, оснастив РК звукосинтезатором всего на двух микросхемах: КР580ВИ53 и К561ЛЕ5. БИС КР580ВИ53 (КР580ВИ53) предназначена для формирования временных интервалов, длительность и период повторения которых управляются программно. Микросхема содержит три совершенно одинаковых счетчика (таймера) с независимым управлением. Особенность счетчиков - многорежимность: любой из них может работать в шести режимах, в каждом из этих режимов возможны три способа задания коэффициента пересчета, который, в свою очередь, может быть либо двоичным, либо двоично-десятичным. Иными словами, каждый из трех счетчиков можно запрограммировать тридцатью шестью способами!

Счетчики таймера КР580ВИ53 - 16-разрядные с пред установкой и работают на вычитание. Максимальный коэффициент пересчета соответствует загрузке в них всех нулей и составляет 65 536 (216) при работе в двоичном коде и 10000 (104) в двоично-десятичном.

Из всего многообразия режимов таймера для работы в звукосинтезаторе необходимо выбрать наиболее удобные для этой цели. Число вариантов можно сразу уменьшить вдвое, если условиться работать в двоичном коде, при котором коэффициент пересчета максимален. Дальнейшее сокращение вариантов зависит от выбора структурной схемы синтезатора звука. Одна из них приведена на рис.1.

Счетчик канала 0 интервального таймера является генератором тона. Высота самого низкого тона определяется коэффициентом деления: при максимальном его значении 216 и тактовой частоте 1,78МГц он равен примерно 27Гц. Канал 2 использован в качестве генератора импульса строба, определяющего продолжительность звучания тона. Длительность этого импульса зависит от коэффициента пересчета счетчика канала 2 и периода повторения сигнала на его входе. Период же повторения, в свою очередь, целиком определяется коэффициентом деления счетчика канала 1. Таким образом, каналы 0 и 1 работают в режиме программируемого деления частоты. Скважность выходного сигнала этих каналов принципиального значения не имеет, однако, по ряду соображений, целесообразно выбрать скважность, равную двум (меандр). Такая форма сигнала получается при работе счетчика таймера в режиме 3. Если необходимый коэффициент деления четное число, скважность сигнала на выходе точно равна двум, а если нечетное, то высокий уровень на выходе будет присутствовать в течение (N+1)/2 периодов входного сигнала, а низкий - в течение (N-1)/2 периодов.

Формировать сигнал строба (канал 2) можно несколькими способами. Наиболее просто это сделать, инициировав счетчик канала 2 в режиме 0 (он носит название режима генерации задержанного сигнала прерывания, но мы будем называть его режимом генерации строба в соответствии с функцией, выполняемой этим счетчиком в звукосинтезаторе). В этом случае счетчик работает следующим образом. В исходном состоянии уровень сигнала на выходе счетчика высокий. Сразу же после инициализации по программе режима 0 па выходе появляется низкий уровень. После загрузки числа N (коэффициента пересчета) начинается счет входных импульсов. При поступлении на вход счетчика N импульсов на выходе вновь устанавливается низкий уровень и остается таким до тех пор, пока не будет установлен иной режим работы или вновь загружен коэффициент пересчета.

Узел совпадения в звукосинтезаторе может быть выполнен на двухвходовом элементе "ИЛИ".

Итак, применительно к структурной схеме звукосинтезатора (рис. 1) из всего многообразия режимов работы таймера выбраны всего два: режим 0 (в нашем случае генератор импульса строба) для канала 2 и режим 3 генератор меандра) для каналов 0 и 1. При этом все счетчики работают в двоичном коде.

Принципиальная схема звукосинтезатора приведена на рис.2.

Узел совпадения, разрешающий прохождение тональной посылки только во время действия импульса строба, выполнен на элементе DD2.1. Элемент DD2.2 суммирует сигналы тональных посылок, и сигнал с выхода INTE микропроцессора, который появляется в момент нажатия клавиши. При необходимости этот сигнал можно отключить кнопкой SB1.

Рассмотрим теперь, каким образом программируют счетчики. Таймер КР580ВИ53 содержит общий для всех трех счетчиков блок управления, состоящий из буфера канала данных и внутренней магистрали данных []. Чтобы задать необходимый режим работы и коэффициент пересчета, необходимо по шине данных компьютера ввести в блок управления так называемые управляющие слова и числа, определяющие начальные состояния каждого из счетчиков. Доступ к таймеру открывается подачей сигнала низкого уровня на вход CS (выбор микросхемы), ввод информации по такому же уровню на входе WR, а выбор конкретного счетчика (канала) определяется комбинацией сигналов на адресных входах А0 и А1, подключенных к шине адреса РК параллельно адресным входам программируемого интерфейса D14(КР580ИК55). При этом подразумевается, что он будет инициирован в режиме ввода. При использовании микросхемы D14 для вывода информации она будет "программировать” звукосинтезатор, что, естественно, вызовет генерацию непредсказуемых звуков. Если это нежелательно, следует позаботиться о принудительном отключении звука при выводе информации через D14. В простейшем случае для этого достаточно отключить вход CS от дешифратора адресов D11 и соединить его с источником питания +5В через резистор сопротивлением 10 кОм. Для этой же цели можно использовать и входы Е0, El, E2 счетчиков. Для загрузки управляющего слова на адресные входы А0 и А1 необходимо подать высокие уровни, а на вход записи коэффициента пересчета канала 0 - низкие. Счетчик канала 1 программируют при высоком уровне на входе А0 и низком на А1, а счетчик канала 2 - при низком на А0 и высоком на А1

При программировании звукосинтезатор рассматривается как набор ячеек памяти с адресами 0А000Н (счетчик канала 0), 0А001Н (счетчик канала 1), 0А002Н (счетчик канала 2) и 0А00ЗН (регистр управляющего слова) Управляющее слово восьмиразрядное, его формат

D7 D6 D5 D4 D3 D2 D1 D0, где
разряд D0 определяет вид кода, в котором будут заданы коэффициенты пересчета D0=0-двоичный,
D0=1 -
двоично-десятичный;
разрядами D1, D2, D3 устанавливают режим работы счетчика D1=0, D2=0, D3=0 - режим 0;
D1=1, D2=1, D3=0
- режим 3;
разряды D4 и D5 задают способ ввода коэффициента пересчета D4=0, D5=1 - только старший байт,
D4=1, D5=0 -
только младший байт,
D4=1, D5=1 -
младший, затем старший байт;
разряды D6 и D7 определяют номер канала D6=0, D7=0 - счетчик канала 0,
D6=1, D7=0 -
счетчик канала 1,
D6=0, D7=
1 - счетчик канала 2

Счетчики программируют в любой последовательности записью соответствующего управляющего слова. Если режим работы счетчика в процессе работы не изменяется, то новое значение коэффициента пересчета N можно вводить без управляющего слова. Это позволяет в некоторые случаях производить однократную инициализацию таймера.

Отметим также, что коэффициент пересчета N можно задать тремя способами: вводом либо старшего байта, либо младшего, либо двух байтов - сначала младшего, а затем старшего. Двухбайтовый ввод используют в тех случаях, когда исходную частоту необходимо поделить очень точно, например, в “музыкальных” программах. При малом коэффициенте пересчета ограничиваются вводом только младшего байта, а если требуемая точность деления невелика, то вводят один старший байт. Если необходимо изменить режим работы счетчика в процессе выполнения программы, например, перейти от однобайтового ввода коэффициента пересчета к двухбайтовому, то в начале этого блока программы следует записать управляющее слово, задающее новый режим, а в конце восстановить прежнее управляющее слово, вернув, таким образом, счетчик таймера в первоначальный режим работы.

Значения управляющего слова в двоичном, шестнадцатиричном и десятичном виде приведены в табл.1. Как определить коэффициент пересчета для получения сигнала требуемой частоты, покажем на примере. Предположим, что необходимо запрограммировать счетчик канала 0 на частоту выходного сигнала 100 Гц Требуемый коэффициент N при тактовой частоте 1777778 Гц примерно равен 17778, или в шестнадцатиричном виде - 4572Н.

При двухбайтовом задании коэффициента пересчета старший байт равен 45Н, младший - 72Н. Если задать коэффициент пересчета только старшим байтом (режим однобайтового программирования), то частота выходного сигнала будет равна 100,644 Гц. Для простейших программ такое отличие частоты от заданной несущественно и вполне допустимо, однако при написании музыкальных программ целесообразно применять только двухбайтовое программирование канала 0.

Итак, все необходимые данные для программирования таймера у нас есть. Рассмотрим, как это делается практически. Предположим, необходимо запрограммировать звукосинтезатор на выдачу сигнала частотой 1 кГц длительностью 1с. Для этого счетчик канала 0 следует перевести в режим генератора меандра, задав N=1 778 в двоичном коде двумя байтами. Счетчик канала 1 должен работать в таком же режиме, но с N=17778 и управлением в двоичном коде старшим байтом (частота выходного сигнала примерно 100Гц). И, наконец, счетчик канала 2 должен быть установлен в режим генерации строба с N=100 и управлением в двоичном коде младшим байтом. Для этого необходимо проделать следующие операции:

Звукосинтезатор начнет работать сразу же после выполнения шестой операции - загрузки коэффициента пересчета генератора строба. Для повторного запуска достаточно повторить только шестую операцию. При этом можно одновременно изменить и длительность строба.

Если необходимо изменить и высоту тона, следует повторить сначала вторую операцию, а затем шестую.

При однобайтовом программировании канала 0 необходимо повторить еще и первую операцию, изменив соответствующим образом управляющее слово (табл. 1).

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

Используя рассмотренный синтезатор, звуковое сопровождение можно включить в программы, написанные на любом компьютерном языке. Для “Радио-86РК” наиболее употребительным языком, конечно, является Бейсик. Рассмотрим несколько простейших "звуковых" программ, написанных на этом языке.

Самая простая программа (см табл. 2) - одиночный тональный сигнал (номера строк в этом и последующих примерах присвоены произвольно) Адреса и значения коэффициентов пересчета - десятичные.

Параметр Т определяет высоту тона, а Р - его длительность.

Значению Т=3 соответствует высота тона примерно 2,3 кГц, а Т=34 - около 200 Гц.

Длительности Р=10 соответствует примерно 0.1с, а Р=255 - около 2,5 с.

По существу, эта программа состоит из операций, описанных ранее.

Таблица 2 1000 POKE -24573 38
1010 POKE -24576
Т
1020 POKE -24573 102
1030 POKE -24373 69
1040 POKE -24373 144
1050 POKE -24574 P

Операции в строках 1000, 1020 1030, 1040 во многих случаях необходимо выполнить один раз в начале программы, поэтому представляется целесообразным введение в интерпретатор языка Бейсик подпрограммы в машинных кодах, обеспечивающей инициализацию таймера при каждом запуске интерпретатора.

Возможный вариант такой подпрограммы для интерпретатора [4] приведен в табл.3.

Она размещена на месте подпрограммы настройки порта БИС D14 (о запуске интерпретатора звукосинтезатор сигнализирует коротким звуковым сигналом частотой примерно 200 Гц). Благодаря такому решению подпрограмма выдачи одиночного тонального сигнала может быть записана одной строкой:

1000 POKE -24376, Т: POKE -24374, P

Несколько усложнив рассмотренную программу, можно получить более разнообразные звуки и использовать их в компьютерных играх.

Примером может служить программа (табл. 4), формирующая десятикратный сигнал "SOS" в коде Морзе (например, для игры “Морской бой”).

Таблица 4
1000 REM * ДЕСЯТИКРАТНЫЙ •SOS"
1010 POKE -24576,6
1020 FOR K=0 TO 9: FOR I=1 TO 9
1030 P=4: P1=8
1040 IF I>3 AND К<7 THEN P=4*P
1050 IF I=3 OR I=6 THEN P1=10*P1
1060 IF I=4 Oft I=5 THEN P1=6*P1
1070 IF I=9 THEN P1=20*P1
1080 POKE -24374, P
1090 FOR J=0 TO P1: NEXT J, I, K
1100 STOP

В строке 1010 задается частота тонального сигнала - примерно 1кГц. Длительность тональной по ссылки определяется коэффициентом Р. строке 1030. Коэффициент Р1 задает временную задержку в выполнении программы (цикл по переменной J в строке 1090). Если бы этой задержки не было то компьютер, выполняя цикл по I, произвел бы перезагрузку канала 2 таймера, не дожидаясь окончания тональной посылки и нарушив тем самым выполнение программы. Кроме того, цикл по 1 ответствен за паузы между тональными посылками. В строках 1040-1070 определяется номер посылки и корректируется ее длительность ("точка” или “тире”), а также определяется продолжительность цикла по J, т. с. длительность пауз между посылками.

Следует отметить, что в реальных “звуковых” программах звучание группы тональных посылок может несколько отличаться от задуманного из-за нарушения длительности посылок, пауз и соотношений между ними. Это связано с тем, что, выполняя подпрограмму компьютер “просматривает” ОЗУ, отыскивая требуемые операнды. Время “просмотра” может быть различным, поэтому после введения "звуковой" подпрограммы в основную необходимо откорректировать значение временных интервалов Р и Р1 в строке 1030.

Звукосинтезатор можно использовать и как простейший одноголосый музыкальный инструмент. Основные принципы кодирования остаются прежними, однако, для верного воспроизведения запрограммированной мелодии коэффициент пересчета канала 0 следует задавать двумя байтами.

Для упрощения программирования мелодий в табл.5 приведены значения коэффициентов пересчета, а также младшего и старшего байтов, соответствующие той или иной ноте (для тактовой частоты 1 777 778Гц).

Написание “музыкальных” программ сводится к последовательному заданию требуемых коэффициентов пересчета канала 0, длительности строба в канале 2 и организации пауз необходимой продолжительности. В некоторых случаях объем программы можно сократить, воспользовавшись оператором DATA.

Рассмотрим в качестве примера программу (табл.6), воспроизводящую фрагмент детской песенки В лесу родилась елочка”.

Таблица 6
0999 REM * В ЛЕСУ РОДИЛАСЬ ЕЛОЧКА *
1000 DATA 183,17,137,10,137,10,211,11,137,10,70,13,183,17,183,17
1010 DATA 183,17,137,10,137,10,241,9,228,7,220,8,220,8,200,15
1020 DATA 200,15,241,9,241,9,137,10,211,11,70,13,183,17,137,10
1030 DATA 137,10,211,11,211,11,70,13
1040 POKE -24573,54
1050 FOR J=l TO 28: READ M, S
1060 T=60: IF J=14 THEN T=120

1070
POKE -24576,М; POKE -24376,S; POKE -24574,.4*T
1080 FOR I=0 TO T: NEXT I IF J=14 THEN FOR I=0 TO T: NEXT I
1090 NEXT J: RESTORE
1100 STOP

Фрагмент состоит из 28 тактов. Значения коэффициентов пересчета канала 0, необходимые для воспроизведения соответствующих нот, записаны в первых четырёх строках. Выполнение программы начинается со строки 1040, в которой с помощью оператора POKE счетчик-делитель канала 0 настраивается на режим двухбайтового кодирования коэффициента пересчета. В строках 1050 1090 организуется цикл из 28 шагов, при выполнении которого сначала считываются значения младшею (М) и старшего (S) байтов коэффициента пересчета, а затем задастся длительность задержки Т и корректируется ее значение для 14-го шага цикла (строка 1060). Операторы строки 1070 определяют режимы работы счетчиков каналов 0 и 2. Необходимая временная задержка в выполнении программы создается с помощью операторов FOR и NEXT (строка 1080). Для 14-го шага цикла задержка удваивается. Выполнение цикла завершается в строке 1090 перемещением указателя считывания в первую позицию, что позволяет обращаться к этой подпрограмме неоднократно. Если строки 1000 - 1100 являются подпрограммой, в строке 1100 вместо оператора STOP может быть использован другой, например RETURN.

Звукосинтезатор можно применить и для “озвучивания” клавиатуры компьютера. Дело в том, что сигнал INTE, используемый в “Радио-86РК” для звуковой индикации нажатия на клавишу, на слух воспринимается, как щелчок, и при длительной работе с ЭВМ вызывает неприятные ощущения. “Озвучить” клавиатуру с помощью таймера можно двумя способами: программно и аппаратно. В первом случае в МОНИТОР или в интерпретатор языка Бейсик вводят специальную подпрограмму генерации звука при каждом нажатии клавиши. Проще всего это сделать, "внедрившись в подпрограмму ввода символа с клавиатуры. Один из вариантов такой подпрограммы приведен в табл.7.

Программное “озвучивание” клавиатуры имеет недостатки:

При желании это легко сделать, но, во-первых, что еще больше увеличит время выполнения подпрограммы, во-вторых, в основной программе каждый раз придется перенастраивать канал 0.

Для аппаратного озвучивания можно использовать устройство на микросхеме К561ЛЕ5 (рис.3). На элементах DD3.1 и DD3.2 выполнен ждущий мультивибратор, запускаемый фронтом сигнала INTE. Низкий уровень с выхода элемента DD3.1 разрешает работу тонального генератора, собранного на элементах DD3.3, DD3.4.

По окончании импульса, формируемого ждущим мультивибратором, на выходе элемента DD3.1 устанавливается высокий уровень, запрещающий работу тонального генератора. В результате на выходе элемента DD3.4 формируется серия импульсов, длительность которых зависит от постоянной времени цепи R2C1 (около 0,1с). Частоту тонального сигнала можно варьировать в больших пределах, изменяя постоянную времени цепи R4C2. В паузе между сериями сигнала на выходе элемента DD34 присутствует низкий уровень, поэтому устройство можно включить в разрыв провода идущего от выхода INTE микропроцессора (вывод 16 БИС D6) к переключателю SB1 (см. рис. 2).

В простейшем звукосинтезаторе входы Е0 - Е2 счетчиков таймера не используются, поэтому генерация сигнала начинается сразу после поступления от микропроцессора соответствующей команды. По этой же причине при первом включении компьютера возможна генерация произвольного звукового сигнала, зависящего от того - что записано в регистры таймера КР580ВИ53 при включении. Заставить таймер “замолчать” нетрудно: с помощью директивы М МОНИТОРА необходимо записать в один из каналов таймера любое управляющее слово, например по адресу 0А00ЗН записать 38 (26Н). Таймер перейдет в режим ожидания ввода коэффициента пересчета, и генерация звука прекратится.

И. КРЫЛОВА

г. Москва

Скопировано с журнала РАДИО №11 1987 г.
Отредактировано Лесных Ю. И. 1999 г.

Описание компьютера Радио-86РК
Журнал РАДИО



(C) 2003-2010 www.danbigras.ru Наш адрес: info@danbigras.ru
Всё о старых компьютерах