Скачиваний:
14
Добавлен:
01.05.2014
Размер:
69.63 Кб
Скачать

5.Управление работой устройства

Обмен управляющей информацией и данными между устройством и РС осуществляется по шинам интерфейса RS-232. Посылка по этому интерфейсу имеет следующий формат:

  • 115200 бит/сек;

  • 8 бит данных;

  • 1 стоп-бит;

  • без контрольного бита.

Управление работой устройства осуществляется путем прямой записи данных во внутренние регистры АЦП AD7731. Для првильного программирования работы этого АЦП необходимо ознакомиться с подробными правилами его программирования, изложенными в файле AD7731.pdf. При этом программист должен иметь в виду, что в разряды CH2..CH0 регистра режима работы (mode register) всегда должен записываться код 100. Это связано с тем, что в устройстве используется внешний по отношению к микросхеме АЦП коммутатор каналов, выход которого постоянно подключен к 0 внутреннему дифференциальному каналу этой микросхемы. В разряды MR11..MR9 и MR7 этого же регистра всегда должен записываться код 0, так как функции, определяемые этими разрядами, не могут быть использованы устройством.

Команда, передаваемая устройству, может состоять из одного или двух байтов. Первый байт содержит код команды, второй байт (если от необходим)- код аргумента.

Ниже приведены все команды, на которые реагирует устройство.

Команда «СБРОС». Эта команда состоит из одного байта с кодом 0. По этой команде микроконтроллер устройства переходит в режим ожидания новой команды независимо от предыдущего состояния. Команда «Сброс» позволяет вывести устройство из состояния ожидания готовности данных от АЦП в случае неправильного задания режима его работы.

Команда «УСТАНОВИТЬ КАНАЛ». Команда состоит из двух байтов. Первый байт содержит код 1, второй – код канала, подключающего измеряемый сигнал. Допустимыми значениями для второго байта являются 0..7. Все остальные коды передаются по модулю 8.

Команда «ЗАПИСАТЬ БАЙТ». Команда состоит из двух байтов. Первый байт содержит код 2, второй – байт, который необходимо передать во внутренние регистры АЦП AD7731.

Команда «ПРОЧИТАТЬ БАЙТ». Команда состоит из одного байта с кодом 3. В ответ на эту команду устройство передает 1 байт из внутренних регистров АЦП AD7731.

Команда «ПРОЧИТАТЬ БАЙТ С ОЖИДАНИЕМ ГОТОВНОСТИ ДАННЫХ». Команда состоит из одного байта с кодом 4. В ответ на эту команду устройство ожидает низкого уровня сигнала готовности данных в АЦП AD7731 и затем передает 1 байт из внутренних регистров АЦП AD7731.

Все команды с другими кодами устройство игнорирует.

6.Пример программы для работы с устройством на языке pascal

program MD155T1;

{полный тест системы сбора данных MD155 в режиме обмена через COMport}

USES Crt, dos, GRAPH;

const

base=$2F8; {адрес COM порта 2}

