diff --git a/src/Makefile b/src/Makefile index 6142370..225f4fc 100644 --- a/src/Makefile +++ b/src/Makefile @@ -5,7 +5,7 @@ CFLAGS = -Wall -g -O2 -Wno-unused-variable LDFLAGS = -lm -lrt -lpthread -../rpitx: RpiGpio.c RpiTx.c mailbox.c RpiDma.c raspberry_pi_revision.c +../rpitx: RpiGpio.c RpiTx.c mailbox.c RpiDma.c raspberry_pi_revision.c calibrationpi2.h calibrationpizero.h calibrationpi3.h $(CC) $(CFLAGS) -o ../rpitx RpiTx.c RpiGpio.c mailbox.c RpiDma.c raspberry_pi_revision.c $(LDFLAGS) CFLAGS_Pissb = -Wall -g -O2 -Wno-unused-variable diff --git a/src/RpiGpio.c b/src/RpiGpio.c index 13f9744..e378e27 100644 --- a/src/RpiGpio.c +++ b/src/RpiGpio.c @@ -2,7 +2,7 @@ #include "RpiGpio.h" #include "mailbox.h" -#include "raspberry_pi_revision.h" + static volatile unsigned int BCM2708_PERI_BASE; static uint32_t dram_phys_base; @@ -67,7 +67,7 @@ int gpioSetMode(unsigned gpio, unsigned mode) void DisplayInfo() { - RASPBERRY_PI_INFO_T info; + if (getRaspberryPiInformation(&info) > 0) { diff --git a/src/RpiGpio.h b/src/RpiGpio.h index 88a6c62..355d101 100644 --- a/src/RpiGpio.h +++ b/src/RpiGpio.h @@ -9,6 +9,7 @@ #include #include #include +#include "raspberry_pi_revision.h" char InitGpio(void); @@ -26,7 +27,7 @@ volatile uint32_t *pad_gpios_reg; void * map_peripheral(uint32_t base, uint32_t len); int gpioSetMode(unsigned gpio, unsigned mode); - +RASPBERRY_PI_INFO_T info; #define DMA_BASE (BCM2708_PERI_BASE + 0x00007000 ) #define DMA_LEN 0xF00 diff --git a/src/RpiTx.c b/src/RpiTx.c index 11af661..22b7799 100644 --- a/src/RpiTx.c +++ b/src/RpiTx.c @@ -86,6 +86,10 @@ Optimize CPU on PWMFrequency // DMA TIMING : depends on Pi Model : Calibration is better int FREQ_DELAY_TIME=0; float FREQ_MINI_TIMING=157; + +float DelayStep=157; +float DelayMini=1200; + int PWMF_MARGIN = 2496;//1120; //A Margin for now at 1us with PCM ->OK int globalppmpll=0; @@ -112,8 +116,9 @@ int Randomize=1; uint32_t GlobalTabPwmFrequency[50]; unsigned int CalibrationTab[200]; - - + #include "calibrationpi2.h" + #include "calibrationpi3.h" + #include "calibrationpizero.h" //End F5OEO @@ -405,6 +410,7 @@ int SetupGpioClock(uint32_t SymbolRate,double TuningFrequency) #define ln(x) (log(x)/log(2.718281828459045235f)) +// Again some functions taken gracefully from F4GKR : https://github.com/f4gkr/RadiantBee //Normalize to [-180,180): inline double constrainAngle(double x){ @@ -532,21 +538,22 @@ inline uint32_t FrequencyAmplitudeToRegister2(double TuneFrequency,uint32_t Ampl int CompensateWait=WaitNanoSecond-OverWaitNanoSecond; for(i=1;i=CompensateWait) + if(CalibrationTab[i]+DelayStep>=CompensateWait) { break; } } - OverWaitNanoSecond+=CalibrationTab[i]+150-WaitNanoSecond; + OverWaitNanoSecond+=CalibrationTab[i]+DelayStep-WaitNanoSecond; //printf("step %d Overwait=%d\n",i,OverWaitNanoSecond); int PwmStepDMA=i; //Number step performs by DMA - int DelayStep=CalibrationTab[i+1]-CalibrationTab[i]; + +/* int DelayStep=CalibrationTab[i+1]-CalibrationTab[i]; int DelayMini=CalibrationTab[i]-((CalibrationTab[i+1]-CalibrationTab[i])*i); DelayStep=157; - DelayMini=2400; - + DelayMini=1200; +*/ int DelayMiniStep=DelayMini/DelayStep; int NbStepPWM=PwmStepDMA+DelayMiniStep; // Number step we use to calculate including delay of Minimum constant due to perform Amplitude and getting the AXI bus double UnitFrequency=DeltaFreq/(double)NbStepPWM; // Frequency granularity resulting in PWM Frequency @@ -943,8 +950,52 @@ inline uint32_t FrequencyAmplitudeToRegister(double TuneFrequency,uint32_t Ampli } +//Get from http://stackoverflow.com/questions/5083465/fast-efficient-least-squares-fit-algorithm-in-c + + #define REAL double + inline static REAL sqr(REAL x) { + return x*x; + } + + + int linreg(int n, const REAL x[], const REAL y[], REAL* m, REAL* b, REAL* r) + { + REAL sumx = 0.0; /* sum of x */ + REAL sumx2 = 0.0; /* sum of x**2 */ + REAL sumxy = 0.0; /* sum of x * y */ + REAL sumy = 0.0; /* sum of y */ + REAL sumy2 = 0.0; /* sum of y**2 */ + int i; + for (i=0;iOK - if(CalibrateSystem(&globalppmpll,&PWMF_MARGIN,&FREQ_MINI_TIMING)) printf("Calibrate : ppm=%d DMA %fns:%dns\n",globalppmpll,FREQ_MINI_TIMING,PWMF_MARGIN); + if(CalibrateSystem(&globalppmpll,&PWMF_MARGIN,&FREQ_MINI_TIMING)) printf("Calibrate : ppm=%d DMA %fns:%fns\n",globalppmpll,DelayStep,DelayMini); //printf("Timing : 1 cyle=%dns 1sample=%dns\n",NBSAMPLES_PWM_FREQ_MAX*400*3,(int)(1e9/(float)SampleRate)); return 1; } @@ -1720,7 +1809,7 @@ int pitx_run( { CompteSample++; - // if(CompteSample==327670) Up=0; + if(CompteSample==327670) Up=0; } else { @@ -1728,9 +1817,9 @@ int pitx_run( if(CompteSample==0) Up=1; } debug=1;//(debug+1)%2; - OutputPower=((CompteSample/50)%2)*32767; + //OutputPower=((CompteSample/50)%2)*32767; - uint32_t RealWait=FrequencyAmplitudeToRegister2(GlobalTuningFrequency/HarmonicNumber+(CompteSample*0.00),OutputPower,last_sample++,20000,0,NoUsePwmFrequency,debug); + uint32_t RealWait=FrequencyAmplitudeToRegister2(GlobalTuningFrequency/HarmonicNumber+(CompteSample*0.05),OutputPower,last_sample++,20000,0,NoUsePwmFrequency,debug); //printf("RealWait %d\n",(CompteSample/100)%15000+5000); free_slots--; //printf("%f \n",GlobalTuningFrequency+(((CompteSample/10)*1)%50000)); diff --git a/src/calibrationpi2.h b/src/calibrationpi2.h new file mode 100644 index 0000000..2031edf --- /dev/null +++ b/src/calibrationpi2.h @@ -0,0 +1,203 @@ + +void InitCalibrationTabPi2(void) +{ +CalibrationTab[1]=1504; +CalibrationTab[2]=1777; +CalibrationTab[3]=2048; +CalibrationTab[4]=2361; +CalibrationTab[5]=2617; +CalibrationTab[6]=2865; +CalibrationTab[7]=3082; +CalibrationTab[8]=3315; +CalibrationTab[9]=3538; +CalibrationTab[10]=3774; +CalibrationTab[11]=3968; +CalibrationTab[12]=4219; +CalibrationTab[13]=4452; +CalibrationTab[14]=4689; +CalibrationTab[15]=4900; +CalibrationTab[16]=5127; +CalibrationTab[17]=5315; +CalibrationTab[18]=5507; +CalibrationTab[19]=5660; +CalibrationTab[20]=5830; +CalibrationTab[21]=5975; +CalibrationTab[22]=6129; +CalibrationTab[23]=6286; +CalibrationTab[24]=6444; +CalibrationTab[25]=6603; +CalibrationTab[26]=6756; +CalibrationTab[27]=6915; +CalibrationTab[28]=7072; +CalibrationTab[29]=7231; +CalibrationTab[30]=7389; +CalibrationTab[31]=7539; +CalibrationTab[32]=7707; +CalibrationTab[33]=7838; +CalibrationTab[34]=8002; +CalibrationTab[35]=8158; +CalibrationTab[36]=8315; +CalibrationTab[37]=8474; +CalibrationTab[38]=8634; +CalibrationTab[39]=8790; +CalibrationTab[40]=8943; +CalibrationTab[41]=9105; +CalibrationTab[42]=9260; +CalibrationTab[43]=9415; +CalibrationTab[44]=9569; +CalibrationTab[45]=9745; +CalibrationTab[46]=9883; +CalibrationTab[47]=10032; +CalibrationTab[48]=10197; +CalibrationTab[49]=10351; +CalibrationTab[50]=10509; +CalibrationTab[51]=10663; +CalibrationTab[52]=10823; +CalibrationTab[53]=10981; +CalibrationTab[54]=11138; +CalibrationTab[55]=11295; +CalibrationTab[56]=11450; +CalibrationTab[57]=11616; +CalibrationTab[58]=11745; +CalibrationTab[59]=11910; +CalibrationTab[60]=12067; +CalibrationTab[61]=12216; +CalibrationTab[62]=12380; +CalibrationTab[63]=12534; +CalibrationTab[64]=12697; +CalibrationTab[65]=12850; +CalibrationTab[66]=13012; +CalibrationTab[67]=13164; +CalibrationTab[68]=13319; +CalibrationTab[69]=13477; +CalibrationTab[70]=13653; +CalibrationTab[71]=13786; +CalibrationTab[72]=13944; +CalibrationTab[73]=14103; +CalibrationTab[74]=14259; +CalibrationTab[75]=14411; +CalibrationTab[76]=14569; +CalibrationTab[77]=14730; +CalibrationTab[78]=14887; +CalibrationTab[79]=15036; +CalibrationTab[80]=15202; +CalibrationTab[81]=15356; +CalibrationTab[82]=15519; +CalibrationTab[83]=15648; +CalibrationTab[84]=15816; +CalibrationTab[85]=15973; +CalibrationTab[86]=16119; +CalibrationTab[87]=16284; +CalibrationTab[88]=16445; +CalibrationTab[89]=16602; +CalibrationTab[90]=16758; +CalibrationTab[91]=16920; +CalibrationTab[92]=17072; +CalibrationTab[93]=17228; +CalibrationTab[94]=17381; +CalibrationTab[95]=17556; +CalibrationTab[96]=17694; +CalibrationTab[97]=17850; +CalibrationTab[98]=18012; +CalibrationTab[99]=18164; +CalibrationTab[100]=18317; +CalibrationTab[101]=18474; +CalibrationTab[102]=18637; +CalibrationTab[103]=18790; +CalibrationTab[104]=18949; +CalibrationTab[105]=19107; +CalibrationTab[106]=19262; +CalibrationTab[107]=19423; +CalibrationTab[108]=19550; +CalibrationTab[109]=19722; +CalibrationTab[110]=19881; +CalibrationTab[111]=20028; +CalibrationTab[112]=20192; +CalibrationTab[113]=20354; +CalibrationTab[114]=20505; +CalibrationTab[115]=20664; +CalibrationTab[116]=20823; +CalibrationTab[117]=20978; +CalibrationTab[118]=21135; +CalibrationTab[119]=21288; +CalibrationTab[120]=21462; +CalibrationTab[121]=21604; +CalibrationTab[122]=21759; +CalibrationTab[123]=21917; +CalibrationTab[124]=22071; +CalibrationTab[125]=22222; +CalibrationTab[126]=22384; +CalibrationTab[127]=22534; +CalibrationTab[128]=22699; +CalibrationTab[129]=22855; +CalibrationTab[130]=23014; +CalibrationTab[131]=23168; +CalibrationTab[132]=23326; +CalibrationTab[133]=23450; +CalibrationTab[134]=23626; +CalibrationTab[135]=23785; +CalibrationTab[136]=23934; +CalibrationTab[137]=24099; +CalibrationTab[138]=24264; +CalibrationTab[139]=24407; +CalibrationTab[140]=24571; +CalibrationTab[141]=24725; +CalibrationTab[142]=24887; +CalibrationTab[143]=25033; +CalibrationTab[144]=25193; +CalibrationTab[145]=25370; +CalibrationTab[146]=25511; +CalibrationTab[147]=25664; +CalibrationTab[148]=25825; +CalibrationTab[149]=25978; +CalibrationTab[150]=26129; +CalibrationTab[151]=26285; +CalibrationTab[152]=26448; +CalibrationTab[153]=26604; +CalibrationTab[154]=26764; +CalibrationTab[155]=26918; +CalibrationTab[156]=27081; +CalibrationTab[157]=27238; +CalibrationTab[158]=27352; +CalibrationTab[159]=27531; +CalibrationTab[160]=27692; +CalibrationTab[161]=27845; +CalibrationTab[162]=28005; +CalibrationTab[163]=28164; +CalibrationTab[164]=28313; +CalibrationTab[165]=28478; +CalibrationTab[166]=28633; +CalibrationTab[167]=28791; +CalibrationTab[168]=28948; +CalibrationTab[169]=29099; +CalibrationTab[170]=29271; +CalibrationTab[171]=29415; +CalibrationTab[172]=29569; +CalibrationTab[173]=29729; +CalibrationTab[174]=29885; +CalibrationTab[175]=30031; +CalibrationTab[176]=30196; +CalibrationTab[177]=30352; +CalibrationTab[178]=30508; +CalibrationTab[179]=30670; +CalibrationTab[180]=30827; +CalibrationTab[181]=30986; +CalibrationTab[182]=31146; +CalibrationTab[183]=31254; +CalibrationTab[184]=31441; +CalibrationTab[185]=31597; +CalibrationTab[186]=31751; +CalibrationTab[187]=31911; +CalibrationTab[188]=32070; +CalibrationTab[189]=32219; +CalibrationTab[190]=32386; +CalibrationTab[191]=32535; +CalibrationTab[192]=32699; +CalibrationTab[193]=32854; +CalibrationTab[194]=33007; +CalibrationTab[195]=33176; +CalibrationTab[196]=33323; +CalibrationTab[197]=33475; +CalibrationTab[198]=33636; +CalibrationTab[199]=33790; +} diff --git a/src/calibrationpi3.h b/src/calibrationpi3.h new file mode 100644 index 0000000..86a4d08 --- /dev/null +++ b/src/calibrationpi3.h @@ -0,0 +1,202 @@ +void InitCalibrationTabPi3(void) +{ +CalibrationTab[1]=1280; +CalibrationTab[2]=1533; +CalibrationTab[3]=1786; +CalibrationTab[4]=2028; +CalibrationTab[5]=2289; +CalibrationTab[6]=2527; +CalibrationTab[7]=2739; +CalibrationTab[8]=2957; +CalibrationTab[9]=3158; +CalibrationTab[10]=3367; +CalibrationTab[11]=3556; +CalibrationTab[12]=3772; +CalibrationTab[13]=3941; +CalibrationTab[14]=4160; +CalibrationTab[15]=4348; +CalibrationTab[16]=4556; +CalibrationTab[17]=4760; +CalibrationTab[18]=4927; +CalibrationTab[19]=5097; +CalibrationTab[20]=5272; +CalibrationTab[21]=5391; +CalibrationTab[22]=5567; +CalibrationTab[23]=5752; +CalibrationTab[24]=5871; +CalibrationTab[25]=6039; +CalibrationTab[26]=6201; +CalibrationTab[27]=6340; +CalibrationTab[28]=6495; +CalibrationTab[29]=6672; +CalibrationTab[30]=6835; +CalibrationTab[31]=7029; +CalibrationTab[32]=7117; +CalibrationTab[33]=7298; +CalibrationTab[34]=7462; +CalibrationTab[35]=7638; +CalibrationTab[36]=7798; +CalibrationTab[37]=7914; +CalibrationTab[38]=8038; +CalibrationTab[39]=8227; +CalibrationTab[40]=8399; +CalibrationTab[41]=8550; +CalibrationTab[42]=8721; +CalibrationTab[43]=8894; +CalibrationTab[44]=9050; +CalibrationTab[45]=9162; +CalibrationTab[46]=9331; +CalibrationTab[47]=9504; +CalibrationTab[48]=9663; +CalibrationTab[49]=9812; +CalibrationTab[50]=9976; +CalibrationTab[51]=10135; +CalibrationTab[52]=10307; +CalibrationTab[53]=10538; +CalibrationTab[54]=10576; +CalibrationTab[55]=10737; +CalibrationTab[56]=10914; +CalibrationTab[57]=11077; +CalibrationTab[58]=11237; +CalibrationTab[59]=11412; +CalibrationTab[60]=11544; +CalibrationTab[61]=11697; +CalibrationTab[62]=11859; +CalibrationTab[63]=12008; +CalibrationTab[64]=12183; +CalibrationTab[65]=12347; +CalibrationTab[66]=12534; +CalibrationTab[67]=12670; +CalibrationTab[68]=12762; +CalibrationTab[69]=12949; +CalibrationTab[70]=13116; +CalibrationTab[71]=13277; +CalibrationTab[72]=13444; +CalibrationTab[73]=13592; +CalibrationTab[74]=13757; +CalibrationTab[75]=13929; +CalibrationTab[76]=14084; +CalibrationTab[77]=14196; +CalibrationTab[78]=14381; +CalibrationTab[79]=14558; +CalibrationTab[80]=14682; +CalibrationTab[81]=14862; +CalibrationTab[82]=15009; +CalibrationTab[83]=15188; +CalibrationTab[84]=15344; +CalibrationTab[85]=15537; +CalibrationTab[86]=15722; +CalibrationTab[87]=15831; +CalibrationTab[88]=15875; +CalibrationTab[89]=16074; +CalibrationTab[90]=16248; +CalibrationTab[91]=16427; +CalibrationTab[92]=16575; +CalibrationTab[93]=16751; +CalibrationTab[94]=16908; +CalibrationTab[95]=17068; +CalibrationTab[96]=17234; +CalibrationTab[97]=17351; +CalibrationTab[98]=17523; +CalibrationTab[99]=17700; +CalibrationTab[100]=17863; +CalibrationTab[101]=18061; +CalibrationTab[102]=18130; +CalibrationTab[103]=18308; +CalibrationTab[104]=18486; +CalibrationTab[105]=18646; +CalibrationTab[106]=18800; +CalibrationTab[107]=18998; +CalibrationTab[108]=19093; +CalibrationTab[109]=19265; +CalibrationTab[110]=19454; +CalibrationTab[111]=19557; +CalibrationTab[112]=19719; +CalibrationTab[113]=19895; +CalibrationTab[114]=20049; +CalibrationTab[115]=20217; +CalibrationTab[116]=20374; +CalibrationTab[117]=20540; +CalibrationTab[118]=20718; +CalibrationTab[119]=20926; +CalibrationTab[120]=21103; +CalibrationTab[121]=21150; +CalibrationTab[122]=21212; +CalibrationTab[123]=21447; +CalibrationTab[124]=21614; +CalibrationTab[125]=21776; +CalibrationTab[126]=21939; +CalibrationTab[127]=22096; +CalibrationTab[128]=22260; +CalibrationTab[129]=22418; +CalibrationTab[130]=22586; +CalibrationTab[131]=22737; +CalibrationTab[132]=22908; +CalibrationTab[133]=23056; +CalibrationTab[134]=23206; +CalibrationTab[135]=23361; +CalibrationTab[136]=23522; +CalibrationTab[137]=23725; +CalibrationTab[138]=23792; +CalibrationTab[139]=23973; +CalibrationTab[140]=24146; +CalibrationTab[141]=24311; +CalibrationTab[142]=24449; +CalibrationTab[143]=24616; +CalibrationTab[144]=24782; +CalibrationTab[145]=24942; +CalibrationTab[146]=25115; +CalibrationTab[147]=25330; +CalibrationTab[148]=25383; +CalibrationTab[149]=25526; +CalibrationTab[150]=25712; +CalibrationTab[151]=25881; +CalibrationTab[152]=26043; +CalibrationTab[153]=26201; +CalibrationTab[154]=26375; +CalibrationTab[155]=26496; +CalibrationTab[156]=26672; +CalibrationTab[157]=26842; +CalibrationTab[158]=27017; +CalibrationTab[159]=27165; +CalibrationTab[160]=27287; +CalibrationTab[161]=27433; +CalibrationTab[162]=27597; +CalibrationTab[163]=27764; +CalibrationTab[164]=27939; +CalibrationTab[165]=28094; +CalibrationTab[166]=28212; +CalibrationTab[167]=28385; +CalibrationTab[168]=28560; +CalibrationTab[169]=28717; +CalibrationTab[170]=28856; +CalibrationTab[171]=29027; +CalibrationTab[172]=29213; +CalibrationTab[173]=29322; +CalibrationTab[174]=29509; +CalibrationTab[175]=29651; +CalibrationTab[176]=29834; +CalibrationTab[177]=29963; +CalibrationTab[178]=30142; +CalibrationTab[179]=30297; +CalibrationTab[180]=30470; +CalibrationTab[181]=30609; +CalibrationTab[182]=30792; +CalibrationTab[183]=30953; +CalibrationTab[184]=31129; +CalibrationTab[185]=31322; +CalibrationTab[186]=31598; +CalibrationTab[187]=31656; +CalibrationTab[188]=31707; +CalibrationTab[189]=31777; +CalibrationTab[190]=31917; +CalibrationTab[191]=32145; +CalibrationTab[192]=32335; +CalibrationTab[193]=32465; +CalibrationTab[194]=32648; +CalibrationTab[195]=32803; +CalibrationTab[196]=32980; +CalibrationTab[197]=33105; +CalibrationTab[198]=33288; +CalibrationTab[199]=33439;} + diff --git a/src/calibrationpizero.h b/src/calibrationpizero.h new file mode 100644 index 0000000..a9993e2 --- /dev/null +++ b/src/calibrationpizero.h @@ -0,0 +1,203 @@ +void InitCalibrationTabPiZero(void) +{ + +CalibrationTab[1]=1135; +CalibrationTab[2]=1317; +CalibrationTab[3]=1521; +CalibrationTab[4]=1712; +CalibrationTab[5]=1891; +CalibrationTab[6]=2064; +CalibrationTab[7]=2239; +CalibrationTab[8]=2414; +CalibrationTab[9]=2578; +CalibrationTab[10]=2752; +CalibrationTab[11]=2894; +CalibrationTab[12]=3057; +CalibrationTab[13]=3212; +CalibrationTab[14]=3363; +CalibrationTab[15]=3527; +CalibrationTab[16]=3714; +CalibrationTab[17]=3866; +CalibrationTab[18]=3979; +CalibrationTab[19]=4175; +CalibrationTab[20]=4316; +CalibrationTab[21]=4512; +CalibrationTab[22]=4627; +CalibrationTab[23]=4805; +CalibrationTab[24]=4930; +CalibrationTab[25]=5104; +CalibrationTab[26]=5281; +CalibrationTab[27]=5408; +CalibrationTab[28]=5578; +CalibrationTab[29]=5759; +CalibrationTab[30]=5882; +CalibrationTab[31]=6044; +CalibrationTab[32]=6208; +CalibrationTab[33]=6349; +CalibrationTab[34]=6507; +CalibrationTab[35]=6678; +CalibrationTab[36]=6831; +CalibrationTab[37]=7036; +CalibrationTab[38]=7121; +CalibrationTab[39]=7292; +CalibrationTab[40]=7464; +CalibrationTab[41]=7620; +CalibrationTab[42]=7796; +CalibrationTab[43]=7929; +CalibrationTab[44]=8254; +CalibrationTab[45]=8232; +CalibrationTab[46]=8398; +CalibrationTab[47]=8533; +CalibrationTab[48]=8701; +CalibrationTab[49]=8881; +CalibrationTab[50]=9055; +CalibrationTab[51]=9149; +CalibrationTab[52]=9320; +CalibrationTab[53]=9489; +CalibrationTab[54]=9647; +CalibrationTab[55]=9774; +CalibrationTab[56]=9952; +CalibrationTab[57]=10105; +CalibrationTab[58]=10277; +CalibrationTab[59]=10544; +CalibrationTab[60]=10579; +CalibrationTab[61]=10722; +CalibrationTab[62]=10887; +CalibrationTab[63]=11046; +CalibrationTab[64]=11207; +CalibrationTab[65]=11364; +CalibrationTab[66]=11690; +CalibrationTab[67]=11697; +CalibrationTab[68]=11826; +CalibrationTab[69]=11973; +CalibrationTab[70]=12141; +CalibrationTab[71]=12311; +CalibrationTab[72]=12513; +CalibrationTab[73]=12679; +CalibrationTab[74]=12736; +CalibrationTab[75]=12911; +CalibrationTab[76]=13071; +CalibrationTab[77]=13234; +CalibrationTab[78]=13381; +CalibrationTab[79]=13579; +CalibrationTab[80]=13688; +CalibrationTab[81]=13861; +CalibrationTab[82]=14182; +CalibrationTab[83]=14209; +CalibrationTab[84]=14328; +CalibrationTab[85]=14485; +CalibrationTab[86]=14653; +CalibrationTab[87]=14799; +CalibrationTab[88]=14948; +CalibrationTab[89]=15119; +CalibrationTab[90]=15275; +CalibrationTab[91]=15453; +CalibrationTab[92]=15741; +CalibrationTab[93]=15841; +CalibrationTab[94]=15875; +CalibrationTab[95]=16029; +CalibrationTab[96]=16294; +CalibrationTab[97]=16368; +CalibrationTab[98]=16516; +CalibrationTab[99]=16682; +CalibrationTab[100]=16834; +CalibrationTab[101]=16961; +CalibrationTab[102]=17148; +CalibrationTab[103]=17315; +CalibrationTab[104]=17453; +CalibrationTab[105]=17621; +CalibrationTab[106]=17772; +CalibrationTab[107]=17944; +CalibrationTab[108]=18129; +CalibrationTab[109]=18319; +CalibrationTab[110]=18387; +CalibrationTab[111]=18548; +CalibrationTab[112]=18690; +CalibrationTab[113]=18872; +CalibrationTab[114]=19046; +CalibrationTab[115]=19166; +CalibrationTab[116]=19338; +CalibrationTab[117]=19531; +CalibrationTab[118]=19627; +CalibrationTab[119]=19813; +CalibrationTab[120]=20050; +CalibrationTab[121]=20106; +CalibrationTab[122]=20273; +CalibrationTab[123]=20434; +CalibrationTab[124]=20613; +CalibrationTab[125]=20853; +CalibrationTab[126]=21102; +CalibrationTab[127]=21134; +CalibrationTab[128]=21185; +CalibrationTab[129]=21347; +CalibrationTab[130]=21592; +CalibrationTab[131]=21666; +CalibrationTab[132]=21834; +CalibrationTab[133]=21991; +CalibrationTab[134]=22143; +CalibrationTab[135]=22304; +CalibrationTab[136]=22437; +CalibrationTab[137]=22638; +CalibrationTab[138]=22767; +CalibrationTab[139]=22929; +CalibrationTab[140]=23178; +CalibrationTab[141]=23241; +CalibrationTab[142]=23413; +CalibrationTab[143]=23551; +CalibrationTab[144]=23784; +CalibrationTab[145]=23835; +CalibrationTab[146]=24010; +CalibrationTab[147]=24187; +CalibrationTab[148]=24345; +CalibrationTab[149]=24573; +CalibrationTab[150]=24658; +CalibrationTab[151]=24802; +CalibrationTab[152]=24963; +CalibrationTab[153]=25151; +CalibrationTab[154]=25370; +CalibrationTab[155]=25401; +CalibrationTab[156]=25567; +CalibrationTab[157]=25813; +CalibrationTab[158]=25890; +CalibrationTab[159]=26055; +CalibrationTab[160]=26182; +CalibrationTab[161]=26387; +CalibrationTab[162]=26504; +CalibrationTab[163]=26684; +CalibrationTab[164]=26833; +CalibrationTab[165]=27080; +CalibrationTab[166]=27207; +CalibrationTab[167]=27308; +CalibrationTab[168]=27444; +CalibrationTab[169]=27617; +CalibrationTab[170]=27790; +CalibrationTab[171]=27933; +CalibrationTab[172]=28097; +CalibrationTab[173]=28320; +CalibrationTab[174]=28390; +CalibrationTab[175]=28559; +CalibrationTab[176]=28707; +CalibrationTab[177]=28873; +CalibrationTab[178]=29016; +CalibrationTab[179]=29191; +CalibrationTab[180]=29407; +CalibrationTab[181]=29494; +CalibrationTab[182]=29644; +CalibrationTab[183]=29812; +CalibrationTab[184]=29936; +CalibrationTab[185]=30110; +CalibrationTab[186]=30274; +CalibrationTab[187]=30496; +CalibrationTab[188]=30613; +CalibrationTab[189]=30762; +CalibrationTab[190]=30932; +CalibrationTab[191]=31146; +CalibrationTab[192]=31604; +CalibrationTab[193]=31659; +CalibrationTab[194]=31714; +CalibrationTab[195]=31716; +CalibrationTab[196]=31796; +CalibrationTab[197]=31973; +CalibrationTab[198]=32129; +CalibrationTab[199]=32299; +}