r5693 - developers/werner/ahrt/host/tmc/lib

werner at docs.openmoko.org werner at docs.openmoko.org
Fri Oct 16 06:07:22 CEST 2009


Author: werner
Date: 2009-10-16 06:07:21 +0200 (Fri, 16 Oct 2009)
New Revision: 5693

Modified:
   developers/werner/ahrt/host/tmc/lib/meter.py
Log:
- lib/meter.py: added front/rear and scanner channel selection for Picotest
  M3500A



Modified: developers/werner/ahrt/host/tmc/lib/meter.py
===================================================================
--- developers/werner/ahrt/host/tmc/lib/meter.py	2009-10-14 13:59:55 UTC (rev 5692)
+++ developers/werner/ahrt/host/tmc/lib/meter.py	2009-10-16 04:07:21 UTC (rev 5693)
@@ -2,6 +2,7 @@
 # meter.py - Multimeter control
 #
 # Copyright (C) 2008, 2009 by OpenMoko, Inc.
+# Copyright (C) 2009 by Werner Almesberger
 # Written by Werner Almesberger <werner at openmoko.org>
 # All Rights Reserved
 # 
@@ -25,7 +26,7 @@
 #
 
 
-from tmc.instrument import instrument, setting
+from tmc.instrument import instrument, setting, settings
 
 
 class meter(instrument):
@@ -71,9 +72,77 @@
 	self.send(":SYST:REM")
 
 
+class m3005a_chan(settings):
+
+    def __init__(self, instr):
+	self.curr = None
+	self.front = None
+	self.scanner = None
+	self.instr = instr
+
+    def is_front(self):
+	if self.front is None:
+	    term = self.instr.query("ROUT:TERM?")
+	    if term == "FRON":
+		self.front = True
+	    elif term == "REAR":
+		self.front = False
+	    else:
+		raise hell
+	return self.front
+
+    def has_scanner(self):
+	if self.scanner is None:
+	    term = self.instr.query("ROUT:STAT?")
+	    if term == "1":
+		self.scanner = True
+	    elif term == "0":
+		self.scanner = False
+	    else:
+		raise hell
+	return self.scanner
+
+    def get(self):
+	if self.curr is None:
+	    if self.is_front():
+		self.curr = 0
+	    else:
+		if self.has_scanner():
+		    closed = self.instr.query("ROUT:CLOS?")
+		    self.curr = None
+		    n = 1
+		    for ch in closed:
+			if ch == "1":
+			    if self.curr is not None:
+				raise hell
+			    self.curr = n
+			n += 1
+		else:
+		    self.curr = 1
+	return self.curr
+
+    def set(self, value):
+	if self.curr is not None and self.curr == value:
+	    return
+	if self.is_front():
+	    if value != 0:
+		raise hell
+	else:
+	    if value < 1 or value > 10:
+		raise hell
+	    if self.has_scanner():
+		self.instr.send("ROUT:OPEN")
+		self.instr.send("ROUT:CLOS "+str(value))
+	    else:
+		if value > 1:
+		    raise hell
+	self.curr = value
+
+
 class picotest_m3500a(meter):
 
     def __init__(self):
 	meter.__init__(self, "usbtmc", "timeout=2", "retry", "vendor=0x164e",
 	  "product=0x0dad")
+	self.chan = m3005a_chan(self)
 	self.lock_attr()




More information about the commitlog mailing list