#!/usr/bin/perl # GBPPR Special Collection Service / GBPPR Radiation Labs # MicroSource MSS252-791-000 Synthesizer Module Programming Calculator # # 960 MHz reference frequency input $REF_Hz = 960000000; # Fixed phase detector frequency via the internal divider $Fpfd_Hz = $REF_Hz / 192; # 5 MHz # Get pre-doubler YTO frequency in MHz $Fyto_MHz = $ARGV[0]; $Fyto_MHz =~ tr/0-9//csd; if (!defined $Fyto_MHz) { die "\n\nError: Supply pre-doubler YTO frequency in MHz.\nExample: ./microsource.pl 13000\n\n"; } if ($Fyto_MHz < 12930 || $Fyto_MHz > 14125) { die "\n\nFrequency out of range. (12930 - 14125 MHz)\n\n"; } $Fyto_MHz = sprintf "%.4f", $Fyto_MHz; $Fyto_x2_MHz = sprintf "%.4f", $Fyto_MHz * 2; print "\nMicroSource MSS252-791-000 Synthesizer Module Programming Calculator\n\n"; # Mixer frequency is the YTO frequency minus 12480 MHz (900 MHz * 13) $Fmix_Hz = ($Fyto_MHz * 1000000) - ($REF_Hz * 13); # Calculate Q3236 PLL N, M, and A $N = $Fmix_Hz / $Fpfd_Hz; $M = int($N / 10) - 1; $A = $N - 10 * ($M + 1); $Amax = $M + 1; if ($N > 329 || $N < 90) { $check = "Out of Range"; $N = 0; } # Make pretty $REF_MHz = sprintf "%.6f", $REF_Hz / 1000000; # convert Hz to MHz $Fpfd_MHz = sprintf "%.6f", $Fpfd_Hz / 1000000; # convert Hz to MHz $N = sprintf "%.3s", $N; $M = sprintf "%.2s", $M; $A = sprintf "%.2s", $A; print " REF: $REF_MHz MHz\n"; print " Fpfd: $Fpfd_MHz MHz\n"; print " Fyto: $Fyto_MHz MHz\n"; print " : $Fyto_x2_MHz MHz (With internal doubler)\n"; print " N: $N $check (N = 90-1295, but the YTO only tunes N = 90-329)\n"; print " M: $M (M = 1-31)\n"; print " A: $A (A <= $Amax)\n"; print "\nThe lower 5-bits of M ($M) are applied to these DB-25 pins:\n"; print " M0 : Pin 5\n"; print " M1 : Pin 17\n"; print " M2 : Pin 4\n"; print " M3 : Pin 16\n"; print " M4 : Pin 3\n\n"; print "MMMMM\n"; print "43210\n"; print "||||| (Where 0 is ground and 1 is +5V)\n"; printf("%05b\n", $M); print "\nThe lower 4-bits of A ($A) are applied to these DB-25 pins:\n"; print " A0 : Pin 15\n"; print " A1 : Pin 2\n"; print " A2 : Pin 14\n"; print " A3 : Pin 1\n\n"; print "AAAA\n"; print "3210\n"; print "|||| (Where 0 is ground and 1 is +5V)\n"; printf("%04b\n", $A); print "\nOther DB-25 pins:\n"; print " Pin 6 : F LOCK\n"; print " Pin 7 : PWR BIT\n"; print " Pin 8 : +5 VDC @ 700 mA\n"; print " Pin 9 : +15 VDC @ 300 mA\n"; print "Pin 10 : -15 VDC @ 45 mA\n"; print "Pins 18-23 : Ground\n";