change vcp when changing vthreshold/threshold. Limit individual vcmps

This commit is contained in:
Gemma Tinti
2016-06-30 08:24:18 +02:00
parent 7ee62fcb6f
commit 9574e09033

View File

@ -65,7 +65,7 @@ int default_dac_values[16] = {
1100, //rxb_rb 1100, //rxb_rb
1100, //rxb_lb 1100, //rxb_lb
1000, //Vcmp_rr 1000, //Vcmp_rr
200, //Vcp 1000, //Vcp
2000, //Vcn 2000, //Vcn
1550 //Vis 1550 //Vis
}; };
@ -366,7 +366,7 @@ int detectorTest( enum digitalTestMode arg){
void setDAC(enum detDacIndex ind, int val, int imod, int mV, int retval[]){ void setDAC(enum detDacIndex ind, int val, int imod, int mV, int retval[]){
if(ind == VTHRESHOLD){ if(ind == VTHRESHOLD){
int ret[4]; int ret[5];
setDAC(VCMP_LL,val,imod,mV,retval); setDAC(VCMP_LL,val,imod,mV,retval);
ret[0] = retval[mV]; ret[0] = retval[mV];
setDAC(VCMP_LR,val,imod,mV,retval); setDAC(VCMP_LR,val,imod,mV,retval);
@ -375,15 +375,19 @@ void setDAC(enum detDacIndex ind, int val, int imod, int mV, int retval[]){
ret[2] = retval[mV]; ret[2] = retval[mV];
setDAC(VCMP_RR,val,imod,mV,retval); setDAC(VCMP_RR,val,imod,mV,retval);
ret[3] = retval[mV]; ret[3] = retval[mV];
setDAC(VCP,val,imod,mV,retval);
ret[4] = retval[mV];
if((ret[0]== ret[1])&& if((ret[0]== ret[1])&&
(ret[1]==ret[2])&& (ret[1]==ret[2])&&
(ret[2]==ret[3])) (ret[2]==ret[3]) &&
cprintf(GREEN,"vthreshold match\n"); (ret[3]==ret[4]))
cprintf(GREEN,"vthreshold match\n");
else{ else{
retval[0] = -1;retval[1] = -1; retval[0] = -1;retval[1] = -1;
cprintf(RED,"vthreshold mismatch 0:%d 1:%d 2:%d 3:%d\n", cprintf(RED,"vthreshold mismatch 0:%d 1:%d 2:%d 3:%d\n",
ret[0],ret[1],ret[2],ret[3]); ret[0],ret[1],ret[2],ret[3]);
} }
return; return;
} }
@ -657,26 +661,39 @@ int setThresholdEnergy(int ev, int imod){
printf(" Setting threshold energy:%d\n",ev); printf(" Setting threshold energy:%d\n",ev);
int retval[2],i; int retval[2],i;
int thrvalue[NGAIN]; int thrvalue[NGAIN];
int average=0;
if(ev >= 0) {
if(ev >= 0){ enum detDacIndex ind[NGAIN]={VCMP_LL,VCMP_LR,VCMP_RL, VCMP_RR};
eiger_photonenergy = ev; char* vcmp={"vcmp_ll","vcmp_lr","vcmp_rl","vcmp_rr"};
//calculate thrvalues for dacs int valid=0;
for(i=0;i<NGAIN;i++){
thrvalue[i] = (int) (( ((double)detectorGain[i]/1000) * (-1) * ((double)ev/1000)) + ((double)detectorOffset[i]/1000)); //calculate thrvalues for dacs
printf("detectorGain[i]:%d detectorOffset[i]:%d thrvalue[i]:%d\n",detectorGain[i],detectorOffset[i],thrvalue[i]); for(i=0;i<NGAIN;i++){
}
thrvalue[i] = (int) (( ((double)detectorGain[i]/1000) * (-1) * ((double)ev/1000)) + ((double)detectorOffset[i]/1000));
printf("detectorGain[i]:%d detectorOffset[i]:%d thrvalue[i]:%d\n",detectorGain[i],detectorOffset[i],thrvalue[i]);
//put limits (VCMP SHOUDL ALWAYS BE BETWEEN 0 AND 2000
//setdacs
if(thrvalue[i]>=0 && thrvalue[i]<2001)valid++;
}//ngains
//setdacs if( valid == NGAIN){
setDAC(VCMP_LL,thrvalue[0],-1,0,retval);if(retval[0] != thrvalue[0]) cprintf(BG_RED,"Failed to set vcmp_ll to %d, got %d\n",retval[0],thrvalue[0]); eiger_photonenergy = ev;
setDAC(VCMP_LR,thrvalue[1],-1,0,retval);if(retval[0] != thrvalue[1]) cprintf(BG_RED,"Failed to set vcmp_lr to %d, got %d\n",retval[0],thrvalue[1]); for(i=0;i<NGAIN;i++) {
setDAC(VCMP_RL,thrvalue[2],-1,0,retval);if(retval[0] != thrvalue[2]) cprintf(BG_RED,"Failed to set vcmp_rl to %d, got %d\n",retval[0],thrvalue[2]); average+= thrvalue[i];
setDAC(VCMP_RR,thrvalue[3],-1,0,retval);if(retval[0] != thrvalue[3]) cprintf(BG_RED,"Failed to set vcmp_rr to %d, got %d\n",retval[0],thrvalue[3]); setDAC(ind[i],thrvalue[i],-1,0,retval);
if(retval[0] != thrvalue[i]) cprintf(BG_RED,"Failed to set %s to %d, got %d\n",vcmp[i], thrvalue[i],retval[0]);
}
average=(int) ((float)average/4.+0.5);
setDAC(VCP,average,-1,0,retval);
if(retval[0] != average) cprintf(BG_RED,"Failed to set VCP to %d, got %d\n",average, retval[0]);
}
} }
return getThresholdEnergy(imod); return getThresholdEnergy(imod);
} }
enum detectorSettings setSettings(enum detectorSettings sett, int imod){ enum detectorSettings setSettings(enum detectorSettings sett, int imod){
if(sett != GET_SETTINGS) if(sett != GET_SETTINGS)
thisSettings = sett; thisSettings = sett;