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

◆ instr_ADC_LETTURA_function()

void instr_ADC_LETTURA_function ( void  )

All the posible nodes voltages can be read with this instruction. Either the internal or an external ADC can be used. The external ADC option will become obsolote at the time of installation.

Returns
No Parameters, the actual result is sent to the CAN bus output throught tx_data.
762 uint8_t offset,nodo_da_leggere = tx_data[6], iii;
763 uint8_t ADC_interno_esterno= tx_data[5] & 1;
764 uint8_t ADC_diff_1_single_0= tx_data[5] >>1 & 1;
765 int32_t ADC_misura_fatta_neg=0, ADC_misura_fatta_pos=0,ADC_misura;
766
767 scheda_su_scheda_giu = (nodo_da_leggere >>7) & 1;
768 nodo_da_leggere = nodo_da_leggere & 0x7F ;
769// if ( (nodo_da_leggere >= node_voltage_Analog_Mux_0_offset ) & ADC_interno_esterno){//L'ADC ha gi\'a implementato il mux.
770// Analog_mux_line_to_select_deselect(scheda_su_scheda_giu, nodo_da_leggere , 1);
771// }
772 if( vettore_istruzioni[3]==1){
774 }else{
776 }
780
781// if(ADC_interno_esterno){
782// //Lettrura con ADC esterno
783// ADC_misura_fatta_pos= preamplifier_ADC_external_measured_node_function(scheda_su_scheda_giu , nodo_da_leggere);
784// *(int32_t *)tx_data = ADC_misura_fatta;
785//// ADC_misura_fatta = (ADC_misura_fatta * ADC_coefficiente[nodo_da_leggere / ADC_molteplicita_node_to_read].numeratore )\
786//// / ADC_coefficiente[nodo_da_leggere / ADC_molteplicita_node_to_read].denominatore ;
787// }else{
788// //Lesstura con ADC interno
789// ADC_sleep_ON_OFF(scheda_su_scheda_giu , 2); //ADC ON
790// uint8_t provvisorio= ADC_sleep_off;
791// ADC_sleep_off=10; //ADC smpre accesi durante la media
792// for(iii=0; iii<ADC_medie_per_misura;iii++){
793// ADC_misura= ADC_lettura(scheda_su_scheda_giu, nodo_da_leggere, 2);
794// int risul_vof= (ADC_lettura_24bit( nodo_da_leggere,scheda_su_scheda_giu, 2) ) ;
795// ADC_misura_fatta_pos += ADC_compensazione_al_nodo(nodo_da_leggere,ADC_misura, risul_vof);
796// if( nodo_da_leggere <= node_voltage_PreOut_ch_5 ){//PGA o Pre out
797// ADC_misura = ADC_lettura(scheda_su_scheda_giu, nodo_da_leggere + 6, 2);
798// risul_vof= (ADC_lettura_24bit( nodo_da_leggere+6,scheda_su_scheda_giu, 2) ) ;
799// ADC_misura_fatta_neg += ADC_compensazione_al_nodo(nodo_da_leggere+6,ADC_misura, risul_vof);
800// }
801// }
802// ADC_sleep_off = provvisorio;
803// ADC_sleep_ON_OFF(scheda_su_scheda_giu , 0 + ADC_sleep_off ); //ADC off se serve
804// ADC_misura_fatta_pos = ADC_misura_fatta_pos / ADC_medie_per_misura;
805// ADC_misura_fatta_neg = ADC_misura_fatta_neg / ADC_medie_per_misura;
806//
807// if(ADC_diff_single ){// misure positiva e negativa in mV
808// *(int16_t *)&tx_data[0] = (ADC_misura_fatta_pos / 1000) & 0xffff;
809// *(int16_t *)&tx_data[2] = (ADC_misura_fatta_neg / 1000) & 0xffff;
810// }else{ //misura standard differenziale
811// *(int32_t *)tx_data = ADC_misura_fatta_pos - ADC_misura_fatta_neg;
812// }
813// }
814
815 ADC_misura_fatta_pos = ADC_misura_differenziale_con_media_generico(scheda_su_scheda_giu,ADC_interno_esterno,nodo_da_leggere,ADC_diff_1_single_0);
816 if (ADC_diff_1_single_0==0){
817 if( nodo_da_leggere <= node_voltage_PreOut_ch_5 ){
818 offset=6;
819 ADC_misura_fatta_neg = ADC_misura_differenziale_con_media_generico(scheda_su_scheda_giu,ADC_interno_esterno,nodo_da_leggere+offset,ADC_diff_1_single_0);
820 }else if (nodo_da_leggere >= node_voltage_Analog_Mux_meas_bias_pos_ch0 ){
821 offset=1;
822 ADC_misura_fatta_neg = ADC_misura_differenziale_con_media_generico(scheda_su_scheda_giu,ADC_interno_esterno,nodo_da_leggere+offset,ADC_diff_1_single_0);
823 }
824 }
825
826 if(ADC_interno_esterno){
827 *(int32_t *)tx_data = ADC_misura_fatta_pos;
828 }else if ( (ADC_diff_1_single_0==0) && ( ( nodo_da_leggere <= node_voltage_PreOut_ch_5 ) ||\
829 (nodo_da_leggere >= node_voltage_Analog_Mux_meas_bias_pos_ch0 )) ){// misure positiva e negativa in mV
830 *(int16_t *)&tx_data[0] = (ADC_misura_fatta_pos / 1000) & 0xffff;
831 *(int16_t *)&tx_data[2] = (ADC_misura_fatta_neg / 1000) & 0xffff;
832 }else{ //misura standard differenziale
833 *(int32_t *)tx_data = ADC_misura_fatta_pos - ADC_misura_fatta_neg;
834 }
835
836}
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 instr_ADC_LETTURA_function(void)
All the posible nodes voltages can be read with this instruction. Either the internal or an external ...
Definition: Adc.c:761
volatile uint16_t ADC_medie_per_misura
the number of ADC readings to average, the maximum is 400
Definition: Adc.c:206
volatile bool ADC_non_leggi_lo_offset_se_true
if not necessary, the ADC input offset from buffer is not read
Definition: Adc.c:200
uint8_t tx_data[8]
Transmission data vector.
Definition: Can.c:321
@ node_voltage_PreOut_ch_5
Node voltage selection of PreOut 12+5 board down.
Definition: Istruzioni.h:90
volatile int8_t vettore_istruzioni[8]
This is a copy of the received 8 bytes from the CAN.

Definition at line 761 of file Adc.c.