Содержание

Каталог радиолюбительских схем

Я радиолюбитель

1.1 ИЗМЕРЕНИЕ ЧАСТОТЫ.

Ваш "Синклер" может стать основой цифрового измерительного комплекса с достаточно широкими возможностями. Наиболее просто с помощью компьютера измерять частоту электрических сигналов в диапазоне звуковых частот. Этот режим в " Синклере" практически уже реализован. При загрузке программ компьютер постоянно измеряет частоту поступающего от магнитофона сигнала. Поэтому, если уровень измеряемого сигнала соответствует уровню на линейном выходе магнитофона, то частотомер может быть реализован чисто программными средствами, без использования каких-либо аппаратных средств. Примеры таких программ приведены в литературе (1), (2). Измерение частоты основано на подсчете количества периодов сигнала за фиксированный интервал времени. Поскольку частота в тактовом генераторе компьютера стабилизирована кварцем, то точность задания измерительного интервала, а следовательно и измерения частоты, будет достаточно высока. Для уменьшения погрешности связанной с дискретностью счета периодов сигнала измерительный интервал должен быть возможно больше, но для удобства измерений он не должен быть слишком большим. Приведенная программа формирует интервал длительностью около 1 секунды. При этом погрешность обусловленная дискретностью счета в выбранном диапазоне измеряемых частот 300 Гц - 3 КГц составит 0,003 - 0,0003 соответственно.

Не сложно расширить частотный диапазон в сторону более высоких частот. Для этого на входе устанавливается делитель частоты, а в программу вводится дополнительный коэффициент, учитывающий коэффициент деления при отображении результатов измерений. Схемотехника входных делителей может быть различной. Если необходимо измерение в диапазоне частот до 10-20 МГц, то входной делитель частоты может быть реализован на микросхемах ТТЛ серий 155, 555, 1533. При необходимости измерения более высоких частот можно собрать входной делитель описанный в (3). Варианты схем входных делителей частоты приведены на рис. 1.1.

На входы делителей должен подаваться импульсный сигнал с уровнями ТТЛ. Для согласования выходного сигнала делителя частоты и магнитофонного входа компьютера необходимо использовать резистивный делитель с коэффициентом деления около 20 (2кОм и 100 Ом).

Рассмотрим более подробно работу программы, обеспечивающей измерение частоты. Алгоритм измерения частоты аналогичен алгоритму в программе (2). Текст программы приведен ниже.

Программа 1.1.

10 CLEAR 65300; DIM A(64)

12 INPUT "FREQUENCY OF QUARTZ =";Q

13 LET K=Q/14

15 INPUT "1:N";N

16 LET KD=N

20 FOR I=1 TO 64

30 READ A(l): POKE (65300+l),A(l)

40 NEXT I

50 DATA 243,1,0,0,17,141,55,219

60 DATA 254,203,119,40,10,0,0,0

70 DATA 19,122,183,32,242,24,7,0

80 DATA 19,3,122,183,32,8,33,85

90 DATA 255,112,35,113,251,201,219,254

100 DATA 203,119,40,10,0,0,0,19

110 DATA 122,183,32,211,24,232,0,0

120 DATA 0,19,122,183,32,232,24,222

130 PRINT AT 9,6;"FREQUENCY:";AT 9,26;"(Hz)"

135 PRINT AT 10,6;"1:N";KD

140 OUT 254,7: RANDOMIZE USR 65301

150 LET F=256*PEEK 65365+PEEK 65366-1

160 IF F<0 THEN LET F=0

170 PRINT AT 9,16;" ";AT 9,16;INT((F*K*KD)/0.951)

180 GO TO 140

Основу ее составляет подпрограмма в машинных кодах. Эти коды записаны в строках 50-120. Загрузка кодов в память осуществляется в строках 10-40, а запуск подпрограммы в строке 140. В результате работы подпрограммы в машинных кодах в ячейках памяти с адресами 65365 и 65366 записывается значение частоты. В строке 170 производится вывод значения частоты на экран в удобном виде. При этом коэффициент К учитывает отличие частоты кварцевого генератора от номинала 14,0 МГц, а коэффициент KD коэффициент деления входного делителя. В строках 12-16 производится ввод значений коэффициентов в программу. Если эти коэффициенты постоянны, то можно удалить строки 12 и 15, а в строках 13 и 16 вместо Q и N записать постоянные коэффициенты. Коэффициент 0.951 корректирует значение частоты, получаемое подпрограммой в машинных кодах.

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

Программа 1.2

Адрес

Метка

Код

Команда

Комментарий

65301

243

F3

di

Запрещение прерываний

1

01

Id be 00 00

Обнуление регистра ВС

0

00

в котором накапливается

0

00

результат

17

11

Id de 37 8D

Загрузить в DE

141

8D

14221 в DE задается

55

37

измерительный интервал

Ml

219

DB

in a,(FE)

Из порта с адресом

254

FE

254 переспать данные в

аккумулятор

65310

203

CB

bit 6,a

Установить флаг Z в

119

77

соответствии с разрядом

6 аккумулятора

40

28

jr Z,s

Переход на метку М2

10

0A

(смещение 10),если Z-0

0

00

Дополнительная задержка

0

00

0

00

19

13

inc de

de-de+1

122

7A

ld a,d

Проверка обнуления

183

B7

or a

регистра de и переход

65320

32

20

jr nz,s

по условию "не 0"

242

F2

на метку Ml

24

18

jr,s

Переход на метку OUT

7

07

0

00

M2

19

13

inc de

de-de+1

3

03

inc bc

Ьс-Ьс+1

122

7A

ld a,d

