'4-24-2006 LMX2353test.bas rev.0 released, but not totally tested. masterclock = 64 'default, enter the Master Clock frequency in MHz phasefreq = .08 'default, enter the phase frequency desired in MHz 'masterclock/phasefreq must be a whole integer, from 3 through 32,767 vcofreq = 1013.305 'default, enter the output frequency in MHz, in increments of phasefreq 'For correct commanding, either of the following two criteria must be met: '1. For Integer-N operation, vcofreq/phasefreq must be a whole integer '2. For Fractional-N operation, vcofreq/(phasefreq/16) must be a whole integer phasepolarity = 2 'default, enter 1 for opamp(PLL 1 type), 2 for direct loop(PLL 2 type) Jconnector = 3 'default, enter the connector used on Control Board, (J) 1, 2, 3, or 4 preselector = 32 'default, normal for high frequency operation, 16 is other option fract = 16 'enter 15 or 16 for fractional divider, 16 is normal '------------do not change anything below this line contclear = 11 port = hexdec("&H378") control = hexdec("&H37A") out port, 0 'begin with all data lines low out control, contclear 'begin with all command lines low nomainwin '[createWindow] WindowWidth = 700 'the Working window is 800 pixels wide WindowHeight = 180 'the Working window is 180 pixels in height UpperLeftX = 1 'the Working window upper left corner is 1 pixels right.. UpperLeftY = 415 '...and 415 pixels down from the upper left corner of the monitor screen BackgroundColor$ = "darkblue" ForegroundColor$ = "white" TextboxColor$ = "red" 'the following textboxes will be red statictext #main.plltype, "PLL type, 1 or 2", 10, 15, 80, 15 textbox #main.plltypebox, 95, 12, 15, 20 statictext #main.jconn, "Control Board Conn., J", 130, 15, 115, 15 textbox #main.jconnbox, 245, 12, 15, 20 statictext #main.reffreq, "Ref. Freq.", 280, 15, 50, 15 textbox #main.reffreqbox, 335, 12, 40, 20 statictext #main.phasefreq, "Phase Det. Freq.", 385, 15, 80, 15 textbox #main.phasefreqbox, 475, 12, 40, 20 statictext #main.vcofreq, "VCO Output Freq.", 525, 15, 85, 15 textbox #main.vcofreqbox, 615, 12, 65, 20 statictext #main.step, "Step Freq", 160, 42, 55, 15 textbox #main.stepbox, 215, 40, 60, 20 textbox #main.pbox, 422, 40, 20, 20 TextboxColor$ = "blue" statictext #main.minstep, "Minimum Step Freq", 10, 42, 101, 15 textbox #main.minstepbox, 110, 40, 40, 20 textbox #main.bbox, 455, 40, 30, 20 textbox #main.abox, 495, 40, 20, 20 textbox #main.fbox, 529, 40, 20, 20 textbox #main.pdfbox, 565, 40, 40, 20 textbox #main.actfreqbox, 615, 40, 65, 20 statictext #main.formula, "[ ( Psel x B ) + A + F/16 ] x PDF = Actual VCO", 410, 62, 400, 15 statictext #main.message, "Messages:", 10, 80, 60, 15 textbox #main.messagebox, 70, 78, 600, 20 statictext #main.change, "Change values in RED Boxes, then click-->", 400, 112, 208, 15 button #main.stepdnbutton, "Step Dn", [stepdn], UL, 290, 40, 50, 20 button #main.stepupbutton, "Step Up", [stepup], UL, 355, 40, 50, 20 button #main.enterbutton, "ENTER", [getWindowInfo], UL, 615, 110, 45, 20 statictext #main.f1text, "F1 Buffer =", 10, 100, 250, 12 statictext #main.f2text, "F2 Buffer =", 10, 112, 250, 12 statictext #main.rtext, "R Buffer =", 10, 124, 250, 12 statictext #main.ntext, "N Buffer =", 10, 136, 250, 12 open "LMX 2353 as Type PLL 1 or 2, Control Board Commanding" for dialog as #main print #main, "trapclose [finished]" print #main.vcofreqbox,"";vcofreq print #main.phasefreqbox,"";phasefreq print #main.reffreqbox,"";masterclock print #main.plltypebox,"";phasepolarity print #main.jconnbox,"";Jconnector print #main.minstepbox,"";phasefreq/16 print #main.stepbox,"";phasefreq print #main.pbox,"";preselector wait [getWindowInfo] print #main.messagebox,"" print #main.vcofreqbox, "!contents? vcofreq$"; print #main.phasefreqbox, "!contents? phasefreq$"; print #main.reffreqbox, "!contents? masterclock$"; print #main.plltypebox, "!contents? phasepolarity$"; print #main.jconnbox, "!contents? Jconnector$"; print #main.pbox, "!contents? preselector$"; vcofreq = val(vcofreq$) phasefreq = val(phasefreq$) print #main.minstepbox,"";phasefreq/16 masterclock = val(masterclock$) phasepolarity = val(phasepolarity$)-1 preselector = val(preselector$) Jconnector = val(Jconnector$) if Jconnector =1 then Jcontrol = 3:LEPLL = 4 if Jconnector =2 then Jcontrol = 3:LEPLL = 8 if Jconnector =3 then Jcontrol = 15:LEPLL = 16 if Jconnector =4 then Jcontrol = 15:LEPLL = 32 '[calculateRcounter] 'need masterclock,phasefreq rcounter = 10*val(using("######.#",masterclock/phasefreq/10)) if rcounter <3 then beep:print #main.messagebox,"Error, Rcounter is < 3, Increase masterclock or decrease phasefreq" if rcounter >32767 then beep:print #main.messagebox,"Error, Rcounter is > 32767, Decrease masterclock or increase phasefreq" phasefreq = masterclock/rcounter print #main.pdfbox,"";phasefreq '[calculateNcounter] 'need vcofreq,phasefreq,preselector fractional = 0 '0 if PLL is used as Integer-N; 1 for Fractional-N ncount = vcofreq/phasefreq ncounter = int(ncount) fovercount = ncount-ncounter fraction = 10*val(using("##.#",fovercount*fract/10)) if fraction = fract then fraction = 0:ncounter = ncounter + 1 print #main.fbox,"";fraction if fraction > 0 then fractional = 1 'this will tell the PLL to go into Fractional Mode bacount = ncounter/preselector Bcounter = int(bacount) aovercount = bacount - Bcounter Acounter = 10*val(using("##.#",aovercount*preselector/10)) if Acounter = preselector then Acounter = 0:Bcounter = Bcounter +1 print #main.messagebox,"ncount= ";ncount;", ncounter= ";ncounter;", fovercount= ";fovercount;_ ", actualfraction= ";fovercount*fract;", fraction= ";fraction;", bacount= ";bacount print #main.bbox,"";Bcounter if Bcounter > 1023 then beep:print #main.messagebox,"Error, Bcounter is > 1023, Increase Phase Det. Freq. or try Changing Psel to 32" print #main.abox,"";Acounter if Acounter > Bcounter-2 then beep:print #main.messagebox,"Error, Acounter is > Bcounter - 2, Decrease Phase Det. Freq., or Try Psel at 16" print #main.actfreqbox,"";((preselector*Bcounter)+Acounter+(fraction/fract)) * masterclock/rcounter '[commandPLL] gosub [Command2353R] print #main.f1text, "F1 Buffer = ";f1bit23;" ";f1bit22;" ";f1bit21;f1bit20;f1bit19;" ";f1bit18;f1bit17f1bit16;f1bit15;f1bit14;f1bit13;f1bit12;f1bit11;f1bit10;f1bit9;f1bit8;f1bit7;f1bit6;f1bit5;f1bit4;f1bit3;f1bit2;" ";f1bit1;f1bit0 print #main.f2text, "F2 Buffer = ";f2bit23;f2bit22;" ";f2bit21;" ";f2bit20;f2bit19;f2bit18;f2bit17;" ";f2bit16;f2bit15;f2bit14;f2bit13;f2bit12;f2bit11;f2bit10;f2bit9;f2bit8;f2bit7;f2bit6;f2bit5;f2bit4;f2bit3;f2bit2;" ";f2bit1;f2bit0 print #main.rtext, "R Buffer = ";rbit23;" ";rbit22;" ";rbit21;rbit20;rbit19;rbit18;rbit17;" ";rbit16;rbit15;rbit14;" ";rbit13;rbit12;rbit11;rbit10;" ";rbit9;rbit8;rbit7;rbit6;" ";rbit5;rbit4;rbit3;rbit2;" ";rbit1;rbit0 gosub [Command2353N] print #main.ntext, "N Buffer = ";nbit23;nbit22;nbit21;" ";nbit20;nbit19;" ";nbit18;nbit17;nbit16;nbit15;" ";nbit14;nbit13;nbit12;nbit11;" ";nbit10;nbit9;nbit8;nbit7;nbit6;" ";nbit5;nbit4;nbit3;nbit2;" ";nbit1;nbit0 wait [stepup] print #main.stepbox, "!contents? stepfreq$"; print #main.messagebox,"" vcofreq = vcofreq + val(stepfreq$) print #main.vcofreqbox,"";vcofreq goto [getWindowInfo] [stepdn] print #main.stepbox, "!contents? stepfreq$"; print #main.messagebox,"" vcofreq = vcofreq - val(stepfreq$) print #main.vcofreqbox,"";vcofreq goto [getWindowInfo] [finished] close #main end [Command2353R]'create LMX2353 F1,F2,and R buffers; then command all 3 buffers '[Create2353Rbuffer]'globals reqd: rcounter, phasepolarity, fractional ' if rcounter <3 then beep:errora$ = "2353 Rcounter is < 3" ' if rcounter >32767 then beep:errora$ = "2353 Rcounter is > 32767" rbit0 = 0 'R address bit 0 rbit1 = 1 'R address bit 1 ra0 = int(rcounter/2):rbit2 = rcounter- 2*ra0 'LSB, R buffer ra1 = int(ra0/2):rbit3 = ra0- 2*ra1 ra2 = int(ra1/2):rbit4 = ra1- 2*ra2 ra3 = int(ra2/2):rbit5 = ra2- 2*ra3 ra4 = int(ra3/2):rbit6 = ra3- 2*ra4 ra5 = int(ra4/2):rbit7 = ra4- 2*ra5 ra6 = int(ra5/2):rbit8 = ra5- 2*ra6 ra7 = int(ra6/2):rbit9 = ra6- 2*ra7 ra8 = int(ra7/2):rbit10 = ra7- 2*ra8 ra9 = int(ra8/2):rbit11 = ra8- 2*ra9 ra10 = int(ra9/2):rbit12 = ra9- 2*ra10 ra11 = int(ra10/2):rbit13 = ra10- 2*ra11 ra12 = int(ra11/2):rbit14 = ra11- 2*ra12 ra13 = int(ra12/2):rbit15 = ra12- 2*ra13 ra14 = int(ra13/2):rbit16 = ra13- 2*ra14 'MSB, R buffer rbit17 = phasepolarity 'phase detector polarity 1=normal,0=reverse for opamp rbit18 = 1 'LSB of Charge pump control, 100ua x1 +100ua rbit19 = 1 'Charge pump control, 100ua x2 +100ua rbit20 = 1 'Charge pump control, 100ua x4 +100ua rbit21 = 1 'MSB of Charge pump control, 100ua x8 +100ua rbit22 = 0 'Charge Pump Voltage Doubler Enabled when 1 rbit23 = fractional 'Delay Line Loop Cal mode, set to 1 for fractional N, 0 for Integer '[Create2353F1Buffer]'globals reqd, none f1bit23=0 'not used. Set to 0 f1bit22=1 'fractional divider, 1=16 0=15 f1bit21=0 'f1bits-19 thru 21 are FO/LD output selection, 3 Bits 0-7 MSB f1bit20=0 '0=alog lock det, 1=na, 2=dig lock det, 3=na, 4=na f1bit19=0 '5=na, 6=Ndivider output, 7=Rdivider output f1bit18=0 'f1bits-2 through 18 are not used. Set to 0 f1bit17=0 f1bit16=0 f1bit15=0 f1bit14=0 f1bit13=0 f1bit12=0 f1bit11=0 f1bit10=0 f1bit9=0 f1bit8=0 f1bit7=0 f1bit6=0 f1bit5=0 f1bit4=0 f1bit3=0 f1bit2=0 'f1bits-2 through 18 are not used. Set to 0 f1bit1=0 'F1 address bit 1 f1bit0=0 'F1 address bit 0 '[Create2353F2Buffer]'globals reqd: none f2bit23=0 f2bit22=0 f2bit21=0 'Power Down Mode, 0=async 1=syncro f2bit20=0 'Fastlock, 0=CMOS outputs enabled 1= fastlock mode f2bit19=0 'test bit, leave at 0 f2bit18=0 'OUT 1, 0 f2bit17=0 'OUT 0, 0 f2bit16=0 f2bit15=0 f2bit14=0 f2bit13=0 f2bit12=0 f2bit11=0 f2bit10=0 f2bit9=0 f2bit8=0 f2bit7=0 f2bit6=0 f2bit5=0 f2bit4=0 f2bit3=0 f2bit2=0 f2bit1=0 'F2 address bit 1 f2bit0=1 'F2 address bit 0 '[CommandF1Buffer]'globals reqd: Jcontrol, LEPLL out control, Jcontrol 'enable the clk,data,and LE buffer out port, f1bit23:out port, f1bit23 + 2 out port, f1bit22:out port, f1bit22 + 2 out port, f1bit21:out port, f1bit21 + 2 out port, f1bit20:out port, f1bit20 + 2 out port, f1bit19:out port, f1bit19 + 2 out port, f1bit18:out port, f1bit18 + 2 out port, f1bit17:out port, f1bit17 + 2 out port, f1bit16:out port, f1bit16 + 2 out port, f1bit15:out port, f1bit15 + 2 out port, f1bit14:out port, f1bit14 + 2 out port, f1bit13:out port, f1bit13 + 2 out port, f1bit12:out port, f1bit12 + 2 out port, f1bit11:out port, f1bit11 + 2 out port, f1bit10:out port, f1bit10 + 2 out port, f1bit9:out port, f1bit9 + 2 out port, f1bit8:out port, f1bit8 + 2 out port, f1bit7:out port, f1bit7 + 2 out port, f1bit6:out port, f1bit6 + 2 out port, f1bit5:out port, f1bit5 + 2 out port, f1bit4:out port, f1bit4 + 2 out port, f1bit3:out port, f1bit3 + 2 out port, f1bit2:out port, f1bit2 + 2 out port, f1bit1:out port, f1bit1 + 2 out port, f1bit0:out port, f1bit0 + 2 out port, LEPLL:out port, 0 'Latch buffer '[CommandF2Buffer]'globals reqd: LEPLL 'note,Jcontrol is still high out port, f2bit23:out port, f2bit23 + 2 out port, f2bit22:out port, f2bit22 + 2 out port, f2bit21:out port, f2bit21 + 2 out port, f2bit20:out port, f2bit20 + 2 out port, f2bit19:out port, f2bit19 + 2 out port, f2bit18:out port, f2bit18 + 2 out port, f2bit17:out port, f2bit17 + 2 out port, f2bit16:out port, f2bit16 + 2 out port, f2bit15:out port, f2bit15 + 2 out port, f2bit14:out port, f2bit14 + 2 out port, f2bit13:out port, f2bit13 + 2 out port, f2bit12:out port, f2bit12 + 2 out port, f2bit11:out port, f2bit11 + 2 out port, f2bit10:out port, f2bit10 + 2 out port, f2bit9:out port, f2bit9 + 2 out port, f2bit8:out port, f2bit8 + 2 out port, f2bit7:out port, f2bit7 + 2 out port, f2bit6:out port, f2bit6 + 2 out port, f2bit5:out port, f2bit5 + 2 out port, f2bit4:out port, f2bit4 + 2 out port, f2bit3:out port, f2bit3 + 2 out port, f2bit2:out port, f2bit2 + 2 out port, f2bit1:out port, f2bit1 + 2 out port, f2bit0:out port, f2bit0 + 2 out port, LEPLL:out port, 0 'Latch buffer '[CmdRbuffer]globals reqd: LEPLL, contclear 'note,Jcontrol is still high out port, rbit23:out port, rbit23 + 2 out port, rbit22:out port, rbit22 + 2 out port, rbit21:out port, rbit21 + 2 out port, rbit20:out port, rbit20 + 2 out port, rbit19:out port, rbit19 + 2 out port, rbit18:out port, rbit18 + 2 out port, rbit17:out port, rbit17 + 2 out port, rbit16:out port, rbit16 + 2 out port, rbit15:out port, rbit15 + 2 out port, rbit14:out port, rbit14 + 2 out port, rbit13:out port, rbit13 + 2 out port, rbit12:out port, rbit12 + 2 out port, rbit11:out port, rbit11 + 2 out port, rbit10:out port, rbit10 + 2 out port, rbit9:out port, rbit9 + 2 out port, rbit8:out port, rbit8 + 2 out port, rbit7:out port, rbit7 + 2 out port, rbit6:out port, rbit6 + 2 out port, rbit5:out port, rbit5 + 2 out port, rbit4:out port, rbit4 + 2 out port, rbit3:out port, rbit3 + 2 out port, rbit2:out port, rbit2 + 2 out port, rbit1:out port, rbit1 + 2 out port, rbit0:out port, rbit0 + 2 out port, LEPLL:out port, 0 'Latch buffer out control, contclear 'Disable the Control Board clk,data,and LE buffer return '[endCommand2353R] [Command2353N]'create and command LMX2353 N buffer '[Create2353Nbuffer]'globals reqd: ncounter,preselector,fraction ' Bcounter = int(ncounter/preselector) ' Acounter = int(ncounter-(Bcounter*preselector)) ' if Bcounter < 3 then beep:errora$ = "2353 Bcounter is < 3" ' if Bcounter > 1023 then beep:errora$ = "2353 Bcounter is > 1023" ' if Bcounter < Acounter + 2 then beep:errora$ = "2353 Bcounter < Acounter+2" nbit0 = 1 'n address bit 0 nbit1 = 1 'n address bit 1 f0 = int(fraction/2):nbit2 = fraction - 2*f0 'fraction bit 0 f1 = int(f0/2):nbit3 = f0 - 2*f1 'fraction bit 1 f2 = int(f1/2):nbit4 = f1 - 2*f2 'fraction bit 2 f3 = int(f2/2):nbit5 = f2 - 2*f3 'fraction bit 3 (0 to 15) na0 = int(Acounter/2):nbit6 = Acounter- 2*na0 'Acounter bit 0 LSB na1 = int(na0/2):nbit7 = na0 - 2*na1 na2 = int(na1/2):nbit8 = na1 - 2*na2 na3 = int(na2/2):nbit9 = na2 - 2*na3 na4 = int(na3/2):nbit10 = na3 - 2*na4 'Acounter bit 4 MSB nb0 = int(Bcounter/2):nbit11 = Bcounter- 2*nb0 'Bcounter bit 0 LSB nb1 = int(nb0/2):nbit12 = nb0 - 2*nb1 nb2 = int(nb1/2):nbit13 = nb1 - 2*nb2 nb3 = int(nb2/2):nbit14 = nb2 - 2*nb3 nb4 = int(nb3/2):nbit15 = nb3 - 2*nb4 nb5 = int(nb4/2):nbit16 = nb4 - 2*nb5 nb6 = int(nb5/2):nbit17 = nb5 - 2*nb6 nb7 = int(nb6/2):nbit18 = nb6 - 2*nb7 nb8 = int(nb7/2):nbit19 = nb7 - 2*nb8 nb9 = int(nb8/2):nbit20 = nb8 - 2*nb9 'Bcounter bit 9 MSB nbit21 = 0 :if preselector = 32 then nbit21 = 1 '0=16 (.5-1.2 GHz), 1=32 (1.2-2.5 GHz) nbit22 = 0 'power down if 1, Cp will tri-state nbit23 = 0 'counter reset if 1 '[Command2353NBuffer]' globals reqd: Jcontrol, LEPLL, contclear out control, Jcontrol out port, nbit23:out port, nbit23 + 2 out port, nbit22:out port, nbit22 + 2 out port, nbit21:out port, nbit21 + 2 out port, nbit20:out port, nbit20 + 2 out port, nbit19:out port, nbit19 + 2 out port, nbit18:out port, nbit18 + 2 out port, nbit17:out port, nbit17 + 2 out port, nbit16:out port, nbit16 + 2 out port, nbit15:out port, nbit15 + 2 out port, nbit14:out port, nbit14 + 2 out port, nbit13:out port, nbit13 + 2 out port, nbit12:out port, nbit12 + 2 out port, nbit11:out port, nbit11 + 2 out port, nbit10:out port, nbit10 + 2 out port, nbit9:out port, nbit9 + 2 out port, nbit8:out port, nbit8 + 2 out port, nbit7:out port, nbit7 + 2 out port, nbit6:out port, nbit6 + 2 out port, nbit5:out port, nbit5 + 2 out port, nbit4:out port, nbit4 + 2 out port, nbit3:out port, nbit3 + 2 out port, nbit2:out port, nbit2 + 2 out port, nbit1:out port, nbit1 + 2 out port, nbit0:out port, nbit0 + 2 out port, LEPLL:out port, 0 'Latch buffer out control, contclear 'Disable the Control Board clk,data,and LE buffer return '[endCommand2353N]