Komunikace DMM a PC po sériové lince - Laboratorní úloha
Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu DOC.
1. Název úlohy:
Komunikace DMM a PC po sériové lince
2. Úkol měření:
Napište program realizující přenos dat z DMM po sériové lince a zobrazující data průběžně na monitoru počítače. Funkci programu ověřte.
Uskutečněte měření časové závislosti napětí na kondenzátoru při jeho nabíjení a vybíjení přes rezistor. Pro měření použijte program, který po 1s zobrazuje naměřené údaje na obrazovce a ukládá je do souboru.
Naměřené závislosti vytiskněte, určete z nich časovou konstantu obvodu a kapacitu kondenzátoru.
3. Měřicí metoda:
Programování komunikace PC s DMM
Propojení počítače s multimetrem
Pro uskutečnění přenosu dat musí být výstup RTS udržován na log 1, zatímco výstup DTR je třeba přepnout do log 0 (té odpovídá kladné napětí). DMM vyšle blok dat po přijetí příkazu “D“ (tj. ASCII kódu znaku D z počítače. Před vyžádáním dalších dat je třeba zařadit malé zpoždění (asi 100 ms).
Parametry přenosu
- počet datových bitů: 7
- parita: bez parity
- počet stop bitů: 2
- rychlost přenosu: 1200 Bd
Formát dat vysílaných multimetrem (14 ASCII znaků)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
D C - 1 . 9 9 9 V CR
1 . 9 9 9 M o h m CR
Přístup k registrům komunikačního obvodu
V jazyce Pascal použijeme pro zápis do registru příkaz
Port[adr_reg]:= …;
a pro čtení z registru příkaz
prom:=Port[adr_reg];
Chceme-li vyslat znak, musíme nejdříve zjistit testováním bitu 5 registru Line Status, zda je vyrovnávací registr vysílače prázdný (předchozí znak byl již odeslán). Registr je prázdný, je-li v bitu 5 registru Line Status jednička:
begin
repeat
until port[BA+5]and 32 = 32; {pokračuj v testování 5 registru Line}
port[BA]:= znak; {Status dokud nebude bit 5 = 1}
end;
(BA je bázová adresa komunikačního obvodu, BA+5 je adresa registru Line Status; vyjádříme-li číslo 32 v dvojkovém tvaru, získáme 00100000)Podobně při příjmu znaku testujeme bit 0 registru Line Status. Přečíst znak z vyrovnávacího registru přijímače můžeme až tehdy, bude-li v bitu 0 registru Line Status jednička
Program pro snímání hodnot na počítači:
Program komunikace;
uses CRT, DOS;
const
ba=$2f8;
var
i: integer;
udaj: string;
delitel: word;
F: text;
vteriny:integer;
const
pren_rychl=1200;
parametry=$06;
begin
vteriny:=0;
delitel:=trunc(115200/pren_rychl);
Port[ba+3]:=128;
Port[ba]:=Lo(delitel);
Port[ba+1]:=Hi(delitel);
Port[ba+3]:=parametry;
Port[ba+4]:=$01;
Port[ba+2]:=$0;
clrscr;
writeln('Pro ukonceni programu stiskni libovolnou klavesu');
Textcolor(white);
writeln('Prave probiha transmise dat z mericiho pristroje: ');
Assign(F,'vystup.txt');
Rewrite(F);
repeat
udaj [0]:= #13;
i:= 1;
port [ba+5]:= port [ba+5] and $fe;
repeat
until port [ba+5] and 32 = 32;
port [ba]:= ord('D');
for i:=1 to 14 do begin
repeat
until port[ba+5] and 1 = 1;
if port[ba] <> 13 then
udaj [i] :=char(port[ba])
else udaj [i] := ' ';
end;
Writeln(F,vteriny,' ', udaj);