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

◆ instruction_Offset_compensation()

void instruction_Offset_compensation ( void  )

Output offset voltage compensation.

Returns
No Parameters, the actual result is sent to the CAN bus output throught tx_data.
903 #define offset_PGA_1_or_pre_0_out 7 /* This is at byte istruzione_byte_1 */
904 #define offset_different_between_ch 6 /* This is at byte istruzione_byte_1 */
905 #define offset_drift_adjusted_on_offset 5 /* This is at byte istruzione_byte_1 */
906 #define attivazione_CMRR 2 /*if 1 the CMRR is inactive at half scale, if 0 the CMRR is loaded from EPROM and set in the trimmer*/
907 #define JFET_offset_used_0_not_used_1 1 /* If 1 the JFET offset from EPROM is not used as default*/
908 #define JFET_offset_measured_and_stored_in_EPROM 0 /* If 1 the JFET offset is measured and store in EPROM*/
909
910
911
912 //Definizioni delle varibaili di stato
913 #define stato_esci_dalla_misura (int)(-1 )
914 #define stato_compensazione_termica_su_zero_offset 0
915 #define stato_compensazione_in_temperatura_sull_0ffset_secondo_passo 1
916 #define stato_compensazione_in_temperatura_sull_0ffset 2
917 #define stato_senza_compensazione_in_temperatura 3
918 #define stato_misurare_parametro_per_EPROM_terzo_passo 4
919 #define stato_misurare_parametro_per_EPROM_secondo_passo 5
920 #define stato_misurare_parametro_per_EPROM 6
921//struct trimmer_type /*{
922// unsigned char fine_thermal;
923// unsigned char fine_offset;
924// unsigned char coarse_thermal;
925// unsigned char coarse_offset;
926//}*/ Trimmer_offset_preampli[2];
927// int16_t Valori_per_i_trimmer[2]; // Qui verranno inseriti i valori per i trimmer
928 char canale;
929 signed char stato_della_misura;
930 unsigned char dati_letti[4],buffer_vettore_istruzioni_istruzione_byte_0=vettore_istruzioni[istruzione_byte_0];
931 unsigned short errore, errore_temperatura, indirizzo_da_usare;
932 char gain_da_moltiplicare;
933 long int offset, discrepanza[2];
934 int tolleranza=vettore_istruzioni[istruzione_byte_3]*1000; //in microV
935 int attesa, misura_finale[2];
936// char nodo_di_misura_1[]={ADC_ADC_PGA_neg_in_ch0, ADC_ADC_PGA_neg_in_ch1};
937// char nodo_di_misura_2[]={ADC_ADC_PGA_pos_in_ch0, ADC_ADC_PGA_pos_in_ch1};
938 char ii, nodo_di_misura_1[]={ADC_ADC_PGA_neg_out_ch0, ADC_ADC_PGA_neg_out_ch1};
939 char nodo_di_misura_2[]={ADC_ADC_PGA_pos_out_ch0, ADC_ADC_PGA_pos_out_ch1};
940 char chi_aggiustiamo = vettore_istruzioni[istruzione_byte_4_e_scelta_canale] & 0x3;
941// bool errore_canale[]={false,false}, errore_totale=false, saturazione_canale[]={false,false};
942 bool saturazione_canale[]={false,false};
943 int temperatura[2];
944 int coarse_trimmer_step[] = {coarse_Trimmer_offset_step_actual[0] * guadagno_minimo_PGA, coarse_Trimmer_offset_step_actual[1] * guadagno_minimo_PGA} ; //********************************************* coarse_Trimmer_offset_step_actual
945 int fine_trimmer_step[] ={ fine_Trimmer_offset_step_actual[0] * guadagno_minimo_PGA,fine_Trimmer_offset_step_actual[1] * guadagno_minimo_PGA} ; //*********************************************
946// char nodo_di_misura[]={ADC_ADC_PGA_pos_out_ch0, ADC_ADC_PGA_pos_out_ch1};
947
948 //Impostiamo il trimmer del CMRR
949 if( (vettore_istruzioni[istruzione_byte_1] >> attivazione_CMRR ) & 1 ){
950 attiva_il_CMRR( chi_aggiustiamo /*1 per canale 0, 2 per canale 1, 3 per entrambi i canali*/,0);
951 }else{
952 attiva_il_CMRR( chi_aggiustiamo /*1 per canale 0, 2 per canale 1, 3 per entrambi i canali*/,1);
953 }
954
955 if ( (tolleranza << 1) < (fine_trimmer_step[0]+fine_trimmer_step[1])) tolleranza = (fine_trimmer_step[0]+fine_trimmer_step[1]) >> 1;
956// int valore_target_per_ch[canale] =1000*(signed short)( vettore_istruzioni[byte_istr_dati_0] & 0xFF + ( (signed char)(0xFF & vettore_istruzioni[byte_istr_dati_1])*(1<<8) ));
957
958 if( (vettore_istruzioni[istruzione_byte_1] >> offset_PGA_1_or_pre_0_out) &1){
959 //Offset at Pre output
960 nodo_di_misura_1[0]=ADC_ADC_PGA_neg_in_ch0;
961 nodo_di_misura_1[1]= ADC_ADC_PGA_neg_in_ch1;
962 nodo_di_misura_2[0]=ADC_ADC_PGA_pos_in_ch0;
963 nodo_di_misura_2[1]=ADC_ADC_PGA_pos_in_ch1;
964 coarse_trimmer_step[0] = coarse_Trimmer_offset_step_actual[0] ;
965 fine_trimmer_step[1] = coarse_Trimmer_offset_step_actual[1] ;
966 gain_da_moltiplicare= 1;
967 }else{
968 gain_da_moltiplicare= guadagno_minimo_PGA;
969 }
970
971if( (vettore_istruzioni[istruzione_byte_1] >> offset_drift_adjusted_on_offset) & 1){
972 stato_della_misura=stato_compensazione_in_temperatura_sull_0ffset; //Si fanno 2 giri perch\'e si vuole aggiustare la deriva con l'offset
973 }else{
974 stato_della_misura=stato_compensazione_termica_su_zero_offset; //Si fa un solo giro perch\'e si aggiusta la deriva ad offset zero.
975}
976if ( buffer_vettore_istruzioni_istruzione_byte_0 == 0xff) stato_della_misura=stato_senza_compensazione_in_temperatura;
977
978if( (vettore_istruzioni[istruzione_byte_1] >> JFET_offset_measured_and_stored_in_EPROM) & 1) stato_della_misura=stato_misurare_parametro_per_EPROM;
979
980for( canale=0;canale<2;canale++){
981 if( (chi_aggiustiamo >> canale) & 1){
982 if( (vettore_istruzioni[istruzione_byte_1] >> JFET_offset_used_0_not_used_1) & 1) {//Non si usa la EPROM per l'offset del JFET, quindi trimmer a met\'a scala
983 Trimmer_offset_preampli[canale].JFET_Offset=0x80;
984 }else{//Usiamo la EPROM
985// lettura_EPROM(canale, Memory_address_JFET_trimmer_offset , dati_letti);
986 Trimmer_offset_preampli[canale].JFET_Offset=dati_letti[0];
987 Trimmer_offset_preampli[canale].coarse_offset=dati_letti[1];
988 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CA (canale, preampli_corse_offset_trimmer, Trimmer_offset_preampli[canale].coarse_offset);
989 }
990 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CA (canale, preampli_JFET_Offset_trimmer, Trimmer_offset_preampli[canale].JFET_Offset);
991 }
992}
993
994 while (stato_della_misura >=0){
995//***********************************************************************************************************
996 //Vediamo che temperatura eventualmente usare e che range adottare
997 //Lo facciamo per entrambi i canali anche se poi magari agiremo solo su uno
998 if ( buffer_vettore_istruzioni_istruzione_byte_0 <0xff){
999 //Impostaiamo il trimmer per la deriva alla temperatura data o la misuriamo
1000 if ( buffer_vettore_istruzioni_istruzione_byte_0==0){
1001 Misura_della_temperatura(temperatura);
1002 for (ii=0;ii<2;ii++){
1003 temperatura[ii]= temperatura[ii]*3;
1004 temperatura[ii]= temperatura[ii]/1000; //Normalizziamo a quello memorizzato
1005 }}else{
1006 temperatura[0]=buffer_vettore_istruzioni_istruzione_byte_0*3;
1007 temperatura[1]=temperatura[0];
1008 }
1009 //Cerchiamo la temperatura pi\'u prossima per l'impostazione del trimer
1010 for (canale=0; canale<2;canale++){
1011 errore=0xff;
1012 for (ii=0; ii< numero_temperature_impostazione_deriva[canale]; ii++){
1013 errore_temperatura= abs( valori_temperature_impostazione_deriva[canale][ii] - temperatura[canale]);
1014 if (errore_temperatura < errore){
1015 errore=errore_temperatura;
1016 temperatura_di_lavoro[canale]= ii;
1017 }
1018 }
1019 }
1020 }
1021 //Imposttiamo il trimmer alla deriva a media temperatura
1022 for (canale=0; canale<2;canale++){
1023
1024 if( stato_della_misura ==0){// Consideriamo l'offset a zero
1025 if (canale) stato_della_misura=stato_esci_dalla_misura;
1026 if( (chi_aggiustiamo >> canale) & 1){
1027 offset_di_lavoro[canale]= (numero_offset_per_impostazione_deriva[canale] +1 ) >>1 ; //Prendo l'offset a met\'a scala, approssimando all'intero maggiore
1028// indirizzo_da_usare= offset_di_lavoro[canale] * numero_temperature_impostazione_deriva[canale] + temperatura_di_lavoro[canale]+ \
1029// Memory_address_lookup_table_start ;
1030// lettura_EPROM(canale, indirizzo_da_usare , dati_letti);
1031 Trimmer_offset_preampli[canale].coarse_thermal = dati_letti[ indirizzo_da_usare & 3];
1032 }
1033 } // fine stato_della_misura=0
1034
1035 if( stato_della_misura ==stato_compensazione_in_temperatura_sull_0ffset_secondo_passo){ //Aggiustiamo con la temperatura accordata anche sulloffset. Veniamo dallo stato 2
1036 if (canale) stato_della_misura=stato_esci_dalla_misura;
1037 if( (chi_aggiustiamo >> canale) & 1){
1038 errore=0xff;
1039// lettura_EPROM( canale, Memory_address_JFET_trimmer_offset , dati_letti);
1040 for (ii=0; ii< numero_offset_per_impostazione_deriva[canale]; ii++){
1041 errore_temperatura= abs( valori_offset_per_impostazione_deriva[canale][ii] - (signed char)(Trimmer_offset_preampli[canale].coarse_offset - dati_letti[1] ) ) ;
1042 if (errore_temperatura < errore){
1043 errore=errore_temperatura;
1044 offset_di_lavoro[canale]= ii;
1045 }
1046 }
1047// indirizzo_da_usare= offset_di_lavoro[canale] * numero_temperature_impostazione_deriva[canale] + temperatura_di_lavoro[canale]+ \
1048// Memory_address_lookup_table_start ;
1049// lettura_EPROM(canale, indirizzo_da_usare , dati_letti);
1050 Trimmer_offset_preampli[canale].coarse_thermal = dati_letti[ indirizzo_da_usare & 3];
1051 }
1052 } //fine stato_della_misura =stato_compensazione_in_temperatura_sull_0ffset_secondo_passo
1053
1054 if( stato_della_misura ==stato_compensazione_in_temperatura_sull_0ffset){//Vogliamo aggiustare la temperatura sull'offset: primo passaggio , troviamo l'offset
1055 if (canale) stato_della_misura=stato_compensazione_in_temperatura_sull_0ffset_secondo_passo;
1056 if( (chi_aggiustiamo >> canale) & 1){
1057 offset_di_lavoro[canale]= (numero_offset_per_impostazione_deriva[canale] +1 ) >>1 ; //Prendo l'offset a met\'a scala, approssimando all'intero maggiore
1058 //Se stato_della_misura =2 devo valutare quale offset abbiamo , prima di impostare la temperatura. Per cui metto il trimmer a met\'a scala
1059 Trimmer_offset_preampli[canale].coarse_thermal = 0x80;
1060 }
1061 } //fine stato_della_misura =stato_compensazione_in_temperatura_sull_0ffset
1062
1063 if( stato_della_misura ==stato_senza_compensazione_in_temperatura){//Aggiustiamo senza compensazione in temperatura
1064 if (canale) stato_della_misura=stato_esci_dalla_misura;
1065 if( (chi_aggiustiamo >> canale) & 1){
1066 Trimmer_offset_preampli[canale].coarse_thermal = 0x80;
1067 }
1068 } //fine stato_della_misura =stato_senza_compensazione_in_temperatura
1069
1070
1071 if( stato_della_misura ==stato_misurare_parametro_per_EPROM_secondo_passo){//Secondo passo per offset in EPROM: metto il dato eprom in trimmer e l'offset in eprom
1072 if (canale) stato_della_misura=stato_misurare_parametro_per_EPROM_terzo_passo; //Lo stato 4 \'ein fondo perch\'e serve solo per memorizzare l'offset nella eprom
1073 if( (chi_aggiustiamo >> canale) & 1){
1074 Trimmer_offset_preampli[canale].JFET_Offset=0x80 +\
1075 (( (128 - Trimmer_offset_preampli[canale].coarse_offset) * JFET_offset_conversione) >> 7) ;
1076 Trimmer_offset_preampli[canale].coarse_offset=0x80;
1077 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CA (canale, preampli_JFET_Offset_trimmer, Trimmer_offset_preampli[canale].JFET_Offset);
1078 }
1079 } //fine stato_della_misura =stato_misurare_parametro_per_EPROM_secondo_passo
1080
1081 if( stato_della_misura ==stato_misurare_parametro_per_EPROM){//Primo passo per offset in EPROM: misuro a offset 0 con ERPOM a met\'a scala
1082 if (canale) stato_della_misura=stato_misurare_parametro_per_EPROM_secondo_passo;
1083 if( (chi_aggiustiamo >> canale) & 1){
1084 Trimmer_offset_preampli[canale].coarse_thermal = 0x80;
1085 Trimmer_offset_preampli[canale].JFET_Offset=0x80;
1086 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CA (canale, preampli_JFET_Offset_trimmer, Trimmer_offset_preampli[canale].JFET_Offset);
1089 }
1090 } //fine stato_della_misura =stato_misurare_parametro_per_EPROM
1091
1092// if ( buffer_vettore_istruzioni_istruzione_byte_0 <0xff){
1093// if ( (stato_della_misura ==0) || (stato_della_misura==2) ){
1094// //Se stato della misura =0 vogliamo stare a met\'a con l'offset;
1095// //se stato della misura =2 misuriamo a met\'a scala per la temperatura
1096// offset_di_lavoro[canale]= (numero_offset_per_impostazione_deriva[canale] +1 ) >>1 ; //Prendo l'offset a met\'a scala, approssimando all'intero maggiore
1097//
1098// if(stato_della_misura==2){
1099// //Se stato_della_misura =2 devo valutare quale offset abbiamo , prima di impostare la temperatura. Per cui metto il trimmer a met\'a scala
1100// Trimmer_offset_preampli[canale].coarse_thermal = 0x80;
1101// }else{
1102// //Se stato_della_misura \'e zero estraggo dalla memoria il valore da mettere nel trimmer della temperatura
1103//// indirizzo_da_usare= offset_di_lavoro[canale] * numero_temperature_impostazione_deriva[canale] + temperatura_di_lavoro[canale]+ \
1104//// Memory_address_lookup_table_start ;
1105//// lettura_EPROM(canale, indirizzo_da_usare , dati_letti);
1106//// Trimmer_offset_preampli[canale].coarse_thermal = dati_letti[ indirizzo_da_usare & 3];
1107// }
1108//
1109// if (canale) stato_della_misura--;
1110// }else{//Troviamo la polarizzazione pi\'u vicina
1111//
1112// errore=0xff;
1113// for (ii=0; ii< numero_offset_per_impostazione_deriva[canale]; ii++){
1114// errore_temperatura= abs( valori_offset_per_impostazione_deriva[canale][ii] - Trimmer_offset_preampli[canale].coarse_offset) ;
1115// if (errore_temperatura < errore){
1116// errore=errore_temperatura;
1117// offset_di_lavoro[canale]= ii;
1118// }
1119// }
1120// indirizzo_da_usare= offset_di_lavoro[canale] * numero_temperature_impostazione_deriva[canale] + temperatura_di_lavoro[canale]+ \
1121// Memory_address_lookup_table_start ;
1122// lettura_EPROM(canale, indirizzo_da_usare , dati_letti);
1123// Trimmer_offset_preampli[canale].coarse_thermal = dati_letti[ indirizzo_da_usare & 3];
1124// if (canale) stato_della_misura = -1;
1125// }
1126//// indirizzo_da_usare= offset_di_lavoro[canale] * numero_temperature_impostazione_deriva[canale] + temperatura_di_lavoro[canale]+ \
1127//// Memory_address_lookup_table_start ;
1128//// lettura_EPROM(canale, indirizzo_da_usare , dati_letti);
1129//// Trimmer_offset_preampli[canale].coarse_thermal = dati_letti[ indirizzo_da_usare & 3];
1130// }else{
1131// Trimmer_offset_preampli[canale].coarse_thermal=0x80;
1132// if (canale) stato_della_misura = -1;
1133// }
1134 if( (chi_aggiustiamo >> canale) & 1){
1135 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CA (canale, preampli_coarse_thermal_trimmer, Trimmer_offset_preampli[canale].coarse_thermal );
1136// Trimmer_offset_preampli[canale].fine_thermal=0x80;
1137// Imposta_canale_del_trimmer_ennesimo_al_valore_I2CA (canale, preampli_fine_thermal_trimmer, Trimmer_offset_preampli[canale].fine_thermal);
1138 //Ora compensiamo l'offset per il contributo impostato dal trimmer
1139 Trimmer_offset_preampli[canale].coarse_offset = ((Trimmer_offset_preampli[canale].coarse_offset + Trimmer_offset_preampli[canale].coarse_thermal - 128)*coarse_Trimmer_drift_offset_ratio_by_2e7) >> 7 ;
1140 if( Trimmer_offset_preampli[canale].coarse_offset > 255) Trimmer_offset_preampli[canale].coarse_offset=255;
1141 if( Trimmer_offset_preampli[canale].coarse_offset <0) Trimmer_offset_preampli[canale].coarse_offset=0;
1142 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CA (canale, preampli_corse_offset_trimmer, Trimmer_offset_preampli[canale].coarse_offset);
1143 }
1144 }
1145
1146
1147//***********************************************************************************************************
1148
1149 if( ((vettore_istruzioni[istruzione_byte_1] >> offset_different_between_ch) &1)==0 ) {
1150 //Offset is get from the first 2 bytes of the isntruction, otherwise is already given elsewhere
1153 valore_target_per_offset[0] = 1000*( *(signed short *) &vettore_istruzioni[byte_istr_dati_0]);
1154 valore_target_per_offset[1]=valore_target_per_offset[0];
1155 }
1156 int valore_target_per_ch[]={(valore_target_per_offset[0] *(int)gain_da_moltiplicare )/ (int)PGA_Gain_V_su_V[0], (valore_target_per_offset[1] *(int)gain_da_moltiplicare)/ (int)PGA_Gain_V_su_V[1]};
1158 if (attesa == 0) attesa=1000;
1159 if( attesa > 10000) attesa =10000;
1160
1161 //Set the PGA Gain to 1 and retain the actual
1162 char PGA_Gain_V_su_V_old[]={PGA_Gain_V_su_V[0], PGA_Gain_V_su_V[1]}; //*********************************************
1163 PGA_GAIN_set(3, 1);
1164
1165 Aspetta_tanti_ms(attesa);
1166
1167 for( canale=0;canale<2;canale++){
1168 if( (chi_aggiustiamo >> canale) & 1){
1169// offset=lettura_ADC( nodo_di_misura_1[canale]) ; //Il <<1 \'e per renderlo differenziale
1170 risultato=correzione_misura_ADC(coeffcienti_misura_ADC_nodi[nodo_di_misura_1[canale]], offset);
1171 if ( (risultato >= saturazione_positiva) || (risultato <= saturazione_negativa) ){
1172 //Dobbiamo iniziare con SAR
1173 saturazione_canale[canale]=true;
1174 }
1175 }
1176 }
1177
1178aggiustamento_SAR(saturazione_canale, attesa, nodo_di_misura_1); // Effettivo solo se saturazione_canale \'e true
1179
1180// Aspetta_tanti_ms(attesa);
1181//LEGGO L'USCITA Neg
1182 for( canale=0;canale<2;canale++){
1183 if( (chi_aggiustiamo >> canale) & 1){
1184// offset=lettura_ADC( nodo_di_misura_1[canale]) - lettura_ADC( nodo_di_misura_2[canale]); //Il <<1 \'e per renderlo differenziale
1185 offset=correzione_misura_ADC(coeffcienti_misura_ADC_nodi[nodo_di_misura_1[canale]], offset);
1186 discrepanza[canale] = offset - valore_target_per_ch[canale] ;
1187
1188//HO L'OFFSET
1189
1190 Trova_valori_trimmer_per_offset_preamplificatore(discrepanza[canale], &Trimmer_offset_preampli[canale], coarse_trimmer_step[canale], fine_trimmer_step[canale]);
1191
1192 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CA (canale, preampli_corse_offset_trimmer, Trimmer_offset_preampli[canale].coarse_offset);
1193 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CA (canale, preampli_fine_offset_trimmer, Trimmer_offset_preampli[canale].fine_offset);
1194 }
1195 }
1196 Aspetta_tanti_ms(attesa);
1197
1198
1199// offset_Adjust_core( chi_aggiustiamo, valore_target_per_ch, nodo_di_misura_1, nodo_di_misura_2, \
1200// tolleranza, coarse_trimmer_step, fine_trimmer_step, attesa, misura_finale);
1201
1202// Abbassa_chip_selector_multiplexer();
1203
1204 PGA_Gain_V_su_V[0]=PGA_Gain_V_su_V_old[0]; //*********************************************
1205 PGA_Gain_V_su_V[1]=PGA_Gain_V_su_V_old[1];
1206 PGA_GAIN_set(1, PGA_Gain_V_su_V[0]);
1207 PGA_GAIN_set(2, PGA_Gain_V_su_V[1]);
1208
1209 for( canale=0;canale<2;canale++){
1210 if( (chi_aggiustiamo >> canale) & 1){
1211// int offset=lettura_ADC( nodo_di_misura_1[canale]) - lettura_ADC( nodo_di_misura_2[canale]); //Il <<1 \'e per renderlo differenziale
1212 offset=correzione_misura_ADC(coeffcienti_misura_ADC_nodi[nodo_di_misura_1[canale]], offset) * (int)guadagno_minimo_PGA / (int)PGA_Gain_V_su_V[canale] ;
1213 int correzione = ( misura_finale[canale] - offset ) / (( (fine_trimmer_step[0]+fine_trimmer_step[1])>>1) ) ;
1214 Trimmer_offset_preampli[canale].fine_offset= Trimmer_offset_preampli[canale].fine_offset - correzione;
1215 if (Trimmer_offset_preampli[canale].fine_offset >255) Trimmer_offset_preampli[canale].fine_offset=255;
1216 if( Trimmer_offset_preampli[canale].fine_offset <0 ) Trimmer_offset_preampli[canale].fine_offset=0;
1217 Imposta_canale_del_trimmer_ennesimo_al_valore_I2CA (canale, preampli_fine_offset_trimmer, Trimmer_offset_preampli[canale].fine_offset);
1218 }
1219 }
1220
1221
1222 Aspetta_tanti_ms(attesa);
1223
1224for(canale=0;canale<2;canale++){
1225// offset=lettura_ADC( nodo_di_misura_1[canale]) - lettura_ADC( nodo_di_misura_2[canale]); //Il <<1 \'e per renderlo differenziale
1226 misura_finale[canale]=correzione_misura_ADC(coeffcienti_misura_ADC_nodi[nodo_di_misura_1[canale]], offset);
1227}
1228
1229misura_finale[0] =(misura_finale[0] / 1000);
1230tx_data[byte_istr_dati_0] = (unsigned int)(misura_finale[0]) & 0xFF ;
1231tx_data[byte_istr_dati_1] = (( (unsigned int)(misura_finale[0]) ) >> 8 ) & 0xFF ;
1232misura_finale[1] =(misura_finale[1] / 1000);
1233tx_data[byte_istr_dati_2] = (unsigned int)(misura_finale[1]) & 0xFF ;
1234tx_data[byte_istr_dati_3] = (( (unsigned int)(misura_finale[1]) ) >> 8 ) & 0xFF ;
1235 //Set the PGA Gain to 1 and retain the actual
1236 //PGA gain is restablished
1237 if( stato_della_misura ==stato_misurare_parametro_per_EPROM_terzo_passo){////Terzo e ultimo passo per offset in EPROM: metto offset in eprom in trimmer e l'offset in eprom
1238 stato_della_misura=stato_esci_dalla_misura;
1239 for(canale=0;canale<2;canale++){
1240 if( (chi_aggiustiamo >> canale) & 1){
1241// int dato_da_scrivere= Trimmer_offset_preampli[canale].JFET_Offset + \
1242// (Trimmer_offset_preampli[canale].coarse_offset <<8);
1243// scrivi_mem_EPROM( Memory_address_JFET_trimmer_offset , dato_da_scrivere,canale);
1244 }
1245 }
1246 } //fine stato_della_misura =4
1247}
1248}
uint8_t tx_data[8]
Transmission data vector.
Definition: Can.c:321
uint8_t guadagno_minimo_PGA
Definition: DAC_PGA.c:88
void PGA_GAIN_set(char canale, unsigned int guadagno_da_impostare)
It sets the new gain irrespective of the offset.
Definition: DAC_PGA.c:443
void instruction_Offset_compensation(void)
Output offset voltage compensation.
Definition: Istruzioni.c:902
void aggiustamento_SAR(bool *saturazione_canale, int attesa, char *nodo_di_misura_1)
When the preamplifier output is saturated we start with the standard SAR.
Definition: Istruzioni.c:1262
#define istruzione_byte_1
Definition: Istruzioni.h:21
#define istruzione_byte_3
Definition: Istruzioni.h:23
#define istruzione_byte_2
Definition: Istruzioni.h:22
#define byte_istr_dati_1
Definition: Istruzioni.h:26
#define byte_istr_dati_2
Definition: Istruzioni.h:27
#define byte_istr_dati_0
Definition: Istruzioni.h:25
#define byte_istr_dati_3
Definition: Istruzioni.h:28
#define istruzione_byte_4_e_scelta_canale
Definition: Istruzioni.h:24
#define istruzione_byte_0
Definition: Istruzioni.h:20
void Aspetta_tanti_ms(int millisecondi)
The timing function.
Definition: Timer.c:52
volatile int8_t vettore_istruzioni[8]
This is a copy of the received 8 bytes from the CAN.

Definition at line 902 of file Istruzioni.c.