PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Serielle schnitstelle (rts/dtr/cts)



Igor_B
20.06.2004, 18:51
Hi ,
Brauch dringend hilfe ....
Und zwar gehts um das 10 bit datenerfassungssystem von conrad
mit dem ltc 1090 chip . Vielleicht kennt das wer von euch !
Also ich hab folgendes problem - ich hab den source code zum ansprechen des 10 bit datenerfassungssystems , nur ich brauch den code in c .
So nun zum code , zum teil kapier ich ja was passiert nur
bei den ports häng ich . Ich weis nicht was ich an den welchen port ausgeben muss um zb RTS auf null zu setzen , oder DTR bzw CTS .
Vielleicht kann mir ja da wer helfen .
Danke schon mal
lg
Igor_b

DECLARE FUNCTION GetMesswert! (Kanal!, Durchlauf!)

'Bildschirm vorbereiten
CLS
LOCATE 25, 13: PRINT "mV";
LOCATE , 35: PRINT "0 1 2 3 4 5 Volt";
LOCATE 1, 1

'Beginn der Endlosschleife
DO

'Meáwertabfrage vom AD-Wandler
MilliVolt = GetMesswert(1, 1)

'Spannungswert auf den Bildschirm schreiben
LOCATE , 10: PRINT USING "#####"; MilliVolt;

'Spannung als Leuchtpunkt ausgeben
LOCATE , 35 + (MilliVolt / 125): PRINT "Ü"

'Wiederhole die Messungen bis eine Taste gedrckt wird
LOOP WHILE INKEY$ = ""

'Programm beenden
END

FUNCTION GetMesswert (Kanal, Durchlauf)

DIM AdressePort(4)
AdressePort(1) = &H3F8: AdressePort(2) = &H2F8
AdressePort(3) = &H3E8: AdressePort(4) = &H2E8

Port = 1
Referenz! = 5#
PC.Speed& = 0
MaxBitWert = 2048

SELECT CASE Kanal
CASE 1
Kanal$ = "100011101111"
CASE 2
Kanal$ = "110011101111"
CASE 3
Kanal$ = "100111101111"
CASE 4
Kanal$ = "110111101111"
CASE 5
Kanal$ = "101011101111"
CASE 6
Kanal$ = "111011101111"
CASE 7
Kanal$ = "101111101111"
CASE 8
Kanal$ = "111111101111"
END SELECT

Messaddition& = 0

FOR Messung = 0 TO Durchlauf

Messchritt = 0
BitWert = MaxBitWert

FOR i = 1 TO 12

OUT AdressePort(Port) + 4, (&HFE AND INP(AdressePort(Port) + 4))

IF MID$(Kanal$, i, 1) = "0" THEN
OUT AdressePort(Port) + 4, (&HFD AND INP(AdressePort(Port) + 4))
ELSE
OUT AdressePort(Port) + 4, (&H2 OR INP(AdressePort(Port) + 4))
END IF

OUT AdressePort(Port) + 4, (&H1 OR INP(AdressePort(Port) + 4))

IF (INP(AdressePort(Port) + 6) AND 16) = 16 THEN
ELSE
Messchritt = Messchritt + BitWert
END IF
BitWert = BitWert / 2

NEXT i

OUT AdressePort(Port) + 4, (&HFD AND INP(AdressePort(Port) + 4))
OUT AdressePort(Port) + 4, (&H2 OR INP(AdressePort(Port) + 4))

FOR Warten& = 1 TO PC.Speed&: NEXT Warten&

IF Messung > 0 THEN
Messaddition& = Messaddition& + Messchritt
END IF

NEXT Messung

Messchritt = (Messaddition& / Durchlauf)
GetMesswert = Messchritt / 4.095 * Referenz!

END FUNCTION

30.06.2004, 12:08
Deine Frage ist nicht ganz klar: Kennst Du die Portadressen nicht?
3F8= Basisadresse für Com-Port1. (2F8 für COM2). Von dort aus die anderen Adressen:

Adr. +4 = DTR , Bit 0 an Pin 4 (9-polig)
Adr. +4 = RTS, Bit 1 an Pin 7
Adr. +6 = DCD, Bit 7 an Pin 1
Adr. +6 = DSR, Bit 5 an Pin 6
Adr.+6 = CTS, Bit 4 an Pin 8
Adr. +6 = RI, Bit 6 an Pin 9

War es das, was Dir fehlt?

Gruß, Harald