Чтение онлайн

на главную - закладки

Жанры

Как превратить персональный компьютер в измерительный комплекс
Шрифт:

program adc12;

uses crt;

var n,f,e: byte;

b,g: integer;

d: real;

procedure init;

begin

b:=$378; n:=12;

port[b]:=1;

delay(100);

port[b]:=254;

delay(500);

end;

procedure acquisition;

begin

port[b]:=0; d:=0;

port[b]:=254; port[b]:=252;

port[b]:=254; port[b]:=252;

for f:=0 to n-1 do

begin

port[b]:=254;

e:=port[b+1] and 128;

port[b];=252;

if e=0 then d;=d+exp((n-1-f)*ln(2));

end;

d;=(5*d)/(exp((n)*ln(2))-1);

port[b]:=253;

end;

procedure affiche;

begin

acquisition;

d:=(int(100*d))/100;

writeln(d);

delay(500);

end;

begin

clrscr;

init;

for g:=1 to 20 do

begin

affiche;

end;

end.

(* COPYRIGHT 1997 Patrick GUEULLE *)

Описанные

в книге устройства, работающие через последовательный порт (рис. 4.3 и 4.6), не имеют такого ограничения и могут наилучшим образом использовать точность примененных в них высококачественных АЦП. Только версия с оптоизоляцией (рис. 4.13, 4.14) потребует определенной аккуратности, так как использование оптронов слегка ухудшает характеристики устройства в 12-разрядном режиме.

Из сказанного можно сделать вывод, что с АЦП LTC 1286 или ADS 1286 будут работать программы 12-BITS.BAS и 12-BITS.PAS, c учетом того, что для связи с ПК используется последовательный порт СОМ1 (адрес 3F8h в строке 30).

10 REM — 12BITS —

20 KEY OFF: CLS

30 B=&H3F8: REM COM1:

40 N=12: REM число разрядов

50 OUT B+4,1

60 FOR T=0 TO 100: NEXT T

70 OUT B+3,64

80 TOR T=0 TO 500: NEXT T

90 GOTO 200

100 OUT B+4,0: D=0: REM ACQUISITION

102 OUT B+4,2: OUT B+4,0

103 OUT B+4,2: OUT B+4,0

104 OUT B+4,2: OUT B+4,0

110 FOR F=0 TO N-1

120 OUT B+4,2

130 E=INP(B+6) AND 16

140 OUT B+4,0

150 IF E=16 THEN D=D+2^(N-1-F)

160 NEXT F

170 D=5*D/(2^N-1)

180 OUT B+4,1:RETURN

190 REM (c) 1997 Patrick GUEULLE

program douzebits;

uses crt;

var n,f,e: byte;

b,g: integer;

d: real;

procedure init;

begin

b:=$3F8; n:=12;

port[b+4]:=1;

delay(100);

port[b+3]:=64;

delay(500);

end;

procedure acquisition;

begin

port[b+4]:=0; d:=0;

port[b+4]:=2; port[b+4]:=2;

port[b+4]:=2; port[b+4]:=0;

port[b+4]:=2; port[b+4]:=2;

port(b+4):=2; port[b+4]:=0;

port(b+4):=2; port[b+4]:=2;

port[b+4]:=2; port[b+4]:=0;

for f: = 0 to n-1 do

begin

port[b+4]:=2;

e:=port[b+6] and 16;

port[b+4]:=0;

if e=16 then d:=d+exp((n-1-f)*ln(2));

end;

d:=(5*d)/(exp((n)*ln(2))-1);

port[b+4]:=1;

end;

procedure affiche;

begin

acquisition;

d:=(int(1000*d))/1000;

writeln(d);

delay(500);

end;

begin

clrscr;

init;

for g: =1 to 20 do

begin

affiche;

end;

end.

(* COPYRIGHT 1997 Patrick GUEULLE *)

С АЦП МАХ 1241 (рис. 4.6) будут работать программы MAXIM12.BAS на языке BASIC и MAXIM12.PAS на языке TurboPASCAL.

10 НЕМ — MAXIM12 —

20 KEY OFF: CLS

30 B=&H3F8: REM COM1:

40 N= 12: RЕМ число разрядов

50 OUT B+4,1

60 FOR T=0 TO 100: NEXT T

70 OUT B+3,64

80 FOR T=0 TO 500: NEXT T

90 GOTO 200

100 OUT B+4,0: D=0: REM ACQUISITION

105 OUT B+4,2: OUT B+4,0

110 FOR F=0 TO N-1

120 OUT B+4,2

130 E=INP(B+6) AND 16

140 OUT B+4,0

150 IF E=16 THEN D=D+2^(N-1-F)

160 NEXT F