Проверка обнуления

183

B7

or a

регистра de и переход

32

20

jr nz,s

по условию 'не 0"

65330

8

08

на метку МЗ

OUT

33

21

Id hi FF 55

Загрузка в hi числа -

85

55

адреса ячейки памяти

255

FF

в которой будет результат

112

70

ld(hl),b

В ячейку 65365 помещается

35

23

inc hi

содержимое регистра В,а в

113

71

ld(hl),c

ячейку 65366 содержимое С

251

FB

ei

Разрешение прерываний

201

C9

ret

Возврат в BASIC

МЗ

219

DB

in a,(FE)

Из порта с адресом

65340

254

FE

254 переслать данные в

аккумулятор

203

CB

bit 6,a

Установить флаг 2 в

119

77

соответствии с разрядом

6 аккумулятора

40

28

jrz,s

Переход на метку М4

10

OA

(смещение 10),если Z-0

0

00

Дополнительная задержка

0

00

0

00

19

13

inc de

de-de+1

122

ld a,d

Проверка обнуления

65350

183

В7

or a

регистра de и переход

32

20

jr nz,s

по условию 'не 0*

211

D3

на метку Ml

24

18

jr,s

Переход на метку OUT

232

Е8

М4

0

00

Задержка

0

00

0

00

19

13

inc de

de=de+1

122

ld a,d

Проверка обнуления

65360

183

В7

or a

регистра de и переход

32

20

jr nz,s

по условию *не 0*

232

Е8

на метку МЗ

24

18

jr,s

Переход на метку OUT

65364

222

DE

65365

Ячейки в которые

65366

записывается результат

работы подпрограммы

Поступающий с магнитофона (а в нашем случае от источника сигнала измеряемой частоты) аналоговый сигнал преобразуется в компьютере в импульсный сигнал и подается на вход 6 разряда параллельного порта с адресом FEh (254d). Через фиксированные отрезки времени подпрограмма проверяет состояние 6 разряда этого порта. Этот процесс показан на рис. 1.2. При каждой проверке на 1 увеличивается состояние регистра DE и проверяется его переполнение. Время, за которое произойдет заполнение этого регистра, зависит лишь от тактовой частоты и, поэтому, неизменно. Это время является измерительным интервалом. Если при проверке состояния 6 разряда порта будет обнаружено изменение его состояния из "1" в "0", то на 1 увеличивается содержимое регистра ВС. Число, которое будет накоплено в регистре ВС за измерительный интервал времени, будет пропорционально частоте входного сигнала. Результат работы подпрограммы заносится в ячейки памяти, через которые осуществляется связь с основной программой на БЕЙСИКе.

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

По всей видимости, образцовый частотомер недоступен для читателей книги, но не стоит отчаиваться. Автор компьютера сэр К. Синклер снабдил его многими полезными способностями, в том числе и реализованными в операционной системе часами реального времени. Поскольку эталоном для этих часов является внутренний кварцевый генератор компьютера, то точность их хода зависит от отклонения частоты кварцевого генератора от номинала 14.0 КГц. Программа 1.3 реализует электронный секундомер.

Программа 1.3.

10 РОКЕ 23674,0

20 РОКЕ 23673,0

30 РОКЕ 23672,0

40 LET Т= INT ((65536"РЕЕК 23674+256*РЕЕК 23673+РЕЕК 23672)/50)

50 PRINT T

Программа показывает на экране сколько секунд прошло после ее запуска. Обычные электронные часы имеют точность хода не хуже 1 секунды в сутки, поэтому их вполне можно принять за эталон. Для получения точности калибровки 1/1000 необходимо по электронным часам отмерить 1000 секунд (16 минут 40 секунд) и зафиксировать число N на экране телевизора. Частота кварцевого генератора будет составлять: F = N*0.014 Эту частоту и нужно вводить в программе 1.1 в ответ на запрос FREQUENCY OF QUARTZ =.

В проверенном компьютере результат измерения составил N=1002, поэтому частота F = 14.028 МГц.

Для дальнейшего повышения точности необходимо увеличить интервал времени, в течении которого производится измерение частоты (в программе 1.1 эта длительность задана около 1 секунды). Можно изменить в этой программе подпрограмму в машинных кодах, но, по всей видимости, проще организовать многократные измерения и усреднение частоты в программе на бейсике. При этом измерительные интервалы оказываются отделены друг от друга некоторыми промежутками времени, однако, при измерении неизменяющейся частоты, точность измерений от этого не уменьшается. В программу 1.1 достаточно внести следующие изменения:

Программа 1.4.

140 FOR Z=1 ТО 10

145 OUT 254,7: RANDOMIZE USR 65301

150 LET F=F+256"PEEK 65365+PEEK 65366-1

155 NEXT Z

160 IFF<0 THEN LET F=0

170 PRINT AT 9,16;" "AT 9,16;INT((F*K*KD)/9.51)

180 GO TO 140

В программе 1.4 производится усреднение по десяти замерам частоты. Цикл организуется в строках 140 - 155. В строке 150 происходит суммирование результата каждого измерения, а при выводе результата на экран сумма делится на количество измерений (в данном случае для этого вместо коэффициента 0.951 используется 9.51) В случае необходимости можно использовать и другое количество измерений.

Rambler's Top100
Рейтинг@Mail.ru
Rambler's Top100
Содержание

© Каталог радиолюбительских схем

Все права защищены. Радиолюбительская страница.
Перепечатка разрешается только с указанием ссылки на данный сайт.
Пишите нам. E-mail: irls@yandex.ru или irlks@mail.ru.
Я радиолюбитель
Hosted by uCoz