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

◆ ADC_misura_differenziale_con_media_generico()

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_to_go.

Parameters
[in]scheda_su_scheda_giu_: the selected board
[in]preamplifier_externalADC_1_onboardADC_0: the chosen between the external ADC (1), or the internal ADC (0)
[in]nodo_da_misurare: the channel number of PGA
[in]differenziale_1_single_0: the measurement type
Returns
ADC_misura_fatta : the final measurement
899int32_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){
900
901 uint16_t iii, media_prov=ADC_medie_per_misura;
902 int32_t ADC_misura_fatta_prov, ADC_misura_fatta_prov_vet[200], maggiore, minore,scarto=0,sigmetta=0;
903// int64_t sigma2=0;
904 if( ADC_medie_per_misura==0) {
906 media_prov=ADC_medie_per_misura;
907 }
908 scheda_su_scheda_giu=scheda_su_scheda_giu_;
909 //Misuro con ADC da scegliere
910 if( preamplifier_externalADC_1_onboardADC_0){
911 //Misura con adc esterno
912 ADC_misura_fatta = preamplifier_ADC_external_measured_node_function(scheda_su_scheda_giu_, nodo_da_misurare);
913 }else{
914 //Misuro con adc interno
915 ADC_sleep_ON_OFF(scheda_su_scheda_giu , 2); //ADC sempre ON durante la misura
916 uint8_t provvisorio= ADC_sleep_off;
917 ADC_sleep_off=10;
918 ADC_misura_fatta_prov=0;
920 for(iii=0; iii<ADC_medie_per_misura;iii++){
921 ADC_misura_fatta_prov_vet[iii] = ADC_misura_differenziale_single_ended(scheda_su_scheda_giu_,nodo_da_misurare,differenziale_1_single_0);
922// ADC_misura_fatta_prov_vet[iii] = ADC_misura_differenziale(scheda_su_scheda_giu_ , nodo_da_misurare );
923 ADC_misura_fatta_prov +=ADC_misura_fatta_prov_vet[iii];
924 }
925 ADC_misura_fatta_prov = ADC_misura_fatta_prov / ADC_medie_per_misura;
926 for(iii=0; iii<ADC_medie_per_misura;iii++){
927 //Misuriamo la sigma
928 if( ADC_misura_fatta_prov_vet[iii] >= ADC_misura_fatta_prov){
929 sigmetta += ADC_misura_fatta_prov_vet[iii] - ADC_misura_fatta_prov;
930 }else{
931 sigmetta += ADC_misura_fatta_prov - ADC_misura_fatta_prov_vet[iii] ;
932 }
933
934 }
935 sigmetta= sigmetta / ADC_medie_per_misura;
936 //3 sigma sono circa 4 volte il valore ottenuto con l'integrale del modulo: 3sigma=3(pi/2)^.5sigmetta=3.8sigmetta
937 maggiore= ADC_misura_fatta_prov + 4 * sigmetta;
938 minore= ADC_misura_fatta_prov - 4 * sigmetta;
939 for(iii=0; iii<ADC_medie_per_misura;iii++){
940 if( (ADC_misura_fatta_prov_vet[iii] > maggiore) || (ADC_misura_fatta_prov_vet[iii] < minore)){
941 //I punti fuori gaussiana li buttiamo
942 media_prov--;
943 scarto +=ADC_misura_fatta_prov_vet[iii];
944 }
945 }
946 if( media_prov){
947 ADC_misura_fatta = ( ADC_misura_fatta_prov * ADC_medie_per_misura - scarto) / media_prov ;
948 }else{
949 ADC_misura_fatta = ADC_misura_fatta_prov;
950 }
951 ADC_sleep_off = provvisorio; //Rimettiamo l'adc come serve
952 ADC_sleep_ON_OFF(scheda_su_scheda_giu , 0 + ADC_sleep_off ); //ADC off se serve
953 }
954 return ADC_misura_fatta;
955}
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 ADC_sleep_ON_OFF(uint8_t up_down, uint8_t ADC_ON_1_OFF_0_NOP_GT1)
ADC is set to sleep or awake.
Definition: Adc.c:350
volatile uint16_t ADC_medie_per_misura
the number of ADC readings to average, the maximum is 400
Definition: Adc.c:206
static int32_t ADC_misura_differenziale_single_ended(uint8_t scheda_su_scheda_giu, uint8_t nodo_da_leggere, uint8_t differenziale_1_single_0)
This function performs a differential or single ended measurement on nodes.
Definition: Adc.c:852
volatile uint8_t ADC_sleep_off
if 0 ADC in sleep when not working, ADC>1 ADC never sleep
Definition: Adc.c:205
int32_t preamplifier_ADC_external_measured_node_function(uint8_t scheda_su_scheda_giu, uint8_t indice)
This function provide node reading from an external ADC.
void Aspetta_tanti_ms(int millisecondi)
The timing function.
Definition: Timer.c:52

Definition at line 899 of file Adc.c.