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

◆ preamplifier_determina_trimmer_therma_comp()

void preamplifier_determina_trimmer_therma_comp ( uint8_t  scheda_su_scheda_giu,
uint8_t  canale,
uint8_t  valore_previsto_trimmer_offset,
uint8_t  solo_recupero_default_comp_se_1 
)

This function determines and set the thermal compensation trimmer.

Parameters
[in]scheda_su_scheda_giu: which board
[in]canale: which channel
[in]valore_previsto_trimmer_offset: the possible value to set in the offset trimmer
[in]solo_recupero_default_comp_se_1: only if the offset trimmer is recovered
Returns
No Parameters, the preamplfier trimmer is set within the function.
770void preamplifier_determina_trimmer_therma_comp(uint8_t scheda_su_scheda_giu,uint8_t canale, \
771 uint8_t valore_previsto_trimmer_offset, uint8_t solo_recupero_default_comp_se_1){
772
773 uint8_t dati_da_leggere_o_scrivere[]={0,0,0,0},trimmer_comp_di_default;
774 int32_t differenza_trimmer_offset, variazione_trimmer_termico, pendenza_deriva_trimmer_offset,pendenza_deriva_trimmer_compensazione;
775
776 if (scheda_su_scheda_giu) scheda_su_scheda_giu=6;
777
778 // Verifico dalla emoria se ci sono calibrazioni
779 EPROM_lettura_M24C32_64(scheda_su_scheda_giu, I2C_mainboard, canale, \
780 Memory_preamplifier_drift_ON_0_OFF_ff <<2 , dati_da_leggere_o_scrivere);
781 if(*(uint32_t *)dati_da_leggere_o_scrivere ==0){
782 //se ci sono calibrazioni le leggo. Si tratta di:
783 // leggere il trimmer offset di base e leggere il trimmer termico di base:
784 // questi 2 fanno parte della stessa locazione di memoria.
785 // leggere la pendenza del trimmer offset
786 // leggere la pendenza del trimmer compensazione
787 //POssiamo valutare il nuovo valore del trimmer termico
788 EPROM_lettura_M24C32_64(scheda_su_scheda_giu, I2C_mainboard, canale, \
789 Memory_preamplifier_trimmers_for_drift <<2 , dati_da_leggere_o_scrivere);
790 // A questo punto serve la differenza tra il trimmer target e quello di base, entrambi offset
791 trimmer_comp_di_default= dati_da_leggere_o_scrivere[trimmer_thermal_compensation];
792 if (solo_recupero_default_comp_se_1){
793 //Se vogliamo solo impostare il solo trimmer compensazione offset di default lo facciamo qui
794 dati_da_leggere_o_scrivere[0] =trimmer_comp_di_default;
795 }else{
796 differenza_trimmer_offset = valore_previsto_trimmer_offset - dati_da_leggere_o_scrivere[trimmer_coarse_offset];
797
798 // questa differenza moltipllicata per la pendenza offset e diviso per la pendenda termica
799 // con segno cambiato ci fornisce la variazione che deve subire il trimmer termico.
800 EPROM_lettura_M24C32_64(scheda_su_scheda_giu, I2C_mainboard, canale, \
801 Memory_preamplifier_offset_slope_trimmer_with_temp <<2 , dati_da_leggere_o_scrivere);
802 pendenza_deriva_trimmer_offset =*(int32_t *)dati_da_leggere_o_scrivere;
803 EPROM_lettura_M24C32_64(scheda_su_scheda_giu, I2C_mainboard, canale, \
804 Memory_preamplifier_compensation_slope_trimmer_with_temp <<2 , dati_da_leggere_o_scrivere);
805 pendenza_deriva_trimmer_compensazione=-(*(int32_t *)dati_da_leggere_o_scrivere); //Segno "-" perch\'e la variazione deve essere opposta.
806 variazione_trimmer_termico = (differenza_trimmer_offset * pendenza_deriva_trimmer_offset) / pendenza_deriva_trimmer_compensazione ;
807 variazione_trimmer_termico += (((differenza_trimmer_offset * pendenza_deriva_trimmer_offset) % pendenza_deriva_trimmer_compensazione )*2 )/(pendenza_deriva_trimmer_compensazione)\
808 + trimmer_comp_di_default ; //Vediamo anche il mezzo bit
809 }
810 // Il nuov valore del trimmer termico sar\'a il risultato precedente sommato a quello di base.
811 if ( variazione_trimmer_termico >0xff){
812 dati_da_leggere_o_scrivere[0] =0xff;
813 }else if ( variazione_trimmer_termico <0 ){
814 dati_da_leggere_o_scrivere[0] =0;
815 }else{
816 dati_da_leggere_o_scrivere[0] = variazione_trimmer_termico & 0xff;
817 }
818 }else{
819 //se non ci sono ccalibrazioni imposto il trimmer termico a 128
820 //Impostiamo il trimmer termico a 128
821 dati_da_leggere_o_scrivere[0]=128;
822 }
823
824 // Questo nuovo valore viene scritto nel trimmer
826 dati_da_leggere_o_scrivere[0], preamplifier_scrivi_il_trimmer );
827}
void EPROM_lettura_M24C32_64(uint8_t scheda_su_scheda_giu_, uint8_t mainboard_postmainboard, uint8_t canale, short indirizzo_memoria, uint8_t *dati_letti)
Read from preamplifier and on-board flashes.
@ Memory_preamplifier_compensation_slope_trimmer_with_temp
thermal compensation trimmer temperature drift
@ Memory_preamplifier_trimmers_for_drift
preamplifier trimmer at default
@ Memory_preamplifier_offset_slope_trimmer_with_temp
offset trimmer temperature drift, this number is in nV
@ Memory_preamplifier_drift_ON_0_OFF_ff
offset drift correction active if zero
void preamplifier_determina_trimmer_therma_comp(uint8_t scheda_su_scheda_giu, uint8_t canale, uint8_t valore_previsto_trimmer_offset, uint8_t solo_recupero_default_comp_se_1)
This function determines and set the thermal compensation trimmer.
#define preamplifier_scrivi_il_trimmer
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_coarse_offset
Definition: Trimmer.h:82
#define trimmer_thermal_compensation
Definition: Trimmer.h:81

Definition at line 770 of file Preamplifier_Offset_Drift_Correcttion.c.