DA-Wandler 16-bit über RS232 / Turbo Pascal ansprechen

Tüftlergeist

Level-2
Beiträge
45
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
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 Parit„t, 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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine Datei an COM1 senden:
>copy C:\test.txt com1
>type C:\test.txt > com1


Eine Zeichenfolge direkt an COM1 senden:
>echo testtext > com1

Alle Tastatureingaben an COM1 ausgeben, bis Strg+Z oder F6 gedrückt wird:
>copy con com1

Harald
 
Wenn's übrigends etwas moderner als Turbo Pascal sein darf, dann schau dir mal Lazarus / Freepascal an.

Gruß
Blockmove
 
Hallo nochmal!
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".
Wenn ich ein nachfolgendes Zeichen in den Tx Buffer schreibe, sollte man abfragen ob das Zeichen schon gesendet worden ist oder der Buffer wieder leer ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Wenn ich die o.a. DOS-Befehle sende kommt nach ein paar Sekunden eine Fehlermeldung

"Schreibstörung beim Schreiben auf Gerät COM1"
(A)bbrechen ... usw.

Der Konverter ist über das Terminalprogramm auf

9600 bps
8 Datenbits
keine Parität
1 Stoppbit

eingestellt.

Vor den DOS-Befehlen habe ich folgendes eingegeben:

c:\>mode com1:9600,n,8,1

Dies wird vom Rechner wie folgt quittiert:

COM1: 9600,n,8,1,-
 
Kommt die Schreibstörung auch direkt nach einem Rechner-Neustart?
Hast Du vielleicht noch ein weiteres Programm laufen, was mit COM1 arbeitet?
Oder kommt Dein Problem dann, wenn Du mit Deinem Pascal-Programm auf die Ports des COM1 geschrieben hast ohne das Betriebssystem vorher zu informieren?

Harald
 
Gerätenamen werden mit : abgeschlossen, also:
copy con: com1:
Geht bei mir sogar in der Kommandozeile von Win-7
Gruß
Erich
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Von meinem WIN7-PC aus funktioniert's auch (sogar ohne den Doppelpunkt)!!

Vor "copy con com1" habe ich natürlich vorher "mode com1:9600,n,8,1" eingegeben (WIN7 und DOS).

Auch nach einem Neustart des DOS-Rechners kommt die Fehlermeldung.
Ein weiteres DOS-Programm mit COM-Zugriff läuft nicht.

Werde am Montag noch mal den uralten Pentium 133 MHz an den Start bringen.

Für heute vielen Dank an Euch!

Gruß
Andreas
 
Zuletzt bearbeitet:
Zurück
Oben