Hallo,
ich möchte für ein Schulprojekt mit Pyserial über eine serielle Schnittstelle einen Widerstand auslesen(einen Fotowiderstand). Bis jetzt konnte ich mit getCTS() nur auslesen, ob ein Widerstand vorhanden ist oder nicht. Möchte jedoch den ohm'schenWiderstand erfahren. Ist es möglich, dies mit Pyserial zu umzusetzen.
Im Vorraus Vielen Dank!
MfG Rewan
Auslesen eines Widerstands über Pyserial
@Rewan: Dazu müsstest Du wohl ausserhalb des Rechners einen analogen Wert in einen Digitalen umwandeln. Und den dann seriell zum Rechner übertragen. Ich kann mich irren, aber das klingt als bräuchtest Du ausserhalb des Rechners ”Intelligenz”. Wenn es das nicht schon in einem spezialisierten Chip gibt, klingt das nach dem Einsatz eines Mikroprozessors.
http://www.muenster.de/~m-frost/beisp-c.html
Du müsstest dann nur dein Programm nach Python umsetzen
Du müsstest dann nur dein Programm nach Python umsetzen
gruss
marlob
-------------------------------------
Linux Mint 17 + Python 2.7.6
marlob
-------------------------------------
Linux Mint 17 + Python 2.7.6
Lol, da haste ja was ausgegraben... Im PASCAL-Skript steht was von 386er DX25 und DOS 6.0, passend dazu die alte PLZ von Münster. Okay, die Seite selbst wurde 2003 zuletzt geändert. Aber jetzt mal ernsthaft: Was auf dieser Webseite soll dem Fragesteller jetzt eigentlich bei seinem Problem helfen? Hilfreicher wäre es doch IMHO erstmal zu wissen, was für Hardware überhaupt gemessen werden soll, bevor man einfach so ins Blaue rät.marlob hat geschrieben:http://www.muenster.de/~m-frost/beisp-c.html
Du müsstest dann nur dein Programm nach Python umsetzen
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
@snafu: Naja, die grundlegende Idee ist ja evtl. bereits eine Hilfe! Ich hätte jetzt auch gedacht, man bräuchte da einen AD-Wandler; die Idee mit dem Kondensator ist ziemlich simpel und hilft dem OP ja vielleicht schon weiter.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@snafu: Die Elektronik hat sich die letzten Jahrzehnte da nicht so stark verändert. Und die serielle Schnittstelle funktioniert auch immer noch wie zu DOS-Zeiten.
Erstmal Danke für die Antworten
Konnte leider nicht früher antworten.
Ich hab mir jetzt ein 10 kOhm Poti und nen 1 μF Kondensator zum ausprobieren zugelegt.
Könnte ihr mir ein bischen helfen den Code in Python zu portieren. Im Grundlegendem verstehe ich es aber bei ein Paar (<-)
Stellen bin ich überfordert.
MfG Rewan
Konnte leider nicht früher antworten.
Ich hab mir jetzt ein 10 kOhm Poti und nen 1 μF Kondensator zum ausprobieren zugelegt.
Könnte ihr mir ein bischen helfen den Code in Python zu portieren. Im Grundlegendem verstehe ich es aber bei ein Paar (<-)
Stellen bin ich überfordert.
Code: Alles auswählen
USES CRT;
CONST COM = $2F8;
PROCEDURE Messung;
VAR Zaehler : WORD;
BEGIN
Zaehler := 0;
InLine($FA); (* Interrupts sperren *)<-
Port[COM+4] := 1; (* DTR an *)
REPEAT
INC(Zaehler);
UNTIL ((Port[COM+6] AND 16) = 16 ); (* bis CTS an *) <-
PORT[COM+4] := 0; (* DTR aus *)
Delay(10);
InLine ($FB); (* Interrupts erlauben *)
WriteLn('Widerstand des Potis : ',10/60*(Zaehler-195):6:2,' kOhm');
WriteLn('Zählerstand : ',Zaehler:6);
END;
BEGIN (* Hauptprogramm *)
ClrScr;
WriteLn('W I D E R S T A N D S M E S S U N G');
REPEAT
GotoXY(1,4);; <-
Messung;
Delay(100);
UNTIL KeyPressed;
END.
MfG Rewan
Wie waere es, wenn du mal einfach mit python draufloslegst, und dann helfen wir dir da bei Problemen?
Das GotoXY ist im uebrigen nix anderes als eine Cursor-Positionierungs-Funktion. Das ist fuer dein Problem voellig irrelevant, und kann ignoriert werden. Macht nur die Ausgabe "schoener".
Das GotoXY ist im uebrigen nix anderes als eine Cursor-Positionierungs-Funktion. Das ist fuer dein Problem voellig irrelevant, und kann ignoriert werden. Macht nur die Ausgabe "schoener".
Ich habe es jetzt geschaft, dass ich mit Python Werte bekomme, die vom Widerstand abhängig/ proportional sind.
Das ganze ist aber von der Prozessorauslastung abhängig.
Bei dem BeispielCode ist das, wenn ich mich nicht täusche mit " InLine($FA); (* Interrupts sperren *)" und " InLine ($FB); (* Interrupts erlauben *)" gelöst. Gibt es eine Möglichkeit die Werte von der Auslastung unabhängig zu machen?
Code: Alles auswählen
import pyserial
s = serial.Serial(0)
a = 1
s.setRTS(1)
while True:
a = a + 1
if s.getCTS() is True:
s.setRTS(0)
break
print (a)
Bei dem BeispielCode ist das, wenn ich mich nicht täusche mit " InLine($FA); (* Interrupts sperren *)" und " InLine ($FB); (* Interrupts erlauben *)" gelöst. Gibt es eine Möglichkeit die Werte von der Auslastung unabhängig zu machen?
Ja, indem du ein real-time-OS verwendest. Unter Linux zB RTAI. Fuer Windows wird das ne Stange Geld kosten. Mehr, als einfach nen Arduino zu nehmen + dessen AD-Wandler zu benutzen.
@Rewan: Ich denke im Beispiel ist das eher dadurch gelöst, dass es ein Pascal-Programm für DOS ist und dort früher a) immer nur ein Programm lief und b) es noch keine Prozessoren gab, die ihre Arbeitsgeschwindigkeit selbstständig im Betrieb veränderten. Also mit anderen Worten: Es wird in dem Programm gar nicht gelöst. 
Statt einen Zähler zu verwenden, könntest Du die Zeit messen, die verstrichen ist. Siehe `time.time()` und `time.clock()` sowie die Bemerkungen zu Betriebssystemen in der Dokumentation zu den beiden Funktionen.

