#!/usr/bin/env python #-*- coding: utf-8 -*- """Simple python library to drive the analog discovery module from www.digilentinc.com With Discoply addon connected https://hephaistos.lpp.polytechnique.fr/rhodecode/HG_REPOSITORIES/LPP/INSTRUMENTATION/PCB/DiscoPli """ from ctypes import * import time import sys import os import matplotlib.pyplot as plt import numpy as np from lppinstru import discovery __author__ = "Alexis Jeandet" __copyright__ = "Copyright 2015, Laboratory of Plasma Physics" __credits__ = [] __license__ = "GPLv2" __version__ = "1.0.0" __maintainer__ = "Alexis Jeandet" __email__ = "alexis.jeandet@member.fsf.org" __status__ = "Production" class discoply(discovery.Discovery): _gains={ "LTC-6910-1":[0, 1, 2, 5, 10, 20, 50, 100], "LTC-6910-2":[0, 1, 2, 4, 8, 16, 32, 64], "LTC-6910-3":[0, 1, 2, 3, 4, 5, 6, 7] } def __init__(self,card=-1,model="LTC-6910-1",gain_ch1=1,gain_ch2=1): super(discoply,self).__init__(card) self._model=model self.set_power() self.digital_io_output_enable(0x3F) self.gain_idx = [gain_ch1,gain_ch2] def auto_remove_offset(self,channel=0): out=0.0 for i in range(10): self.analog_out_gen(shape="DC",offset=out) time.sleep(0.2) mean=super(discoply,self).analog_in_read(frequency=1e5,samplesCount=8192)[0][channel].mean() out+=-mean*14./self.gain[channel] return mean def analog_in_read(self,ch1=True,ch2=True,frequency=100000000,samplesCount=100,ch1range=5.0,ch2range=5.0,trigger=discovery.trigsrcNone): data=super(discoply,self).analog_in_read(ch1,ch2,frequency,samplesCount,ch1range,ch2range,trigger) if self.gain[0] !=0: data[0][0]=data[0][0]/self.gain[0] if self.gain[1] !=0: data[0][1]=data[0][1]/self.gain[1] return data @property def offset(self): data=super(discoply,self).analog_in_read(frequency=1e4,samplesCount=8192)[0] return [data[0].mean(),data[1].mean()] @property def gain(self): return [ self._gains[self._model][self.gain_idx[0]], self._gains[self._model][self.gain_idx[1]]] @property def gain_idx(self): dio=self.digital_io return [dio&7,(dio>>3)&7] @gain_idx.setter def gain_idx(self,value): self.digital_io =(value[0]&7) + ((value[1]&7)<<3) def set_gain_idx(self,value,channel): gain = self.gain & ~(7 << [0,3][channel]) self.gain_idx = gain + (value << [0,3][channel]) if __name__ == '__main__': quit()