Module flask_app.Driver.LTC2631
Source code
import logging
try:
import smbus
except ImportError:
def _getBus(self, num):
return self;
def write_word_data(self, device_address, mode, value):
logger.debug("Sendind word data emulation: to: " + str(device_address) + " mode: " + str(mode) + " value: " + str(value));
obj = type('',(object,),{'SMBus':_getBus,'write_word_data':write_word_data})()
smbus = obj;
logger = logging.getLogger(__name__)
FALLBACK_ADDRESS = 0x20 #7 bit address (will be left shifted to add the read write bit)
DEVICE_MODE_UPDATE_REG = 0x30
MODES = [DEVICE_MODE_UPDATE_REG]
LOGGING_ENABLED = True
INTERNAL_REFERENCE_VOLTAGE = 2.5
RESOLUTION = 10
class LTC2631:
"""
A class used to represent the LTC2631 Chip.
...
Attributes
----------
refVoltage : float
The Reference Voltage which is supplied to the LTC2631 Chip. Default Value is 5
bus : SMBbus
The SMBbus to connect to the LTC. Default ist SMBbus(1)
Resolution : Int
Accuracy of the LTC Chip. Information given as Number of Bits. Default: 10
mode : int [2 Bytes]
Defines the mode, the LTC is working in. See Datasheet, Table 3 Command codes. Only first Byte is relevant. Default is Update Register (0x30)
Methods
-------
setToExtRefMode(refVoltage)
Uses the extern supplied Voltage to generate the output.
refVoltag: int
Value of the supplied Voltage
setToInternalRefMode(refVoltage = 2.5)
Uses the intern supplied Voltage to generate the output. Default intern voltage is 2.5V
setVolteage(voltage)
Sets the voltage to a given voltage.
voltage: float
Must be between 0V and Reference Voltage.
"""
def __init__(self, bus_num = 1, address=FALLBACK_ADDRESS, mode = DEVICE_MODE_UPDATE_REG, resolution = RESOLUTION) :
if(mode not in MODES):
raise ValueError('Unknown Mode: ' + str(mode))
if(resolution == 0):
raise ValueError('Resolution must not be 0!')
self.device_address = address
self.mode = mode
self.bus = smbus.SMBus(1)
self.refVoltage = INTERNAL_REFERENCE_VOLTAGE
self.resolution = resolution
def setToExtRefMode(self, refVoltage):
if(refVoltage < 0):
raise ValueError('Reference Voltage must be > than 0. Given: '+ str(refVoltage))
self.refVoltage = refVoltage
self.bus.write_word_data(self.device_address, 0x70,0x0000)
def setToInternalRefMode(self, refVoltage = 2.5):
if(refVoltage < 0):
raise ValueError('Reference Voltage must be > than 0. Given: ' + str(refVoltage))
self.bus.write_word_data(self.device_address,0x60,0x0000)
self.refVoltage = refVoltage
def disable(self):
#TODO really turn off
self.setVoltage(0)
def setVoltage(self,voltage):
#Vout= (k/2^n)*Vref
if (voltage < 0 or voltage > self.refVoltage) :
raise ValueError('Voltage mus be between 0 and reference Given: ' + str(voltage) + ' Reference Voltage: ' + str(self.refVoltage))
logger.debug("Changing Voltage To " + str(voltage))
value = int(voltage/(self.refVoltage) * (2**self.resolution - 1) )
# Switch MSB and LSB.
# LTC Only uses 10Bits from the 16Bits submitted by the RPI.
# E.G: Set Output Value to 0b11 1111 1111 = 2^10 -1 = Max Value
# -> Sends [1100 0000] [1111 1111]
# LSB msb
# Where the LSB gets padded with 6 Zeros to match 1 Byte
msb = value >> 2
lsb = value & 0b11
defVal = (msb) + (lsb << 14)
logger.debug("Val:" + str(defVal) + "bin: " + bin(defVal))
self._setValue(defVal);
def _setValue(self, value):
logger.debug("Setting value of LTC2631: Value: " + str(value) + "bin: " + bin(value)+" Mode : " + str(self.mode) + " Address: " + str(self.device_address))
self.bus.write_word_data(self.device_address, self.mode, value)
Functions
def write_word_data(self, device_address, mode, value)
-
Source code
def write_word_data(self, device_address, mode, value): logger.debug("Sendind word data emulation: to: " + str(device_address) + " mode: " + str(mode) + " value: " + str(value));
Classes
class LTC2631 (bus_num=1, address=32, mode=48, resolution=10)
-
A class used to represent the LTC2631 Chip.
…
Attributes
refVoltage
:float
- The Reference Voltage which is supplied to the LTC2631 Chip. Default Value is 5
bus
:SMBbus
- The SMBbus to connect to the LTC. Default ist SMBbus(1)
Resolution
:Int
- Accuracy of the LTC Chip. Information given as Number of Bits. Default: 10
mode
:int
[2
Bytes
]-
Defines the mode, the LTC is working in. See Datasheet, Table 3 Command codes. Only first Byte is relevant. Default is Update Register (0x30)
Methods
setToExtRefMode(refVoltage) Uses the extern supplied Voltage to generate the output.
refVoltag: int Value of the supplied Voltage
setToInternalRefMode(refVoltage = 2.5) Uses the intern supplied Voltage to generate the output. Default intern voltage is 2.5V
setVolteage(voltage) Sets the voltage to a given voltage.
voltage: float Must be between 0V and Reference Voltage.
Source code
class LTC2631: """ A class used to represent the LTC2631 Chip. ... Attributes ---------- refVoltage : float The Reference Voltage which is supplied to the LTC2631 Chip. Default Value is 5 bus : SMBbus The SMBbus to connect to the LTC. Default ist SMBbus(1) Resolution : Int Accuracy of the LTC Chip. Information given as Number of Bits. Default: 10 mode : int [2 Bytes] Defines the mode, the LTC is working in. See Datasheet, Table 3 Command codes. Only first Byte is relevant. Default is Update Register (0x30) Methods ------- setToExtRefMode(refVoltage) Uses the extern supplied Voltage to generate the output. refVoltag: int Value of the supplied Voltage setToInternalRefMode(refVoltage = 2.5) Uses the intern supplied Voltage to generate the output. Default intern voltage is 2.5V setVolteage(voltage) Sets the voltage to a given voltage. voltage: float Must be between 0V and Reference Voltage. """ def __init__(self, bus_num = 1, address=FALLBACK_ADDRESS, mode = DEVICE_MODE_UPDATE_REG, resolution = RESOLUTION) : if(mode not in MODES): raise ValueError('Unknown Mode: ' + str(mode)) if(resolution == 0): raise ValueError('Resolution must not be 0!') self.device_address = address self.mode = mode self.bus = smbus.SMBus(1) self.refVoltage = INTERNAL_REFERENCE_VOLTAGE self.resolution = resolution def setToExtRefMode(self, refVoltage): if(refVoltage < 0): raise ValueError('Reference Voltage must be > than 0. Given: '+ str(refVoltage)) self.refVoltage = refVoltage self.bus.write_word_data(self.device_address, 0x70,0x0000) def setToInternalRefMode(self, refVoltage = 2.5): if(refVoltage < 0): raise ValueError('Reference Voltage must be > than 0. Given: ' + str(refVoltage)) self.bus.write_word_data(self.device_address,0x60,0x0000) self.refVoltage = refVoltage def disable(self): #TODO really turn off self.setVoltage(0) def setVoltage(self,voltage): #Vout= (k/2^n)*Vref if (voltage < 0 or voltage > self.refVoltage) : raise ValueError('Voltage mus be between 0 and reference Given: ' + str(voltage) + ' Reference Voltage: ' + str(self.refVoltage)) logger.debug("Changing Voltage To " + str(voltage)) value = int(voltage/(self.refVoltage) * (2**self.resolution - 1) ) # Switch MSB and LSB. # LTC Only uses 10Bits from the 16Bits submitted by the RPI. # E.G: Set Output Value to 0b11 1111 1111 = 2^10 -1 = Max Value # -> Sends [1100 0000] [1111 1111] # LSB msb # Where the LSB gets padded with 6 Zeros to match 1 Byte msb = value >> 2 lsb = value & 0b11 defVal = (msb) + (lsb << 14) logger.debug("Val:" + str(defVal) + "bin: " + bin(defVal)) self._setValue(defVal); def _setValue(self, value): logger.debug("Setting value of LTC2631: Value: " + str(value) + "bin: " + bin(value)+" Mode : " + str(self.mode) + " Address: " + str(self.device_address)) self.bus.write_word_data(self.device_address, self.mode, value)
Methods
def disable(self)
-
Source code
def disable(self): #TODO really turn off self.setVoltage(0)
def setToExtRefMode(self, refVoltage)
-
Source code
def setToExtRefMode(self, refVoltage): if(refVoltage < 0): raise ValueError('Reference Voltage must be > than 0. Given: '+ str(refVoltage)) self.refVoltage = refVoltage self.bus.write_word_data(self.device_address, 0x70,0x0000)
def setToInternalRefMode(self, refVoltage=2.5)
-
Source code
def setToInternalRefMode(self, refVoltage = 2.5): if(refVoltage < 0): raise ValueError('Reference Voltage must be > than 0. Given: ' + str(refVoltage)) self.bus.write_word_data(self.device_address,0x60,0x0000) self.refVoltage = refVoltage
def setVoltage(self, voltage)
-
Source code
def setVoltage(self,voltage): #Vout= (k/2^n)*Vref if (voltage < 0 or voltage > self.refVoltage) : raise ValueError('Voltage mus be between 0 and reference Given: ' + str(voltage) + ' Reference Voltage: ' + str(self.refVoltage)) logger.debug("Changing Voltage To " + str(voltage)) value = int(voltage/(self.refVoltage) * (2**self.resolution - 1) ) # Switch MSB and LSB. # LTC Only uses 10Bits from the 16Bits submitted by the RPI. # E.G: Set Output Value to 0b11 1111 1111 = 2^10 -1 = Max Value # -> Sends [1100 0000] [1111 1111] # LSB msb # Where the LSB gets padded with 6 Zeros to match 1 Byte msb = value >> 2 lsb = value & 0b11 defVal = (msb) + (lsb << 14) logger.debug("Val:" + str(defVal) + "bin: " + bin(defVal)) self._setValue(defVal);