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

◆ preamplifier_aggiusta_offset_SAR()

void preamplifier_aggiusta_offset_SAR ( void  )

This function provide the output offset with the standard SAR method.

Returns
No Parameters, the actual result is sent to the CAN bus output throught tx_data.
565 uint8_t canale;
566 uint8_t indice;
567 uint8_t i_2_trimmer[]={trimmer_coarse_offset , trimmer_fine_offset}, indice_trimmer,scalata,confronto;
568 uint8_t target_raggiunto_1_non_raggiunto_0[]={0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0}; // si misura fino a che non diventa 1
569 int32_t ADC_misura_fatta_prov,ADC_misura_fatta_prov_vet[200];
570 uint16_t iii, media_prov; //medie=10;
571
572 if( scheda_su_scheda_giu>=1) scheda_su_scheda_giu=6;
573
574//Inizializzazione dei trimmer che servono alla regolazione
575//for(canale=0; canale<6;canale++){
576// if( (preamplifier_canali_da_regolare >> canale) & 1){
577// preamplifier_scrittura_lettura_trimmer( scheda_su_scheda_giu, canale, trimmer_coarse_offset, \
578// preamplifier_SAR_ini[canale + scheda_su_scheda_giu].starting_value, preamplifier_scrivi_il_trimmer );//Trimmer inizializzato a zero
579// preamplifier_scrittura_lettura_trimmer( scheda_su_scheda_giu, canale, trimmer_fine_offset, 128, preamplifier_scrivi_il_trimmer );//Trimmer inizializzato a zero
580// }
581//}
582//FINE Inizializzazione dei trimmer che servono alla regolazione
583
584// Esploriamo i 2 trimmer, a partie dal+ significativo, cio\'e il SAR veroe e proprio
585 preamplifier_canali_da_regolare_old= preamplifier_canali_da_regolare;
586 for(indice_trimmer=0; indice_trimmer<2;indice_trimmer++){//Facciamo 2 giri, uno per ogni trimmer
587
588 if( indice_trimmer) {
589 preamplifier_canali_da_regolare = preamplifier_canali_da_regolare_old;
590 for(canale=0; canale<6;canale++){
591 indice= canale + scheda_su_scheda_giu;
592 preamplifier_error_voltage_at_the_moment[indice]= preamplifier_error_voltage_at_PGA_gain[indice] / PGA_settled_gain_old[indice]; //Ripristiniamo l'errore
593 target_raggiunto_1_non_raggiunto_0[indice]=0;
594 }
595 preamplifier_trova_il_guess( i_2_trimmer[indice_trimmer]);
596 }
597
598 for(scalata=0; scalata<8; scalata++){
599 //SAR a guadagno 1 fino agli ultimi bit, per non creare sconquasso
600 preamplifier_ritorno_al_gain_originale(scalata , indice_trimmer, target_raggiunto_1_non_raggiunto_0);
601
602 confronto= 1 << (7-scalata); //Impostiamo il valore di prova da aggiungere al trimmer
603 for(canale=0; canale<6;canale++){ // Scansoniamo tutti i possibili canali sulla scheda selezionata
604 indice= canale + scheda_su_scheda_giu; //Solito 2 schede possibili, la prima schede ha indirizzi da 0 a 5, la seconda da 6 a 11
605 if( (preamplifier_SAR_ini[indice].starting_exp_value[indice_trimmer] >= (7-scalata))){ //Job starts just with the minimal cheks, always for the lower 8 bits
606 if( (preamplifier_canali_da_regolare >> canale) & 1){//Selezionaiamo solo i canali indicati
607 contenuto_trimmer_preamplifier[indice][i_2_trimmer[indice_trimmer]] += confronto;
608 preamplifier_scrittura_lettura_trimmer( scheda_su_scheda_giu, canale, i_2_trimmer[indice_trimmer], \
609 contenuto_trimmer_preamplifier[indice][i_2_trimmer[indice_trimmer]], preamplifier_scrivi_il_trimmer );
610 }
611 }
612 }
613 Aspetta_tanti_ms( preamplifier_attesa_tra_le_misure );
614
615 for(canale=0; canale<6;canale++){ // Scansoniamo tutti i possibili canali sulla scheda selezionata
616 indice= canale + scheda_su_scheda_giu; //Solito 2 schede possibili, la prima schede ha indirizzi da 0 a 5, la seconda da 6 a 11
617 if( (preamplifier_SAR_ini[indice].starting_exp_value[indice_trimmer] >= (7-scalata)) ){ //Job is done just with the minimal cheks
618 if( (preamplifier_canali_da_regolare >> canale) & 1){//Selezionaiamo solo i canali indicati
619 if( target_raggiunto_1_non_raggiunto_0[indice]==0){//Se non abbiamo ancora raggiunto la tolleranza continuamo, per i canali fuori target
620 ADC_misura_fatta =ADC_misura_differenziale_con_media_generico(scheda_su_scheda_giu,preamplifier_externalADC_1_onboardADC_0,canale,1);
621
622 if( ( ADC_misura_fatta - preamplifier_Output_offset_target_at_the_moment[indice] ) < \
623 ( - preamplifier_error_voltage_at_the_moment[indice]) ){
624 //siamo fuori tolleranza
625 target_raggiunto_1_non_raggiunto_0[indice]=0;
626 ADC_misura_fatta_old[indice]= ADC_misura_fatta; //
627 }else if ( ( ADC_misura_fatta - preamplifier_Output_offset_target_at_the_moment[indice] ) < \
628 (0 ) ){
629 //Siamo in tolleranza e dobbiamo fermarci
630 target_raggiunto_1_non_raggiunto_0[indice]=1;
631 preamplifier_canali_da_regolare -= 1 << canale ;
632 ADC_misura_fatta_old[indice]= ADC_misura_fatta; //
633 }else if ( ( ADC_misura_fatta - preamplifier_Output_offset_target_at_the_moment[indice] ) >\
634 ( preamplifier_error_voltage_at_the_moment[indice])){
635 //siamo fuori tolleranza
636 target_raggiunto_1_non_raggiunto_0[indice]=0;
637
638 contenuto_trimmer_preamplifier[indice][ i_2_trimmer[indice_trimmer]] -= confronto;
639 preamplifier_scrittura_lettura_trimmer( scheda_su_scheda_giu, canale, i_2_trimmer[indice_trimmer], \
640 contenuto_trimmer_preamplifier[indice][i_2_trimmer[indice_trimmer]], preamplifier_scrivi_il_trimmer );
641 }else if ( ( ADC_misura_fatta - preamplifier_Output_offset_target_at_the_moment[indice] ) >\
642 (0 ) ){
643 //siamo in tolleranza
644 target_raggiunto_1_non_raggiunto_0[indice]=1;
645 ADC_misura_fatta_old[indice]= ADC_misura_fatta; //
646 preamplifier_canali_da_regolare -= 1 << canale ;
647 }
648 }
649 }
650 }
651 }
652 }
653
654 }
655}
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...
Definition: Adc.c:899
void preamplifier_trova_il_guess(uint8_t trimmer_da_usare)
void preamplifier_ritorno_al_gain_originale(uint8_t scalata, uint8_t indice_trimmer, uint8_t *target_raggiunto_1_non_raggiunto_0)
This function sets the original gain when a few LSb have to be determined. The umber of bits is bit_t...
void preamplifier_aggiusta_offset_SAR(void)
This function provide the output offset with the standard SAR method.
#define preamplifier_scrivi_il_trimmer
void Aspetta_tanti_ms(int millisecondi)
The timing function.
Definition: Timer.c:52
uint8_t volatile contenuto_trimmer_preamplifier[12][4]
Definition: Trimmer.c:179
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

Definition at line 564 of file Preamplifier_Offset_Drift_Correcttion.c.