{base=$3F8; {адрес COM порта 1}

label 1,2,3,4,5,6;

var

ch,rn,t,t1,t2,tmp: byte;

f,sf,ttt,tt: word;

r: integer;

q: real;

{---------------------------------------------------------} Procedure COMPUT(i:byte);{запись байта через COMport}

begin

Port[base]:=i;

while(Port[base+5] and $20)=0 do ;

end;

{---------------------------------------------------------} Function COMGET:byte;{чтение байта через COMport}

var

i: word;

begin

i:=0;

while (Port[base+5] and $1)=0 do

begin

i:=i+1;

if i=000 then

begin

GotoXY(60,23);

{Writeln(' Time_Out ComGet ');}

exit;

end;

end;

COMGET:=Port[base];

end;

{---------------------------------------------------------} Procedure Init_COM;

{инициализация COMport}

var

i,j: byte;

Begin

Port[base+3]:=$83;{8bit, 1stop, no check}

{Port[base]:=6; {19200 bit/s}

{Port[base]:=2; {57600 bit/s} Port[base]:=1; {115200 bit/s} Port[base+1]:=0; Port[base+3]:=$1B; Port[base+1]:=$0; {no interrupt} for j:=1 to 16 do

begin

i:=port[base];

delay(1);

end;

end;

{---------------------------------------------------------} Procedure MD155wr_ch(i:byte);

{запись номера подключаемого канала устройства MD155}

begin

COMPUT(1);

COMPUT(i);

end;

{---------------------------------------------------------} Procedure MD155wr_byte(i:byte);

{запись байта i в АЦП AD7731 устройства MD155}

begin

COMPUT(2);

COMPUT(i);

end;

{---------------------------------------------------------} Function MD155rd_byte: byte;

{чтение байта из АЦП AD7731 устройства MD155 без ожидания

признака готовности}

begin

COMPUT(3);

MD155rd_byte:=COMGET;

end;

{---------------------------------------------------------} Function MD155rd_byte_rdy: byte;

{чтение байта из АЦП AD7731 устройства MD155 с ожиданием

признака готовности данных}

begin

COMPUT(4);

MD155rd_byte_rdy:=COMGET;

end;

{---------------------------------------------------------} Procedure MD155rst;

{принудительный перевод устройства MD155 в режим ожидания новой команды через COMport без завершения ожидания окончания предыдущей команды} begin

COMPUT(0);

end;

{---------------------------------------------------------} Procedure MD155rst_adc;

{принудительный сброс интерфейсного блока АЦП AD7731 устройства MD155} var

i: byte;

begin

for i:=1 to 4 do MD155wr_byte($FF);

end;

{---------------------------------------------------------}

begin

clrscr;{очистка экрана}

Init_COM;{инициализация COM порта}

MD155rst;{принудительный перевод устройства MD155 в режим ожидания новой команды}

MD155rst_adc;{принудительный сброс интерфейсного блока АЦП AD7731 устройства MD155}

Write('номер канала для ввода данных (0..7): ');

read(ch);

ch:=ch and $7;

Writeln('код диапазона входных сигналов (1..7)');

Writeln('1 - +-20мВ');

Writeln('2 - +-40мВ'); Writeln('3 - +-80мВ'); Writeln('4 - +-160мВ'); Writeln('5 - +-320мВ'); Writeln('6 - +-640мВ'); Writeln('7 - +-1280мВ');

Write('код диапазона входных сигналов (1..7): ');

read(rn);

rn:=rn and $7;

{вычисление кванта результата измерения q в мВ для 16-разр. АЦП}

tmp:=$1;

tmp:=tmp shl (7-rn); q:=1280/32768/(tmp);

Write('частота вывода данных (SKIP=0, CHP=1)(47..1280)[Гц]: '); read(f);

{вычисление константы sf для записи в АЦП MD7731} sf:=round(96000/f);

sf:=sf and $1FFF;

GoToXY(28,14);

Write('результат измерения');

GoToXY(20,24);

Write('для выхода из программы нажмите любую клавишу');

{---------------------------------------------------------}

{установка номера измерительного канала}

MD155wr_ch(ch);

{---------------------------------------------------------}

{запись информации в filter register AD7731}

MD155wr_byte($3);{запись в communication register}

tt:=(sf shl 4)+$4;{SKIP=0, CHP=1}

MD155wr_byte(Hi(tt));{запись старшего байта в filter

register AD7731}

MD155wr_byte(Lo(tt));{запись младшего байта в filter

register AD7731}

{---------------------------------------------------------}

{запуск внутренней автокалибровки нуля}

{---------------------------------------------------------}

{запись информации в mode register AD7731} MD155wr_byte($2);{запись в communication register}

tt:=(rn shl 4)+$8004;

MD155wr_byte(Hi(tt));{запись старшего байта в mode

register AD7731} MD155wr_byte(Lo(tt));{запись младшего байта в mode

register AD7731} delay(8000);{ожидание окончания автокалибровки}

{---------------------------------------------------------} {запуск внутренней автокалибровки масштаба}

{---------------------------------------------------------}

{запись информации в mode register AD7731} MD155wr_byte($2);{запись в communication register}

tt:=(rn shl 4)+$A004;

MD155wr_byte(Hi(tt));{запись старшего байта в mode

register AD7731} MD155wr_byte(Lo(tt));{запись младшего байта в mode

register AD7731} delay(8000);{ожидание окончания автокалибровки}

{---------------------------------------------------------} {запуск системной автокалибровки нуля}

{---------------------------------------------------------} (*

{запись информации в mode register AD7731} MD155wr_byte($2);{запись в communication register}

tt:=(rn shl 4)+$C004;

MD155wr_byte(Hi(tt));{запись старшего байта в mode

register AD7731} MD155wr_byte(Lo(tt));{запись младшего байта в mode

register AD7731} delay(4000);{ожидание окончания автокалибровки}

*)

{---------------------------------------------------------} {запуск основного режима работы АЦП}

{---------------------------------------------------------} {запись информации в mode register AD7731} MD155wr_byte($2);{запись в communication register}

tt:=(rn shl 4)+$2004;

MD155wr_byte(Hi(tt));{запись старшего байта в mode Register

AD7731}

MD155wr_byte(Lo(tt));{запись младшего байта в mode

register AD7731}

{---------------------------------------------------------}

{ожидание флага готовности и чтение результата преобразования}

{---------------------------------------------------------}

{запись информации в mode register AD7731} 2:MD155wr_byte($11);{запись в communication register} t1:=MD155rd_byte_rdy;{чтение старшего байта из data register AD7731 по низкому уровню сигнала RDY в АЦП AD7731} t2:=MD155rd_byte;{чтение младшего байта из data register AD7731} r:=(t1 shl 8)+t2-32767;

GoToXY(33,15);

Write(' мВ');

GoToXY(33,15);

Write(r*q:8:4);

if not KeyPressed then goto 2;

end.

Соседние файлы в папке Курсовая работа