The detector bias is set at the value passed from the CAN.
This instruction needs to know which channel to set at byte istruzione_byte_4_e_scelta_canale and the the setting value, in mV, byte_istr_dati_0 and byte_istr_dati_1 of the CAN message.
1149 #define offset_adjusted_at_the_pre_bias_set 0
1150 #define bias_adjustement_start_from_half_scale 1
1151 bool errore_pos[2]={
true,
true}, errore_neg[2]={
true,
true},errore_generale=
true;
1154 unsigned int attesa;
1155 long int discrepanza;
1156 char canale=0, troppe_misure=0,ii;
1162 char nodo_di_misura_1[]={ADC_ADC_PGA_neg_out_ch0, ADC_ADC_PGA_neg_out_ch1};
1163 char nodo_di_misura_2[]={ADC_ADC_PGA_pos_out_ch0, ADC_ADC_PGA_pos_out_ch1};
1169 struct canale_ADC_type{
1170 unsigned char att_pos;
1171 unsigned char att_neg;
1177 for( canale=0;canale<2;canale++){
1180 valore_target_per_offset[canale]=correzione_misura_ADC(coeffcienti_misura_ADC_nodi[nodo_di_misura_1[canale]], offset);
1182 if( (valore_target_per_offset[canale] >= saturazione_positiva) || ( valore_target_per_offset[canale] <= saturazione_negativa ) ) {
1183 valore_target_per_offset[canale]=0;
1186 valore_target_per_offset[canale] = ( valore_target_per_offset[canale] * (int)
guadagno_minimo_PGA ) / (int)PGA_Gain_V_su_V[canale] ;
1190 char PGA_Gain_V_su_V_old[]={PGA_Gain_V_su_V[0], PGA_Gain_V_su_V[1]};
1201 for(ii =0; ii<2;ii++){
1203 errore_pos[ii]=
false;
1204 errore_neg[ii]=
false;
1209 for(canale =0; canale<2;canale++){
1210 if ( errore_pos[canale] ){
1211 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CB (canale, trimmer_bias_coarse_pos, 0x80);
1212 detector_Trimmer_bias[canale].coarse_pos=0x80;
1213 detector_Trimmer_bias[canale].fine_pos=0x80;
1214 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CB (canale, trimmer_bias_fine_pos, 0x80);
1215 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CB (canale, trimmer_bias_coarse_neg, 0x80);
1216 detector_Trimmer_bias[canale].coarse_neg=0x80;
1217 detector_Trimmer_bias[canale].fine_neg=0x80;
1218 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CB (canale, trimmer_bias_fine_neg , 0x80);
1224 for(canale =0; canale<2;canale++){
1225 if ( errore_pos[canale] ){
1227 offset = correzione_misura_ADC(indice_Vbias, offset);
1228 discrepanza = tensione_target_attenuata[canale] - offset;
1230 imposta_il_trimmer_del_bias(&detector_Trimmer_bias[canale].coarse_pos, discrepanza, trimmer_bias_coarse_step_actual[canale], trimmer_bias_fine_step_actual[canale]);
1234 offset = correzione_misura_ADC(indice_Vbias, offset);
1235 discrepanza = -tensione_target_attenuata[canale] - offset;
1237 imposta_il_trimmer_del_bias(&detector_Trimmer_bias[canale].coarse_neg, discrepanza, trimmer_bias_coarse_step_actual[canale], trimmer_bias_fine_step_actual[canale]);
1238 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CB (canale, trimmer_bias_coarse_neg, detector_Trimmer_bias[canale].coarse_neg);
1239 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CB (canale, trimmer_bias_fine_neg, detector_Trimmer_bias[canale].fine_neg);
1241 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CB (canale, trimmer_bias_coarse_pos, detector_Trimmer_bias[canale].coarse_pos);
1242 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CB (canale, trimmer_bias_fine_pos, detector_Trimmer_bias[canale].fine_pos);
1247while( errore_generale && (troppe_misure<5) ){
1248 errore_generale=
false;
1250 for( canale=0;canale<2;canale++){
1251 if(errore_pos[canale]){
1254 risultato = correzione_misura_ADC(indice_Vbias, risultato);
1255 discrepanza = tensione_target_attenuata[canale] - risultato;
1256 errore_pos[canale]=(discrepanza < -tolleranza || discrepanza > tolleranza);
1257 imposta_il_trimmer_del_bias(&detector_Trimmer_bias[canale].coarse_pos, discrepanza, trimmer_bias_coarse_step_actual[canale], trimmer_bias_fine_step_actual[canale]);
1258 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CB (canale, trimmer_bias_coarse_pos,detector_Trimmer_bias[canale].coarse_pos);
1259 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CB (canale, trimmer_bias_fine_pos, detector_Trimmer_bias[canale].fine_pos);
1261 if (errore_neg[canale]){
1263 risultato = correzione_misura_ADC(indice_Vbias, risultato);
1264 discrepanza = -tensione_target_attenuata[canale] - risultato;
1265 errore_neg[canale]=(discrepanza <= -tolleranza || discrepanza >= tolleranza);
1266 imposta_il_trimmer_del_bias(&detector_Trimmer_bias[canale].coarse_neg, discrepanza, trimmer_bias_coarse_step_actual[canale], trimmer_bias_fine_step_actual[canale]);
1267 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CB (canale, trimmer_bias_coarse_neg, detector_Trimmer_bias[canale].coarse_neg);
1268 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CB (canale, trimmer_bias_fine_neg, detector_Trimmer_bias[canale].fine_neg);
1270 errore_generale |=errore_neg[canale] | errore_pos[canale] ;
1285 for ( canale=0;canale<2;canale++){
1287 risultato = correzione_misura_ADC(indice_Vbias, risultato);
1289 valore_positivo = (int)(((risultato)/1000) & 0xFFFFFFFF);
1294 risultato = correzione_misura_ADC(indice_Vbias, risultato);
1296 valore_negativo = (int)(((risultato)/1000) & 0xFFFFFFFF);
1297 valore_negativo =valore_positivo - valore_negativo;
uint8_t tx_data[8]
Transmission data vector.
uint8_t guadagno_minimo_PGA
void PGA_GAIN_set(char canale, unsigned int guadagno_da_impostare)
It sets the new gain irrespective of the offset.
void imposta_il_trimmer_del_bias(int16_t *Valori_per_i_trimmer, long int discrepanza, int trimmer_bias_coarse_step_singolo, int trimmer_bias_fine_step_singolo)
Trimmer settings for the function instruction_Detector_bias()
void instruction_Detector_bias(void)
The detector bias is set at the value passed from the CAN.
int Detector_Voltage_Bias[]
The bias voltage applied to the detectors.
void instruction_Offset_compensation(void)
Output offset voltage compensation.
#define istruzione_byte_1
#define istruzione_byte_3
#define istruzione_byte_2
#define ADC_Misura_bias_10_att_ch0_p
mux 4
#define istruzione_byte_4_e_scelta_canale
#define ADC_Misura_bias_10_att_ch1_p
mux 2
void Aspetta_tanti_ms(int millisecondi)
The timing function.
volatile int8_t vettore_istruzioni[8]
This is a copy of the received 8 bytes from the CAN.