Statt einen Zähler zu verwenden, könntest Du die Zeit messen, die verstrichen ist. Siehe `time.time()` und `time.clock()` sowie die Bemerkungen zu Betriebssystemen in der Dokumentation zu den beiden Funktionen.
@BlackJack
Das ist sicher besser als was er hat (ich muss gestehen ich hab' noch nicht mal geschaut *wie* er die Zeit misst..). Aber egal was er macht, er wird um Jitter durch Systemlast & mangelnde zeitliche Aufloesung bei den system-clock-calls nicht rumkommen.
Also muss er entweder seine Zeitbasis sauber bekommen - real-time - oder den Kondensator so gross machen, dass der Ladevorgang lange genug dauert, so dass er bezueglich dieser Schwankungen unempfindlich wird. Das waere dann aber eher so im Sekunden-Bereich.
Ich denke, als Experiment ist das ganze ulkig, aber wenn diese Messdaten irgendwie die Realitaet abbilden muessen, dann sollte er da mit dedizierter Hardware ran.
Das ist sicher besser als was er hat (ich muss gestehen ich hab' noch nicht mal geschaut *wie* er die Zeit misst..). Aber egal was er macht, er wird um Jitter durch Systemlast & mangelnde zeitliche Aufloesung bei den system-clock-calls nicht rumkommen.
Also muss er entweder seine Zeitbasis sauber bekommen - real-time - oder den Kondensator so gross machen, dass der Ladevorgang lange genug dauert, so dass er bezueglich dieser Schwankungen unempfindlich wird. Das waere dann aber eher so im Sekunden-Bereich.
Ich denke, als Experiment ist das ganze ulkig, aber wenn diese Messdaten irgendwie die Realitaet abbilden muessen, dann sollte er da mit dedizierter Hardware ran.