Hallo nochmal!
Nach dem DA-Wandler von Weidmüller bin ich jetzt dabei, einen 16-Bit DA-Wandler über die
serielle Schnittstelle in Betrieb zu nehmen.
Dieser Wandler gibt je nach Übergabe einer Zahlenkette von 00000 65535 mit anschließendem Enter
im ASCII-Format (Klartext) über die RS232-Schnittstelle eine Spannung von proportional
zugeordneten 0 5 Volt aus.
Mit einem Terminalprogramm klappt das auch: nach Ausgabe von 33333 / 2^16 * 5.0 = 2.543 Volt
steht der Zeiger auf diesem Wert.
Sinn und Zweck ist, den Spannungswert erst zu berechnen und dann auszugeben.
Ich habe dazu ein Testprogramm (Quelltext siehe unten) geschrieben, das in einer Schleife 5x
hintereinanderweg die Zahl 3 (51) mit anschließendem <CR> (13) ausgibt in der Annahme,
dass dann die 2.543 Volt am Ausgang anliegen.
Um die Kommunikation zu testen habe ich zunächst COM1 des DOS-Rechners mit COM1 eines mit
WIN 7 betriebenen PCs über ein Nullmodemkabel verbunden. Das Terminalprogramm zeigt das Ergebnis:
Es werden akkurat 5 Dreien geschrieben mit Zeilenumbruch also nix Verdrahtungsfehler;-)
Mit angestecktem Konverter verändert sich die Spannungsanzeige aber nicht (auf 2.54V).
Mir ist aufgefallen, dass nach dem Senden (port[$3F8]:=51; {*** "3" senden ***}) ein
delay(100) eingefügt werden muss; andernfalls erfolgt nur ein Zeilenumbruch.
Möglicherweise ist das ein "Zeitproblem".
Ich gehe davon aus, dass ich mich mit dem Ganzen eher auf dem Holzweg befinde und dass mit Klartext etwas
Anderes gemeint ist (obwohl der Hersteller das Ausgabeformat mit 51,51,51,51,51,13 so angibt).
Hat dazu jemand eine Idee?
Gibt es einen DOS-Befehl mit dem Klartext an den COM-Port gesendet werden kann?
Danke und Gruß!
uses CRT;
var
i : integer;
wert:byte;
begin
port [$3FB]:=128; { Baudeingabe aktivieren }
port [$3F8]:= 12; { Baudrate - LSB, 9600 Baud }
port [$3F9]:= 0; { Baudrate - MSB }
port [$3FB]:= 3; { 8 Bits, keine Paritt, 1 Stopbit }
port [$3FC]:= 3; { DTR = 1, RTS = 1 }
for i:=1 to 5 do
begin
port[$3F8]:=51; {*** "3" senden ***}
delay(100);
end;
delay(100);
port[$3F8]:=13; { Return senden }
port [$3FC]:= 0; { DTR = 0, CTS = 0 }
end.
Nach dem DA-Wandler von Weidmüller bin ich jetzt dabei, einen 16-Bit DA-Wandler über die
serielle Schnittstelle in Betrieb zu nehmen.
Dieser Wandler gibt je nach Übergabe einer Zahlenkette von 00000 65535 mit anschließendem Enter
im ASCII-Format (Klartext) über die RS232-Schnittstelle eine Spannung von proportional
zugeordneten 0 5 Volt aus.
Mit einem Terminalprogramm klappt das auch: nach Ausgabe von 33333 / 2^16 * 5.0 = 2.543 Volt
steht der Zeiger auf diesem Wert.
Sinn und Zweck ist, den Spannungswert erst zu berechnen und dann auszugeben.
Ich habe dazu ein Testprogramm (Quelltext siehe unten) geschrieben, das in einer Schleife 5x
hintereinanderweg die Zahl 3 (51) mit anschließendem <CR> (13) ausgibt in der Annahme,
dass dann die 2.543 Volt am Ausgang anliegen.
Um die Kommunikation zu testen habe ich zunächst COM1 des DOS-Rechners mit COM1 eines mit
WIN 7 betriebenen PCs über ein Nullmodemkabel verbunden. Das Terminalprogramm zeigt das Ergebnis:
Es werden akkurat 5 Dreien geschrieben mit Zeilenumbruch also nix Verdrahtungsfehler;-)
Mit angestecktem Konverter verändert sich die Spannungsanzeige aber nicht (auf 2.54V).
Mir ist aufgefallen, dass nach dem Senden (port[$3F8]:=51; {*** "3" senden ***}) ein
delay(100) eingefügt werden muss; andernfalls erfolgt nur ein Zeilenumbruch.
Möglicherweise ist das ein "Zeitproblem".
Ich gehe davon aus, dass ich mich mit dem Ganzen eher auf dem Holzweg befinde und dass mit Klartext etwas
Anderes gemeint ist (obwohl der Hersteller das Ausgabeformat mit 51,51,51,51,51,13 so angibt).
Hat dazu jemand eine Idee?
Gibt es einen DOS-Befehl mit dem Klartext an den COM-Port gesendet werden kann?
Danke und Gruß!
uses CRT;
var
i : integer;
wert:byte;
begin
port [$3FB]:=128; { Baudeingabe aktivieren }
port [$3F8]:= 12; { Baudrate - LSB, 9600 Baud }
port [$3F9]:= 0; { Baudrate - MSB }
port [$3FB]:= 3; { 8 Bits, keine Paritt, 1 Stopbit }
port [$3FC]:= 3; { DTR = 1, RTS = 1 }
for i:=1 to 5 do
begin
port[$3F8]:=51; {*** "3" senden ***}
delay(100);
end;
delay(100);
port[$3F8]:=13; { Return senden }
port [$3FC]:= 0; { DTR = 0, CTS = 0 }
end.