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 |
7А |
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 |
7А |
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) В случае необходимости можно использовать и другое количество измерений.
Содержание | © Каталог радиолюбительских схем
Все права защищены. Радиолюбительская страница.
Пишите нам. E-mail: irls@yandex.ru или irlks@mail.ru.
|
Я радиолюбитель |