Skip to content
Snippets Groups Projects
Select Git revision
  • 5b40bb2f505249898c2682253f9e2244847ad19b
  • master default protected
  • Work_Gijs protected
3 results

APSPU_I2C.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    APSPU_I2C.py 1.62 KiB
    #******************************************#
    # I2C address, registers and ports for UNB2c
    # Created: 2021-05-11
    #******************************************#
    
    ###################################
    # General, Point of load converters
    ###################################
    
    CTR_LBA    = 0x3C
    CTR_RCU2_A = 0x3D
    CTR_RCU2_D = 0x0E
    CTR_POLS = {"CTR_LBA" :  0x3C,
                "CTR_RCU2_A" : 0x3D,
                "CTR_RCU2_D" : 0x3E}
    
    LP_VOUT_MODE      = 0x20
    LP_VOUT           = 0x8B #
    LP_temp           = 0x8D #
    LP_IOUT           = 0x8C
    
    ###################################
    # Central I2C Devices
    ###################################
    EEPROM            = 0x50
    
    ###################################
    # FAN speed
    ###################################
    MAX6620          = 0x52
    
    REG_GLOBAL = 0x00
    REG_TACH_1_MSP = 0x10
    REG_TACH_1_LSP = 0x11
    REG_TACH_2_MSP = 0x12
    REG_TACH_2_LSP = 0x13
    REG_TACH_3_MSP = 0x14
    REG_TACH_3_LSP = 0x15
    
    RUN_MONITOR = 0x80
    
    
    
    ######################
    # Functions
    ######################
    
    # Calculate floating point value according PMBus lineair
    def calc_lin_2bytes(data):
        expo = ((data[1] & 0xf8)>>3) 
        if expo > 2**4:
            expo = expo-2**5
        mantisse = (data[1] & 0x7)*0x100 + data[0]
        output = mantisse * 2**expo
        return output
    
    # Calculate floating point value according PMBus lineair
    def calc_lin_3bytes(data,mode):
        expo = (mode[0] & 0x1F) 
        if expo > 2**4:
            expo = expo - 2**5
        output = (data[1]*256 + data[0]) * 2**expo
        return output
    def tach(tach_msb, tach_lsb):
        tach_pulse_per_revolution = 2
        tach = (int(tach_msb, 16)*8) + (int(tach_lsb, 16)/32)
        rpm = 60/(tach*tach_pulse_per_revolution)
        return rpm