CROSS Technical Documentation User Manual and Technical Doc.
INFN Milano Bicocca
Loading...
Searching...
No Matches

◆ instr_output_offset_to_be_set_function()

void instr_output_offset_to_be_set_function ( void  )

The detector bias will be set at the value set with the function instr_detector_Vbias_we_want_to_set_function() with which the target values are stored in the vector Detector_bias_target[].

Returns
No Parameters, the actual result is sent to the CAN bus output throught tx_data.
278uint8_t iii,canale, indice;
279uint8_t volatile tx_data_buffer[8],fai_fai=1;
280int8_t variazione;
281 LED_rosso_fondo_scala=LED_lungo;
282
283 ERROR_codifica_errore(0,0,0,0); //Reset_ch0 errori
284 for(iii=0;iii < 8;iii++){// Potrebbe essere richiesto qualcosa sul can,
285 //bufferizziamo l'istruzione
286 tx_data_buffer[iii]= tx_data[iii];
287 }
288
289 //La funzione va sviluppata per ora si ritrona il fw
290 //verificare le modalit\'a di misura:
294 //attesa tra le misure
295 preamplifier_attesa_tra_le_misure = vettore_istruzioni[4] *100;
296 if ( preamplifier_attesa_tra_le_misure <100) preamplifier_attesa_tra_le_misure=100;
297 if (preamplifier_attesa_tra_le_misure > 10000) preamplifier_attesa_tra_le_misure=10000;
298 //errore tollerato
299 preamplifier_error_voltage= vettore_istruzioni[5] *1000;
300 //i canali da agiustare
301 preamplifier_canali_da_regolare= vettore_istruzioni[6] & 0x7F;
302 preamplifier_canali_da_regolare_old=preamplifier_canali_da_regolare;
303 scheda_su_scheda_giu = ((vettore_istruzioni[6] >> 7) & 1)*6;
304 //l'adc da usare, interno o esterno
305 preamplifier_externalADC_1_onboardADC_0 = vettore_istruzioni[3] & 1;
306// preamplifier_SAR_1_no_SAR_0 = ( vettore_istruzioni[3] >> 1 ) & 1;
307// preamplifier_fastSAR_1_no_fastSAR_0 = ( vettore_istruzioni[3] >> 2 ) & 1;
308
310 vettore_istruzioni[3] =0; //Non si fa altro
311 fai_fai=0;
312 EPROM_store_recover_state_M24C32_64(scheda_su_scheda_giu, vettore_istruzioni[6],0,0);
313 }
314
316 //Offset recalled from startup
317 EPROM_store_recover_state_M24C32_64(scheda_su_scheda_giu,preamplifier_canali_da_regolare,1,1);
318 fai_fai=0;
319 }
321 //Offset recalled from user location
322 EPROM_store_recover_state_M24C32_64(scheda_su_scheda_giu,preamplifier_canali_da_regolare,1,0);
323 fai_fai=0;
324 }
325
326 //Leggiamo le pendenze
327 uint8_t dati_scambio[4] , scheda=scheda_su_scheda_giu;
328 for( canale=0;canale<6;canale++){
329// if(canale==6) scheda =1;
330 EPROM_lettura_M24C32_64(scheda, I2C_mainboard, canale, Memory_preamplifier_slope_calibration_ON_0_OFF_ff <<2,dati_scambio);
331 if(dati_scambio[0] ==0){//solo se la misura \'e stata fatta si aggiornano le pendenze, altrimenti vale il fedault
332 EPROM_lettura_M24C32_64(scheda, I2C_mainboard, canale, Memory_preamplifier_address_coarse_trimmer_slope_offset <<2,dati_scambio);
333 preamplifier_coarse_step_trimmer[canale+scheda]=*(int32_t *)dati_scambio;
334 EPROM_lettura_M24C32_64(scheda, I2C_mainboard, canale, Memory_preamplifier_address_fine_trimmer_slope_offset <<2,dati_scambio);
335 preamplifier_fine_step_trimmer[canale+scheda]= *(int32_t *)dati_scambio;
336 }
337 preamplifier_error_voltage_at_the_moment[canale+scheda]= preamplifier_coarse_step_trimmer[canale+scheda] >>1; //mezzo bit di errore sul coarse all'inizio
338 }
339
340 if(fai_fai){
341//Initialization for default SAR
343 for( canale=0;canale<12;canale++){
344 preamplifier_SAR_ini[canale].starting_value =128;
345 preamplifier_SAR_ini[canale].starting_exp_value[0]=7;
346 preamplifier_SAR_ini[canale].starting_exp_value[1]=7;
347 }
348 }
349 for( canale=0;canale<6;canale++){ //a met\'a scala i trimmer fine che ci interssano
350 if((preamplifier_canali_da_regolare >> canale) & 1){
351 preamplifier_scrittura_lettura_trimmer( scheda_su_scheda_giu, canale,\
352 trimmer_fine_offset, 128, preamplifier_scrivi_il_trimmer );//Trimmer fine inizializzato met\'a scala
353 }
354 }
355
356//Ora impostiamo ad 1 tutti i guadagni, normalizziamo gli errori ed i target
357preamplifier_normalize_gain_offset_error(scheda_su_scheda_giu) ;
358
359//FINE: Initialization for default SAR, changes are applied in fastSAR, eventually
360
361 for( canale=0;canale<6;canale++){ //impostiamo la compensazione termica di default, se \'e stata fatta.
362 if((preamplifier_canali_da_regolare >> canale) & 1){
363 preamplifier_determina_trimmer_therma_comp( scheda_su_scheda_giu, canale, 0, 1);
364 termalizzazione_fatta[canale + scheda_su_scheda_giu]=0;
365 }
366 }
367
368
371
372 //Ora aggiustiamo il controllo termico per quei canali che inizialmente erano saturi
373 uint8_t ri_misuriamo=0;preamplifier_canali_da_regolare_old=preamplifier_canali_da_regolare;
374 for( canale=0;canale<6;canale++){ //impostiamo la compensazione termica di default, se \'e stata fatta.
375 if((preamplifier_canali_da_regolare_old >> canale) & 1){
376 if (termalizzazione_fatta[canale + scheda_su_scheda_giu]==0){
377 preamplifier_canali_da_regolare=1 <<canale;
378 ri_misuriamo=1;
379 }
380 }
381 }
382 //Se c'erano canali inizalmente saturi riaggiustiamo
383 if(ri_misuriamo){
386 }
387
388
389//Ora vediamo qualche setting
391 //Offset to be stored at memory location for sturtup
392 EPROM_store_recover_state_M24C32_64(scheda_su_scheda_giu,vettore_istruzioni[6],0,1);
393 }
395 //Offset to be stored at user memory location for sturtup
396 EPROM_store_recover_state_M24C32_64(scheda_su_scheda_giu, vettore_istruzioni[6],0,0);
397 }
398 }
399 for(iii=0;iii < 8 ;iii++){
400 tx_data[iii]= tx_data_buffer[iii];
401 }
402 tx_data[6] = preamplifier_canali_da_regolare; //i canali non in tolleranza hanno un 1 in corrispondenza
403 int32_t somma=0;
404 for( iii=0;iii<6;iii++){
405 somma += preamplifier_error_voltage_at_PGA_gain[iii+scheda_su_scheda_giu];
406 }
407 somma = somma / 6000;
408 if( somma >255) somma=255;
409 tx_data[5] = somma;
411}
volatile uint16_t ADC_medie_per_misura
the number of ADC readings to average, the maximum is 400
Definition: Adc.c:206
uint8_t tx_data[8]
Transmission data vector.
Definition: Can.c:321
#define detector_bit_per_storing_startup
#define detector_bit_per_storing_user_state
#define detector_bit_recall_user_defined
#define detector_bit_recall_startup
#define detector_bit_store_state_in_user_as_it_is
#define detector_offset_from_half_scale
void Error_imposta_la_istruzione(void)
Function to be located at the end of every instruction to mark the error, if any.
void ERROR_codifica_errore(uint8_t scheda_su_scheda_giu, unsigned char error_addres, unsigned char code_to_shift, uint8_t reset_count_se_0)
If an error is found its flag is codified here.
volatile uint16_t LED_rosso_fondo_scala
Definition: Led.c:56
void EPROM_lettura_M24C32_64(uint8_t scheda_su_scheda_giu_, uint8_t mainboard_postmainboard, uint8_t canale, short indirizzo_memoria, uint8_t *dati_letti)
Read from preamplifier and on-board flashes.
void EPROM_store_recover_state_M24C32_64(uint8_t scheda_su_scheda_giu, uint8_t canali_da_regolare, uint8_t set_1_store_0, uint8_t startup_1_user_0)
Store the system state or recover and apply the system state.
@ Memory_preamplifier_slope_calibration_ON_0_OFF_ff
slope trimmer active if zero
@ Memory_preamplifier_address_fine_trimmer_slope_offset
fine slope for trimmer offset
@ Memory_preamplifier_address_coarse_trimmer_slope_offset
coarse slope for trimmer offset
void preamplifier_trova_il_guess(uint8_t trimmer_da_usare)
static void preamplifier_normalize_gain_offset_error(uint8_t scheda_su_scheda_giu_)
The ouput offset will be set at the value that was given with the instr_ouput_offset_we_want_to_set i...
void instr_output_offset_to_be_set_function(void)
The detector bias will be set at the value set with the function instr_detector_Vbias_we_want_to_set_...
void preamplifier_determina_trimmer_therma_comp(uint8_t scheda_su_scheda_giu, uint8_t canale, uint8_t valore_previsto_trimmer_offset, uint8_t solo_recupero_default_comp_se_1)
This function determines and set the thermal compensation trimmer.
void preamplifier_aggiusta_offset_SAR(void)
This function provide the output offset with the standard SAR method.
#define preamplifier_scrivi_il_trimmer
void preamplifier_scrittura_lettura_trimmer(uint8_t scheda_su_scheda_giu, uint8_t canale, uint8_t trimmer, uint8_t valore, uint8_t scrivi_1_leggi_0)
Setting the value of any trimmer for preamplifier trimmer, the contents of the trimmers are stored in...
Definition: Trimmer.c:283
#define trimmer_fine_offset
Definition: Trimmer.h:80
#define trimmer_coarse_offset
Definition: Trimmer.h:82
volatile int8_t vettore_istruzioni[8]
This is a copy of the received 8 bytes from the CAN.

Definition at line 277 of file Preamplifier_Offset_Drift_Correcttion.c.