481 uint8_t canale,internalADC_0_externalADC_1=(
tx_data[4] & 1), canale_selezionato=10;
482 uint8_t trimmer_old[4], PGA_Gain_old[12], trimmer_fine_test, trimmer_coarse_test;
483 uint8_t *dati_da_scrivere,dati_per_switch[]={0,0,0,0}, delta_trimmer, divisore;
484 int32_t target_slope = *(int32_t *)
tx_data, tampone;
486 int32_t pendenza[]={0,0,0,0,},trimmer_riferimento_fine = (*(uint16_t *)&
tx_data[0]);
487 int32_t ADC_misura_fatta_first[]={0,0,0,0},ADC_misura_fatta_last[]={0,0,0,0}, risul_vof;
490 scheda_su_scheda_giu = ((
tx_data[6] >> 7) & 1)*6;
491 for(canale=0;canale<6;canale++){
493 canale_selezionato=canale;
501 uint16_t memoria_trimmer;
502 uint16_t memoria_switch_trimmer;
503 int32_t segno_uscita;
504 uint8_t nodo_lettura;
505 }trimmer_da_lavorare_;
516 trimmer_da_lavorare_ trimmer_da_lavorare_mainboard_CH0[]={
522 uint8_t ii, trimmer_coarse_o_fine=10;
527 trimmer_coarse_o_fine=2;
531 trimmer_coarse_o_fine=0;
539 for(canale=0;canale<4;canale++){
544 for(canale=0;canale<6;canale++){
552 for(ii= trimmer_coarse_o_fine; ii<(2+trimmer_coarse_o_fine);ii++){
556 128+trimmer_da_lavorare[ii].segno_uscita*delta_trimmer, 1);
559 for(ii= trimmer_coarse_o_fine; ii<(2+trimmer_coarse_o_fine);ii++){
562 for(ii= trimmer_coarse_o_fine; ii<(2+trimmer_coarse_o_fine);ii++){
563 pendenza[ii]=( (ADC_misura_fatta_last[ii] - ADC_misura_fatta_first[ii]) * (trimmer_da_lavorare[ii].segno_uscita ) )/ ( (
int)delta_trimmer) ;
564 tampone = ((int)100*pendenza[ii]) / target_slope;
566 if ( (tampone >130) || (tampone<70)){
568 pendenza[ii]=target_slope;
569 tx_data[5]=3 + ii -trimmer_coarse_o_fine;
574 for(ii= trimmer_coarse_o_fine; ii<(2+trimmer_coarse_o_fine);ii++){
575 dati_da_scrivere= (uint8_t *)&pendenza[ii];
576 EPROM_scrittura_M24C32_64( scheda_su_scheda_giu,I2C_mainboard, canale_selezionato, (trimmer_da_lavorare[ii].memoria_trimmer <<2) , dati_da_scrivere);
579 ((trimmer_da_lavorare_mainboard_CH0[ii].memoria_trimmer+6*canale_selezionato) <<2), dati_da_scrivere);
580 dati_per_switch[0]=0;
582 dati_per_switch[0]=0xFF;
584 EPROM_scrittura_M24C32_64( scheda_su_scheda_giu, I2C_mainboard, canale_selezionato, (trimmer_da_lavorare[ii].memoria_switch_trimmer << 2) , dati_per_switch);
587 ((trimmer_da_lavorare_mainboard_CH0[ii].memoria_switch_trimmer+6*canale_selezionato) <<2), dati_per_switch);
589 pendenza[ trimmer_coarse_o_fine] = (pendenza[ trimmer_coarse_o_fine] / divisore );
590 tx_data[0]= (pendenza[ trimmer_coarse_o_fine] )& 0xff;
591 tx_data[1] =(( pendenza[ trimmer_coarse_o_fine] )>>8)& 0xff;
592 pendenza[ trimmer_coarse_o_fine+1]= (pendenza[ trimmer_coarse_o_fine+1] / divisore );
593 tx_data[2]= (pendenza[ trimmer_coarse_o_fine+1] )& 0xff;
594 tx_data[3]=( ( pendenza[ trimmer_coarse_o_fine+1])>>8)& 0xff;
598 for(canale=0;canale<4;canale++){
603 for(canale=0;canale<6;canale++){
604 PGA_GAIN_CROSS( scheda_su_scheda_giu, canale, PGA_Gain_old[canale] );
int32_t ADC_misura_differenziale_con_media_generico(uint8_t scheda_su_scheda_giu_, uint8_t preamplifier_externalADC_1_onboardADC_0, uint8_t nodo_da_misurare, uint8_t differenziale_1_single_0)
This function sets the original gain when a few LSb have to be determined. The umber of bits is bit_t...
volatile uint16_t ADC_medie_per_misura
the number of ADC readings to average, the maximum is 400
uint8_t tx_data[8]
Transmission data vector.
void PGA_GAIN_CROSS(uint8_t scheda_su_scheda_giu, uint8_t canale, uint8_t PGA_gain_to_set)
Here the 2 digital signals from the trimmer are exploited to set the gain of the input stage of the P...
uint8_t PGA_settled_gain[12]
PGA set gain.
#define Detector_trimmer_fine_bias_pos
#define Detector_trimmer_coarse_bias_pos
#define Detector_trimmer_fine_bias_neg
#define Detector_trimmer_coarse_bias_neg
#define Detector_scrivi_il_trimmer
void EPROM_scrittura_M24C32_64(uint8_t scheda_su_scheda_giu, uint8_t mainboard_postmainboard, uint8_t canale, short indirizzo_memoria, uint8_t *dati_da_scrivere)
Wriring the EEPROM.
@ Memory_mainboard_det_coa_slope_cali_ON_0_OFF_ff_ch0
slope detector positive trimmer active if zero
@ Memory_mainboard_det_positive_ad_coarse_trim_slope_bias_ch0
coarse slope for detector positive trimmer bias
@ Memory_mainboard_det_fin_slope_cali_ON_0_OFF_ff_ch0
slope detector negative trimmer active if zero
@ Memory_mainboard_det_positive_ad_fine_trim_slope_bias_ch0
fine slope for detector positive trimmer bias
@ Memory_mainboard_det_negative_ad_coarse_trim_slope_bias_ch0
coarse slope for detector negative trimmer bias
@ Memory_mainboard_det_negative_ad_fine_trim_slope_bias_ch0
fine slope for detector negative trimmer bias
@ Memory_detector_negative_address_coarse_trimmer_slope_bias
coarse slope for detector negative trimmer bias
@ Memory_detector_positive_address_coarse_trimmer_slope_bias
coarse slope for detector positive trimmer bias
@ Memory_detector_negative_address_fine_trimmer_slope_bias
fine slope for detector negative trimmer bias
@ Memory_detector_fine_slope_calibration_ON_0_OFF_ff
slope detector negative trimmer active if zero
@ Memory_detector_coarse_slope_calibration_ON_0_OFF_ff
slope detector positive trimmer active if zero
@ Memory_detector_positive_address_fine_trimmer_slope_bias
fine slope for detector positive trimmer bias
@ node_voltage_Analog_Mux_0_offset
Starting Offset for this set of nodes, 32.
void Aspetta_tanti_ms(int millisecondi)
The timing function.
void instr_DetBias_trimmer_calibration_function(void)
The fine and coarse trimmers for Detector bias adjustment are calibrated here
uint8_t contenuto_trimmer_detector[12][4]
Content of the trimmer for detector bias system.
void detector_scrittura_lettura_trimmer_bias(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 detector biasing, the contents of the trimmers are stored in the...