This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

LMX2572: Inconsistency between TICS Pro and datasheet

Part Number: LMX2572

Hello T

TICS Pro (v1.6.8.9, build datre 15.Nov-18) does not set the VCO core according to the datasheet. It also has different values for VCO_DACISET_STRT and VCO_CAPCTRL_STRT when I calculate according to the datasheet. What to trust? My issue is that with the TICS pro generated register values, the device works - with the datasheet values, the device does not work.

Tics pro python update code states:

def btn_VCOFASTCAL_Update_UI():
    Fvco=Fvco_FREQ.dValue
       
    if (Fvco<3200):
        VCOSEL=1
        VCOmin=3200
        VCOmax=3650
        AmpCalMin=138
        AmpCalMax=137
        CapCtrlMin=131
        CapCtrlMax=19    
    elif (Fvco<3650):
        VCOSEL=2
        VCOmin=3650
        VCOmax=4200
        AmpCalMin=162
        AmpCalMax=142
        CapCtrlMin=143
        CapCtrlMax=25
    elif (Fvco<4200):
        VCOSEL=3
        VCOmin=4200
        VCOmax=4650
        AmpCalMin=126
        AmpCalMax=114
        CapCtrlMin=135
        CapCtrlMax=34  
    elif (Fvco<4650):
        VCOSEL=4 
        VCOmin=4650
        VCOmax=5200
        AmpCalMin=195
        AmpCalMax=172
        CapCtrlMin=136
        CapCtrlMax=25
    elif (Fvco<5200):
        VCOSEL=5
        VCOmin=5200
        VCOmax=5750
        AmpCalMin=190
        AmpCalMax=163
        CapCtrlMin=133
        CapCtrlMax=20      
    elif (Fvco<6400):
        VCOSEL=6
        VCOmin=5750
        VCOmax=6400
        AmpCalMin=256
        AmpCalMax=204
        CapCtrlMin=151
        CapCtrlMax=27  
    else:
        VCOSEL=6
        VCOmin=5750
        VCOmax=6400
        AmpCalMin=204
        AmpCalMax=204
        CapCtrlMin=27
        CapCtrlMax=27     

    CapCode=CapCtrlMin - int( (CapCtrlMin-CapCtrlMax)*(VCOmax-Fvco)/(VCOmax-VCOmin) )
    AmpCal = AmpCalMin+int( (AmpCalMax-AmpCalMin)*(Fvco-VCOmin)/(VCOmax-VCOmin) )
    
    if (CapCode<0):
        CapCode=0
    if (CapCode>183):
        CapCode=183
    if (AmpCal<0):
        AmpCal=0
    if (AmpCal>511):
        AmpCal=511
        
    VCO_SEL.iValue=VCOSEL
    VCO_CAPCTRL_STRT.iValue=CapCode
    VCO_DACISET_STRT.iValue=AmpCal

which is obviously not what is in table 136 of the DS.

while my code reads:

    @staticmethod
    def vco_core_lookup(fvco_in):
        """
        Table 136 and 135 from datasheet
        """
        fields = ('vco_core', 'fmin', 'fmax', 'cmin','cmax','amin', 'amax', 'kvcomin', 'kvcomax')
        data = [
                        (1,  3200,  3650, 131, 19, 138, 137, 32, 47),
                        (2,  3650,  4200, 143, 25, 162, 142, 35, 54),
                        (3,  4200,  4650, 135, 34, 126, 114, 47, 64),
                        (4,  4650,  5200, 136, 25, 195, 172, 50, 73),
                        (5,  5200,  5750, 133, 20, 190, 163, 61, 82),
                        (6,  5750,  6400, 151, 27, 256, 204, 57, 79)
                        ]
        dicts = [dict(zip(fields, d)) for d in data]
        
        c = []
        for i in range(0, len(data)):
            if fvco_in >= data[i][1] and fvco_in <= data[i][2]:
                c = dicts[i]
            
        if len(c) < 1:
            print("LMX2572  Error: invalid VCO selection")
            return False
        
        kvco = c['kvcomin']+(c['kvcomax']-c['kvcomin'])*(fvco_in-c['fmin'])/(c['fmax']-c['fmin'])
        capctl_start = round(c['cmin']-(fvco_in-c['fmin'])*(c['cmin']-c['cmax'])/(c['fmax']-c['fmin']))
        daciset_start = round(c['amin']-(fvco_in-c['fmin'])*(c['amin']-c['amax'])/(c['fmax']-c['fmin']))
            
        return {'vcotable': c, 'VCO_SEL': c['vco_core'], 'VCO_CAPCTRL_STRT': capctl_start, 'VCO_DACISET_STRT': daciset_start, 'kvco': kvco}

can you advise? I do not understand why TICS pro registers work and DS values not - all other registers are identical.

  • Hi Jonas,

    My colleague will get back to you on this, he wrote the code for TICS.
  • Jonas,

    Thank you for posting this! You are absolutely correct. You can see from the TICSPro code, the intention was to follow the datasheet table, but the code is off by 1 core. Below is the new code that will go out in the next TICSPro release for both the LMX2572 and LMX2572LP.

    Regards,
    Dean

    Fvco=Fvco_FREQ.dValue

    if (Fvco<3200):
    VCOSEL=1
    VCOmin=3200
    VCOmax=3650
    AmpCalMin=138
    AmpCalMax=138
    CapCtrlMin=131
    CapCtrlMax=131
    elif (Fvco<3650):
    VCOSEL=1
    VCOmin=3200
    VCOmax=3650
    AmpCalMin=138
    AmpCalMax=137
    CapCtrlMin=131
    CapCtrlMax=19
    elif (Fvco<4200):
    VCOSEL=2
    VCOmin=3650
    VCOmax=4200
    AmpCalMin=162
    AmpCalMax=142
    CapCtrlMin=143
    CapCtrlMax=25
    elif (Fvco<4650):
    VCOSEL=3
    VCOmin=4200
    VCOmax=4650
    AmpCalMin=126
    AmpCalMax=114
    CapCtrlMin=135
    CapCtrlMax=34
    elif (Fvco<5200):
    VCOSEL=4
    VCOmin=4650
    VCOmax=5200
    AmpCalMin=195
    AmpCalMax=172
    CapCtrlMin=136
    CapCtrlMax=25
    elif (Fvco<5750):
    VCOSEL=5
    VCOmin=5200
    VCOmax=5750
    AmpCalMin=190
    AmpCalMax=163
    CapCtrlMin=133
    CapCtrlMax=20
    elif (Fvco<6400):
    VCOSEL=6
    VCOmin=5750
    VCOmax=6400
    AmpCalMin=256
    AmpCalMax=204
    CapCtrlMin=151
    CapCtrlMax=27
    else:
    VCOSEL=6
    VCOmin=5750
    VCOmax=6400
    AmpCalMin=204
    AmpCalMax=204
    CapCtrlMin=27
    CapCtrlMax=27

    CapCode = CapCtrlMin + round( (CapCtrlMax-CapCtrlMin)*(Fvco-VCOmin)/(VCOmax-VCOmin) ,0)
    AmpCal = AmpCalMin + round( (AmpCalMax-AmpCalMin)*(Fvco-VCOmin)/(VCOmax-VCOmin),0 )

    if (CapCode<0):
    CapCode=0
    if (CapCode>183):
    CapCode=183
    if (AmpCal<0):
    AmpCal=0
    if (AmpCal>511):
    AmpCal=511

    VCO_SEL.iValue=VCOSEL
    VCO_CAPCTRL_STRT.iValue=CapCode
    VCO_DACISET_STRT.iValue=AmpCal