170 D=5*D/(2^N-1)

180 OUT B+4,1: RETURN

190 REM (c) 1997 Patrick GUEULLE

program maxim12;

uses crt;

var n,f,e: byte;

b,g: integer;

d: real;

procedure init;

begin

b:=$3F8; n:=12;

port[b+4]:=1;

delay(100);

port[b+3]:=64;

delay(500);

end;

procedure acquisition;

begin

port[b+4]:=0; d:=0;

port[b+4]:=2; port[b+4]:=2;

port[b+4]:=2; port[b+4]:=0;

for f:=0 to n-1 do

begin

port[b+4]:=2;

e:=port[b+6] and 16;

port[b+4]:=0;

if e=16 then d:=d+exp((n-1-f)*ln(2))

end;

d:=(5*d)/(exp((n)*ln(2))—1);

port[b+4]:=1;

end;

procedure affiche;

begin

acquisition;

d:=(int(1000*d))/1000;

writeln(d);

delay(500);

end;

begin

clrscr;

init;

for g:=1 to 20 do

begin

affiche;

end;

end.

(* COPYRIGHT 1997 Patrick GUEULLE *)

Прикладные
программы

Здесь будет продемонстрировано, как добавление нескольких строк программы к вышеописанным драйверам приносит полезные практические результаты. Читатели должны будут самостоятельно вносить требуемые изменения (часто минимальные), которые определяются конкретными задачами пользователя. В любом случае объединение соответствующего драйвера и прикладной программы выполняется по команде MERGE (в языке BASIC).

Для использования программы VOLTS.BAS совместно с АЦП ADC 10, например, на языке GWBASIC или эквивалентном надо написать следующие строки:

load "ADC10" (загрузка драйвера);

затем

MERGE "VOLTS" (добавление прикладной программы).

По команде RUN запускается полученная программа, которую можно сохранить целиком по команде:

SAVE "ИМЯ", А (если желательно сохранить файл в текстовом формате);

или просто:

SAVE "ИМЯ" (если желательно сохранить его в наиболее компактном виде).

Будет целесообразно произвести полную компиляцию составленной программы, а также и программы на языке TurboPASCAL, в файл ИМЯ.EXE, исполняемый непосредственно под DOS или Windows. Для этого надо иметь в распоряжении какой-нибудь компилятор, например, Turbo BASIC или Quick BASIC.

Цифровой вольтметр

Очень короткая программа VOLTS.BAS прекрасно подходит для первых шагов в изучении только что собранного или купленного АЦП, но она также пригодна и для более общих задач.

200 REM VOLTS

210 GOSUB 100

220 D=INT(100*D)/100

230 LOCATE 1,1

240 PRINT USING "##.##"; D

250 GOTO 210

260 REM (c) 1997 Patrick GUEULLE

Программа выводит в верхнем левом углу экрана величину напряжения (в вольтах), поданного на вход модуля преобразователя. Эта величина подвергается простейшей обработке, поэтому данная программа — одна из самых быстродействующих в «библиотеке», даже при использовании очень медленных ПК.

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

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

Поделиться:
Популярные книги

Я еще князь. Книга XX

Дрейк Сириус
20. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще князь. Книга XX

70 Рублей

Кожевников Павел
1. 70 Рублей
Фантастика:
фэнтези
боевая фантастика
попаданцы
постапокалипсис
6.00
рейтинг книги
70 Рублей

Ты - наша

Зайцева Мария
1. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Ты - наша

Брачный сезон. Сирота

Свободина Виктория
Любовные романы:
любовно-фантастические романы
7.89
рейтинг книги
Брачный сезон. Сирота

Болотник 3

Панченко Андрей Алексеевич
3. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 3

Часовой ключ

Щерба Наталья Васильевна
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Часовой ключ

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Архил...? Книга 2

Кожевников Павел
2. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...? Книга 2

Найдёныш. Книга 2

Гуминский Валерий Михайлович
Найденыш
Фантастика:
альтернативная история
4.25
рейтинг книги
Найдёныш. Книга 2

Хозяйка лавандовой долины

Скор Элен
2. Хозяйка своей судьбы
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Хозяйка лавандовой долины

Зайти и выйти

Суконкин Алексей
Проза:
военная проза
5.00
рейтинг книги
Зайти и выйти

Вечный. Книга VI

Рокотов Алексей
6. Вечный
Фантастика:
рпг
фэнтези
5.00
рейтинг книги
Вечный. Книга VI

Инквизитор Тьмы 5

Шмаков Алексей Семенович
5. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 5

Вторая невеста Драконьего Лорда. Дилогия

Огненная Любовь
Вторая невеста Драконьего Лорда
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Вторая невеста Драконьего Лорда. Дилогия