Hilfe bei RS232 den Port CTS auslesen ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Enterprise
User
Beiträge: 3
Registriert: Sonntag 18. Oktober 2009, 13:31

Hallo Forum,

ich bin Anfänger, lerne gerade Python.
Ich möchte über eine RS232 Schnittstaelle Wiederstände messen.
Dafür habe ich ein RC Glied ausgewählt.
Den Kondensator habe ich 47uf ausgewählt.
Den Minuspol vom Kondensator habe ich an TXD gelegt.
Das Ende vom Wiederstand an DTR.
Zwischen Kondensator und Wiederstand liegt der Port CTS an.

Nun muss der DTR auf 1 gesetzt werden und
gleichzeitig muss ein Timer laufen biss an dem Punkt CTS eine 1 anliegt.
Diese Zeit ist diese biss der Kondensator ca. 63,2% geladen ist.

Hier habe ich ein Beispiel von Delphi gefunden.
Nun wollte ich dieses mit Python nach bilden.
Aber da fehlen mir die Kenntnisse.

Code: Alles auswählen

Private Sub Timer1_Timer()
   DTR 1
   REALTIME (TRUE)
   TIMEINITUS
   While (DSR() = 0) And (TIMEREADUS() <1500000)
   Wend
   t = TIMEREADUS()
   REALTIME (FALSE)
   Label1.Caption = Str$(t) + " us"
   DTR 0
End Sub  


Hier mein Python script:

Code: Alles auswählen

#!/usr/bin/python

import threading, time, serial
s = serial.Serial(0, 9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=1, xonxoff=0, rtscts=0) 
s.setDTR(1)
 while True:
     time.sleep(0.00005) 
     cts = s.getCTS()
     if cts: 
              data = s.read(1) # 1 byte auslesen
              value = int(data[0])
s.setDTR(0)
s.close()

Kann mir jemand bei meiner Frage helfen.


mfg
Enterprise

Edit by Gerold: Code-Tags gesetzt
...
User
Beiträge: 116
Registriert: Mittwoch 23. Dezember 2009, 20:22

Ich kenn mich mit dem Seriellen nicht sonderlich aus, und mit Python auch nicht wirklich...

Du hast eine Endlosschleife, in welcher du immer wieder 0.00005 Zeiteinheiten (sind das Sekunden oder ms) was auch immer wartest...

Dabei hast du keine Einrückungen - deine Schleife funktioniert nicht :S

Machst du das bitte mit CODE?


Mal kurz eine Idee:

Code: Alles auswählen

start_time = getTime (wie auch immer)

while s.getCTS() != washaltkommt:
    pass

end_time = getTime (wie auch immer)

needed_time = end_time - start_time

Keine ahnung ob dir das hilft, keine Ahnung ob es Sinn macht...
Aber müsste nicht die Spannung sofort wieder abfallen?
Dann reicht dir die 0.00005 Zeitheitheit vieleicht garnicht aus, das wahr zu nehmen....


lg,
...
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Enterprise hat geschrieben:

Code: Alles auswählen

     time.sleep(0.00005) 
Diese Zeitauflösung wirst du nicht erreichen können.
Antworten