CROSS Technical Documentation User Manual and Technical Doc.
INFN Milano Bicocca
Loading...
Searching...
No Matches
Multiplexer_strutture_funzioni_definizioni.c
Go to the documentation of this file.
1
2
3
4#include "tutti_gli_header.h"
5
6//DOCUMENTAZIONE DOXYGEN
7 /// \file
8
9 /*! \page Multiplexer_strutture_funzioni_definizioni_page Multiplexer_strutture_funzioni_definizioni
10 \brief <span style="color:red;"> <b> ADC/Mux ADG1408 description page </b> </span>
11
12*\tableofcontents
13
14*\b SUMMARY:
15*\arg \ref user_use_of_ADC_on_mainboard
16*\arg \ref user_use_of_ADC_on_postmainboard
17<hr width="75%" size="5" align="center">
18
19\n This chip is the \b ADG1408 (<a href="./File_pdf/ADG1408.pdf" target=_blank><b>ADG1408 datasheet</b></a>).
202 \b ADG1408 are on the mainobard and 8 are present on the postmainboard.
21
22*\section user_use_of_ADC_on_mainboard User use of the ADC/Mux on mainboard
23<hr width="75%" size="5" align="center">
24\n Thre are 2 ADG1408 chips on the board whose scheme is in figure \ref Figure_Analog_mux. Each one allows to multiplex 8 analog
25inputs into one ouput. To select the input 4 signals are needed. The chip select that, for this chip, is active high and 3 parallel
26lines that codify the selected inpt. Once this is done, the output is available to be measured from the ADC. The series resistance
27of the chip is smaller than 10 &Omega; and 100 &Omega; are connected in series to the ouput for protecion.
28\n To manage the chip there is only one function: Analog_mux_line_to_select_deselect( uint8_t scheda_su_scheda_giu, uint8_t line_to_select, uint8_t select_1_deselect_0)
29that is called 2 times in measurement. First it needs to activate the output and the parameter \b select_1_deselect_0 is 1. \b line_to_select is the line to select
30according to the following list, where the numbers on the left are the code to pass, and the definition on the right
31of the numbers are their equivalent aliases:
32<ul>
33<li> The first analog mux has connected the following nodes, whose adrresses are on the left (the starting offset
34is defined as #node_voltage_Analog_Mux_0_offset): </li>
35 <ol start="32">
36 <li> #node_voltage_Analog_Mux_meas_bias_pos_ch0 </li>
37 <li> #node_voltage_Analog_Mux_meas_bias_neg_ch0 </li>
38 <li> #node_voltage_Analog_Mux_meas_bias_pos_ch1 </li>
39 <li> #node_voltage_Analog_Mux_meas_bias_neg_ch1 </li>
40 <li> #node_voltage_Analog_Mux_meas_bias_pos_ch2 </li>
41 <li> #node_voltage_Analog_Mux_meas_bias_neg_ch2 </li>
42 <li> #node_voltage_Analog_Mux_meas_bias_pos_ch3 </li>
43 <li> #node_voltage_Analog_Mux_meas_bias_neg_ch3 </li>
44 </ol>
45 <li> The second analog mux has connected the following nodes, whose adrresses are on the left (the starting offset
46 is defined at #node_voltage_Analog_Mux_1_offset): </li>
47 <ol start="40">
48 <li> #node_voltage_Analog_Mux_meas_bias_pos_ch4 </li>
49 <li> #node_voltage_Analog_Mux_meas_bias_neg_ch4 </li>
50 <li> #node_voltage_Analog_Mux_meas_bias_pos_ch5 </li>
51 <li> #node_voltage_Analog_Mux_meas_bias_neg_ch5 </li>
52 <li> #node_voltage_Analog_Mux_meas_input_bias_pos </li>
53 <li> #node_voltage_Analog_Mux_meas_input_bias_neg </li>
54 <li> #node_voltage_Analog_Mux_meas_none </li>
55 <li> #node_voltage_Analog_Mux_meas_10k_to_gnd </li>
56 </ol>
57</ul>
58
59
60\note Mux_1 output is routed at pin 15 and Mux_2 output is routed at pin 16 of the 50 pins header output
61connector of the \b mainboard \b A. Note that the 2 nodes is better if read with respect to the local ground,
62pins 13, 14, 17 and 18 of the same connector.
63
64\n Once the measurement is done the function is called again with the same parameters, except
65\b select_1_deselect_0 that must be 0 this time.
66\n Here an example of use of Analog_mux_line_to_select_deselect():
67
68<span style="color:orange;"> <I>
69\code {.c}
70 function_which_must_use_the_ADC( scheda_su_acheda_giu, node_to_measure){
71
72 Analog_mux_line_to_select_deselect( scheda_su_acheda_giu, node_to_measure, 1); //the node is enabled to the output
73
74 //Measure with the ADC
75
76 Analog_mux_line_to_select_deselect( scheda_su_acheda_giu, node_to_measure, 0); //the node is de-selected
77 }
78\endcode
79</I> </span>
80
81\sa The analog mux's on mainboard are managed by the I2C to parallel chips: \ref I2C_to_parallel
82
83*\anchor Figure_Analog_mux
84\image html ADG408_mux.png "Figure_Analog_mux 1: Analog mux scheme" width=20%
85\image latex ADG408_mux.png "Figure_Analog_mux 1: Analog mux scheme" width=20%
86
87*\section user_use_of_ADC_on_postmainboard User use of the ADC/Mux on postmainboard
88<hr width="75%" size="5" align="center">
89
90\n Postmainboard has 2 ADCs dedicated each to one of the 2 connected mainboards. Nodes to measure are routed by 2
91groups of 4 analog multiplexers. In this case chip select lines and selection lines are all provided by the microcontroller
92and some functions are available:
93
94- Configure_Reset_selection_port_analog_mux_ResIn_ADC_buffer(void);
95- Analog_mux_line_to_select_deselect_for_postmainboard( uint8_t scheda_su_scheda_giu, uint8_t line_to_select, uint8_t select_1_deselect_0 )
96
97Configure_Reset_selection_port_analog_mux_ResIn_ADC_buffer() is called at startup to set the pins and set the mux's in idle mode.
98It alsosets the pins for the switch put in series to the resistors at the ADC buffer input. The aim of this switch is to set this equivalent impedance to infinite value
99when the node voltage to measure is connected. Due to the fact that an attenuation is needed to avoid the rails the switches are always maintained in the closed state.
100\n Analog_mux_line_to_select_deselect_for_postmainboard(), needs to know the mainboard to manage by \b scheda_su_scheda_giu, the node
101to measure by \b line_to_select and the setting of the path of the node to the ADC and is disconnession, by \b select_1_deselect_0.
102\b line_to_select are those listed at \ref lista_nodi.
103\n On the postamainboard there are 8 analog multiplexers, 2 groups of 4 for each connected mainboard.
104The multiplexers have simmetrical connections. To individuate an input line the syntax is:
105bits 0 to 3 are common to all the MUXs and select one of the input analog lines; bits 4 to 5 are the
106address for the chips select for the 2 groups of 4 MUXs.
107The selection of the MUX group is trhough the board_up_down.
108To select the lines a vector is dedicated to this. It is #ADC_node_map[]:
109
110*\snippet{lineno} Gpio.c vect_ADC_node_map
111
112
113 The codes for mamnaging the mux are:
114 - \ref Multiplexer_strutture_funzioni_definizioni.c
115 - \ref Multiplexer_strutture_funzioni_definizioni.h
116<!-- pappa -->
117*/
118
119
120
121 //INIZIO CROSS
122
123
124/*! \brief Selection of the line to mesure with the analog MUX of the mainboard, driven by the I2C->parallel mux
125
126*\param[in] scheda_su_scheda_giu The board to consider
127*\param[in] line_to_select the line to be measured
128*\param[in] select_1_deselect_0 Select or deselect the output, send the same pattern in both cases in line_to_select
129*\return No Parameters
130\callgraph
131
132*\snippet{lineno} Multiplexer_strutture_funzioni_definizioni.c fun_Analog_mux_line_to_select
133*/
134//! <!-- [fun_Analog_mux_line_to_select] -->
135void Analog_mux_line_to_select_deselect ( uint8_t scheda_su_scheda_giu, uint8_t line_to_select, uint8_t select_1_deselect_0 ){
136 uint8_t select_PCA;
137 uint8_t seleziona_lo_analog_mux, de_seleziona_lo_analog_mux,the_3_selction_lines,pattern_uscita_solo_linee;
138// if (line_to_select < node_voltage_Analog_Mux_1_offset ){
139// //Seleziono il primo mux
140// line_to_select= (line_to_select - node_voltage_Analog_Mux_0_offset );
141// }else{
142// //seleziono il secondo mux
143// line_to_select= line_to_select - node_voltage_Analog_Mux_1_offset ;
144// }
145 line_to_select= (line_to_select - node_voltage_Analog_Mux_0_offset ); //line_to_select ha il quarto bit a 0
146 //se la linea \'e nel primo mux, altrimenti il 4 bit \'e 1
147
148 //Selezionare il chip I2C parallelo dal bit3 di line_to_select
149 the_3_selction_lines= line_to_select & Analog_Mux_maschera_quali_linee ;//le prime 3 linee indicano quale delle
150 //8 uscite va selezionata
151 the_3_selction_lines = the_3_selction_lines << posizione_del_pattern_delle_linee ;//nel chip I2C-->parallel
152 //le 3 linee stanno alla "posizione_del_pattern_delle_linee"
153 pattern_uscita_solo_linee = the_3_selction_lines | I2C_to_Parallel_maschera_linee_ucita;
154
155 if (line_to_select & Analog_Mux_maschera_quale_chip){//test sul mux da usare
156 //Selezionimao il secondo mux
157 select_PCA = I2C_to_Parallel_name_2;
158 seleziona_lo_analog_mux = 0x8f | the_3_selction_lines ;//chip select of second mux is MSb of PCA2 (enabled if 1)
159 de_seleziona_lo_analog_mux =I2C_to_Parallel_2_ini_set;
160 }else{
161 //Selezionimao il primo mux
162 select_PCA = I2C_to_Parallel_name_3;
163 seleziona_lo_analog_mux = 0xff; //chip select of first mux is bit 2 of PCA3 (enabled if 1)
164 de_seleziona_lo_analog_mux = I2C_to_Parallel_3_ini_set;
165 }
166
167 if (select_1_deselect_0){ //definire se selezionare l'uscita o deselezionare l'uscita
168 //First we write the line to select, line 5 to 7 of PCA2
170 pattern_uscita_solo_linee );
171// I2C_to_Parallel_2_ini_set & the_3_selction_lines );
172 //And now enable the analog mux, either mux 1 or mux 2 chip select
173 I2C_to_Parallel_set_PCA9554_outputs_values( scheda_su_scheda_giu, select_PCA, seleziona_lo_analog_mux );
174 //Selezionare la linea di uscita
175 } else{
176 //de-Selezioniamo la linea di uscita e gli analog mux
177 I2C_to_Parallel_set_PCA9554_outputs_values( scheda_su_scheda_giu, select_PCA, de_seleziona_lo_analog_mux );
178 }
179}
180//! <!-- [fun_Analog_mux_line_to_select] -->
181
182
183/*! \brief Selection of the line to measure with the analog MUX's of the postmainboard, directely driven by the microprocessor port
184
185*\param[in] scheda_su_scheda_giu The board to consider
186*\param[in] line_to_select the line to be measured
187*\param[in] select_1_deselect_0 Select or deselect the output, send the same pattern in both cases in line_to_select
188*\return No Parameters
189\callgraph
190
191*\snippet{lineno} Multiplexer_strutture_funzioni_definizioni.c fun_Analog_mux_line_to_select_deselect_for_postmainboard
192*/
193//! <!-- [fun_Analog_mux_line_to_select_deselect_for_postmainboard] -->
194void Analog_mux_line_to_select_deselect_for_postmainboard ( uint8_t scheda_su_scheda_giu, uint8_t line_to_select, uint8_t select_1_deselect_0 ){
195 #define offset_per_board_down 32
196 uint8_t offset_per_mux=0,actual_line_to_select,analog_node,analog_mux;
199
200// uint8_t seleziona_lo_analog_mux, de_seleziona_lo_analog_mux,the_3_selction_lines,pattern_uscita_solo_linee;
201 //Sono invertiti gli indici dei 2 gruppi da 4 perch\'e il down va da 4 a 8.
202
203 if (scheda_su_scheda_giu==0) offset_per_mux = offset_per_board_down; //servono i mux da 4 a 7
204
205 actual_line_to_select= ADC_node_map[line_to_select] + offset_per_mux; //La linea analogica che considera una delle 8 nel mux,
206 //i primi 3 bit, ed il mux, i successivi 3 bit.
207
208 analog_node = actual_line_to_select & 7; //la linea analogica da selezionare nel mux
209 analog_mux= (actual_line_to_select >> 3) & 7; //il mux da selezionare
210
211 if(select_1_deselect_0){//Abilitiamo l'uscita
212 //scriviamo il numero della linea da selezionare
213 GPIO_PinWrite(Mux_select_word_0.porta_num, Mux_select_word_0.pin_num, ((analog_node>>0) & 1));
214 GPIO_PinWrite(Mux_select_word_1.porta_num, Mux_select_word_1.pin_num, ((analog_node>>1) & 1));
215 GPIO_PinWrite(Mux_select_word_2.porta_num, Mux_select_word_2.pin_num, ((analog_node>>2) & 1));
216
217 //ed ora abilitiamo il mux
218 GPIO_PinWrite(mux_in_gioco[analog_mux].porta_num, mux_in_gioco[analog_mux].pin_num, 1);
219 }else{//Disabilitiamo il mux
220 GPIO_PinWrite(mux_in_gioco[analog_mux].porta_num, mux_in_gioco[analog_mux].pin_num, 0);
221 }
222
223}
224//! <!-- [fun_Analog_mux_line_to_select_deselect_for_postmainboard] -->
225
226 //FINE CROSS
227
228
229/*! \brief Once the Mux is selected, one of its 8 input analogue lines is routed to its output.
230
231*\param[in] aa The parameter is a number between 0 and 7: the input selected line to be routed to the output.
232*\return No Parameters
233
234
235*\snippetlineno Multiplexer_strutture_funzioni_definizioni.c fun_Line_select_in_the_mux
236*/
237//! <!-- [fun_Line_select_in_the_mux] -->
238// void Line_select_in_the_mux( unsigned char aa){
239// char ii;
240// for( ii =0; ii<3; ii++){
241// GPIO_PinWrite(porta_1, Sel_Par_Interruttori_1 - ii , (((aa) >> ii ) & 1) );
242// }
243// GPIO_PinWrite(1, Sel_Par_Interruttori_3 , ((aa >> 2 ) & 1));
244// GPIO_PinWrite(1, Sel_Par_Interruttori_2 , ((aa >> 1 ) & 1));
245// GPIO_PinWrite(1, Sel_Par_Interruttori_1 , ((aa >> 0 ) & 1) );
246//}
247//! <!-- [fun_Line_select_in_the_mux] -->
248
249
250/*! \brief Here the Mux, one over 4, to be used is selected.
251
252*\param[in] aa The parameter is a number between 1 and 4: the selected Mux. The value of zero as input parameter de-select all the mux.
253*\return No Parameters
254
255
256*\snippetlineno Multiplexer_strutture_funzioni_definizioni.c fun_ATTIVA_CHIP_SELECTOR_MULTIPLEXER
257*/
258//! <!-- [fun_ATTIVA_CHIP_SELECTOR_MULTIPLEXER] -->
259// void ATTIVA_CHIP_SELECTOR_MULTIPLEXER (unsigned char aa)
260//{
261// char uno=0, /*due=0,tre=0,quattro=0,*/ ii;
262// for( ii=0;ii<4;ii++){
263// uno=0;
264// if ( aa==(ii+1)) uno=1;
265// GPIO_PinWrite(porta_1, Chip_Sel_Multiplexer_1 - ii ,uno);
266// }
267//}
268//! <!-- [fun_ATTIVA_CHIP_SELECTOR_MULTIPLEXER] -->
269
270 /****************************************************************************
271 FINE Funzioni di Gianlu
272 *****************************************************************************/
273
274 /****************************************************************************
275 Funzioni del MULTIPLEXER 1
276 *****************************************************************************/
277//void ATTIVA_CHIP_SELECTOR_MULTIPLEXER_1 (void)
278//{
279// GPIO_PinWrite(1, Chip_Sel_Multiplexer_4 ,0);
280// GPIO_PinWrite(1, Chip_Sel_Multiplexer_3 ,0);
281// GPIO_PinWrite(1, Chip_Sel_Multiplexer_2 ,0);
282// GPIO_PinWrite(1, Chip_Sel_Multiplexer_1 ,1);
283//}
284
285//void Attiva_linea_AN1 (void)
286//{
287// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,0);
288// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
289// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
290//}
291
292//void Attiva_linea_AN2 (void)
293//{
294// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,0);
295// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
296// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
297//}
298
299//void Attiva_linea_AN3 (void)
300//{
301// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,0);
302// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
303// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
304//}
305
306//void Attiva_linea_AN4 (void)
307//{
308// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,0);
309// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
310// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
311//}
312
313//void Attiva_linea_AN5 (void)
314//{
315// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
316// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
317// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
318//}
319
320//void Attiva_linea_CC2 (void)
321//{
322// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
323// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
324// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
325//}
326
327//void Attiva_linea_DD2 (void)
328//{
329// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
330// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
331// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
332//}
333
334//void Attiva_linea_EE2 (void)
335//{
336// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
337// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
338// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
339//}
340
341
342// La struttura multi_1 viene controllata con multipl_1
343//struttura_multiplexer_1 Multiplexer_1= {
344// ATTIVA_CHIP_SELECTOR_MULTIPLEXER_1,
345// Attiva_linea_AN1,
346// Attiva_linea_AN2,
347// Attiva_linea_AN3,
348// Attiva_linea_AN4,
349// Attiva_linea_AN5,
350// Attiva_linea_CC2,
351// Attiva_linea_DD2,
352// Attiva_linea_EE2
353//};
354
355// struttura_multiplexer_1 *MULTIPLEXER_1= &Multiplexer_1; // Viene creato un puntatore a multipl_1
356
357
358
359
360/*****************************************************************************
361 *****************************************************************************
362 MULTIPLEXER 2
363 *****************************************************************************
364 *****************************************************************************/
365// typedef struct multiplexer_2 {
366
367// void (*ATTIVA_CHIP_SELECTOR_MULTIPLEXER_2) (void); ///< Puntatore a \ref ATTIVA_CHIP_SELECTOR_MULTIPLEXER_2
368// void (*Attiva_linea_MM1) (void); ///< Puntatore a \ref Attiva_linea_MM1
369// void (*Attiva_linea_MM2) (void); ///< Puntatore a \ref Attiva_linea_MM2
370// void (*Attiva_linea_NN1) (void); ///< Puntatore a \ref Attiva_linea_NN1
371// void (*Attiva_linea_NN2) (void); ///< Puntatore a \ref Attiva_linea_NN2
372// void (*Attiva_linea_TT1) (void); ///< Puntatore a \ref Attiva_linea_TT1
373// void (*Attiva_linea_TT2) (void); ///< Puntatore a \ref Attiva_linea_TT2
374// void (*Attiva_linea_HH2) (void); ///< Puntatore a \ref Attiva_linea_HH2
375// void (*Attiva_linea_LL2) (void); ///< Puntatore a \ref Attiva_linea_LL2
376//} const struttura_multiplexer_2;
377
378 /****************************************************************************
379 Funzioni del MULTIPLEXER 2
380 *****************************************************************************/
381//void ATTIVA_CHIP_SELECTOR_MULTIPLEXER_2 (void)
382//{
383// GPIO_PinWrite(1, Chip_Sel_Multiplexer_4 ,0);
384// GPIO_PinWrite(1, Chip_Sel_Multiplexer_3 ,0);
385// GPIO_PinWrite(1, Chip_Sel_Multiplexer_2 ,1);
386// GPIO_PinWrite(1, Chip_Sel_Multiplexer_1 ,0);
387//}
388//
389//void Attiva_linea_MM1 (void)
390//{
391// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,0);
392// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
393// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
394//}
395
396//void Attiva_linea_MM2 (void)
397//{
398// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,0);
399// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
400// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
401//}
402
403//void Attiva_linea_NN1 (void)
404//{
405// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,0);
406// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
407// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
408//}
409
410//void Attiva_linea_NN2 (void)
411//{
412// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,0);
413// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
414// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
415//}
416
417//void Attiva_linea_TT1 (void)
418//{
419// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
420// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
421// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
422//}
423
424//void Attiva_linea_TT2 (void)
425//{
426// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
427// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
428// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
429//}
430
431//void Attiva_linea_HH2 (void)
432//{
433// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
434// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
435// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
436//}
437
438//void Attiva_linea_LL2 (void)
439//{
440// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
441// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
442// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
443//}
444
445
446// La struttura multi_2 viene controllata con multipl_2
447//struttura_multiplexer_2 Multiplexer_2= {
448// ATTIVA_CHIP_SELECTOR_MULTIPLEXER_2,
449// Attiva_linea_MM1,
450// Attiva_linea_MM2,
451// Attiva_linea_NN1,
452// Attiva_linea_NN2,
453// Attiva_linea_TT1,
454// Attiva_linea_TT2,
455// Attiva_linea_HH2,
456// Attiva_linea_LL2
457//};
458
459// struttura_multiplexer_2 *MULTIPLEXER_2= &Multiplexer_2; // Viene creato un puntatore a multipl_2
460
461
462
463
464/*****************************************************************************
465 *****************************************************************************
466 MULTIPLEXER 3
467 *****************************************************************************
468 *****************************************************************************/
469// typedef struct multiplexer_3 {
470// void (*ATTIVA_CHIP_SELECTOR_MULTIPLEXER_3) (void); ///< Puntatore a \ref ATTIVA_CHIP_SELECTOR_MULTIPLEXER_3
471// void (*Attiva_linea_CC1) (void); ///< Puntatore a \ref Attiva_linea_CC1
472// void (*Attiva_linea_DD1) (void); ///< Puntatore a \ref Attiva_linea_DD1
473// void (*Attiva_linea_EE1) (void); ///< Puntatore a \ref Attiva_linea_EE1
474//} const struttura_multiplexer_3;
475
476
477 /****************************************************************************
478 Funzioni del MULTIPLEXER 3
479 *****************************************************************************/
480//void ATTIVA_CHIP_SELECTOR_MULTIPLEXER_3 (void)
481//{
482// GPIO_PinWrite(1, Chip_Sel_Multiplexer_4 ,0);
483// GPIO_PinWrite(1, Chip_Sel_Multiplexer_3 ,1);
484// GPIO_PinWrite(1, Chip_Sel_Multiplexer_2 ,0);
485// GPIO_PinWrite(1, Chip_Sel_Multiplexer_1 ,0);
486//}
487
488//void Attiva_linea_CC1 (void)
489//{
490// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
491// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
492// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
493//}
494
495//void Attiva_linea_DD1 (void)
496//{
497// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
498// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
499// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
500//}
501
502//void Attiva_linea_EE1(void)
503//{
504// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
505// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
506// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
507//}
508
509
510
511// La struttura multi_3 viene controllata con multipl_3
512//struttura_multiplexer_3 Multiplexer_3= {
513// ATTIVA_CHIP_SELECTOR_MULTIPLEXER_3,
514// Attiva_linea_CC1,
515// Attiva_linea_DD1,
516// Attiva_linea_EE1
517//};
518
519// struttura_multiplexer_3 *MULTIPLEXER_3= &Multiplexer_3; // Viene creato un puntatore a multipl_3
520
521
522
523
524
525/*****************************************************************************
526 *****************************************************************************
527 MULTIPLEXER 4
528 *****************************************************************************
529 *****************************************************************************/
530
531// typedef struct multiplexer_4 {
532// void (*ATTIVA_CHIP_SELECTOR_MULTIPLEXER_4) (void); ///< Puntatore a \ref ATTIVA_CHIP_SELECTOR_MULTIPLEXER_4
533// void (*Attiva_linea_FF1) (void); ///< Puntatore a \ref Attiva_linea_FF1
534// void (*Attiva_linea_FF2) (void); ///< Puntatore a \ref Attiva_linea_FF2
535// void (*Attiva_linea_GG1) (void); ///< Puntatore a \ref Attiva_linea_GG1
536// void (*Attiva_linea_GG2) (void); ///< Puntatore a \ref Attiva_linea_GG2
537// void (*Attiva_linea_UU1) (void); ///< Puntatore a \ref Attiva_linea_UU1
538// void (*Attiva_linea_UU2) (void); ///< Puntatore a \ref Attiva_linea_UU2
539// void (*Attiva_linea_HH1) (void); ///< Puntatore a \ref Attiva_linea_HH1
540// void (*Attiva_linea_LL1) (void); ///< Puntatore a \ref Attiva_linea_LL1
541//} const struttura_multiplexer_4;
542
543 /****************************************************************************
544 Funzioni del MULTIPLEXER 4
545 *****************************************************************************/
546//void ATTIVA_CHIP_SELECTOR_MULTIPLEXER_4 (void)
547//{
548// GPIO_PinWrite(1, Chip_Sel_Multiplexer_4 ,1);
549// GPIO_PinWrite(1, Chip_Sel_Multiplexer_3 ,0);
550// GPIO_PinWrite(1, Chip_Sel_Multiplexer_2 ,0);
551// GPIO_PinWrite(1, Chip_Sel_Multiplexer_1 ,0);
552//}
553
554//void Attiva_linea_FF1 (void)
555//{
556// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,0);
557// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
558// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
559//}
560
561//void Attiva_linea_FF2 (void)
562//{
563// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,0);
564// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
565// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
566//}
567
568//void Attiva_linea_GG1(void)
569//{
570// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,0);
571// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
572// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
573//}
574
575//void Attiva_linea_GG2 (void)
576//{
577// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,0);
578// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
579// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
580//}
581
582//void Attiva_linea_UU1 (void)
583//{
584// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
585// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
586// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
587//}
588
589//void Attiva_linea_UU2 (void)
590//{
591// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
592// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,0);
593// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
594//}
595
596//void Attiva_linea_HH1 (void)
597//{
598// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
599// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
600// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,0);
601//}
602
603//void Attiva_linea_LL1 (void)
604//{
605// GPIO_PinWrite(1, Sel_Par_Interruttori_3 ,1);
606// GPIO_PinWrite(1, Sel_Par_Interruttori_2 ,1);
607// GPIO_PinWrite(1, Sel_Par_Interruttori_1 ,1);
608//}
609
610
611// La struttura multi_4 viene controllata con multipl_4
612
613//struttura_multiplexer_4 Multiplexer_4= {
614// ATTIVA_CHIP_SELECTOR_MULTIPLEXER_4,
615// Attiva_linea_FF1,
616// Attiva_linea_FF2,
617// Attiva_linea_GG1,
618// Attiva_linea_GG2,
619// Attiva_linea_UU1,
620// Attiva_linea_UU2,
621// Attiva_linea_HH1,
622// Attiva_linea_LL1
623//};
624
625// struttura_multiplexer_4 *MULTIPLEXER_4= &Multiplexer_4; // Viene creato un puntatore a multipl_4
626
627
628
629/*****************************************************************************
630 *****************************************************************************
631 FUNZIONI UTILI
632 *****************************************************************************
633 *****************************************************************************/
634
635
636/*****************************************************************************
637 Attiva il CHIP SELECTOR del Multiplexer_Numero numero_multiplexer [1,4]
638 *****************************************************************************/
639//void Attiva_CHIP_SELECTOR_MULTIPLEXER_Numero(int numero_multiplexer)
640//{
641// switch (numero_multiplexer)
642// {
643// case 1:
644//// MULTIPLEXER_1->ATTIVA_CHIP_SELECTOR_MULTIPLEXER_1();
645// case 2:
646// MULTIPLEXER_2->ATTIVA_CHIP_SELECTOR_MULTIPLEXER_2();
647// case 3:
648// MULTIPLEXER_3->ATTIVA_CHIP_SELECTOR_MULTIPLEXER_3();
649// case 4:
650// MULTIPLEXER_4->ATTIVA_CHIP_SELECTOR_MULTIPLEXER_4();
651// }
652//}
653
654/*****************************************************************************
655Attiva_linea_del_Multiplexer numero_linea [1,8] numero_multiplexer [1,4]
656 *****************************************************************************/
657//void Attiva_linea_del_Multiplexer(int numero_linea, int numero_multiplexer)
658//{
659// // Multiplexer 1
660//// if(numero_multiplexer==1)
661//// {
662//// switch (numero_linea)
663//// {
664//// case 1:
665////// MULTIPLEXER_1->Attiva_linea_AN1();
666//// case 2:
667////// MULTIPLEXER_1->Attiva_linea_AN2();
668//// case 3:
669////// MULTIPLEXER_1->Attiva_linea_AN3();
670//// case 4:
671////// MULTIPLEXER_1->Attiva_linea_AN4();
672//// case 5:
673////// MULTIPLEXER_1->Attiva_linea_AN5();
674//// case 6:
675////// MULTIPLEXER_1->Attiva_linea_CC2();
676//// case 7:
677////// MULTIPLEXER_1->Attiva_linea_DD2();
678//// case 8:
679////// MULTIPLEXER_1->Attiva_linea_EE2();
680//// }
681//// }
682//
683// // Multiplexer 2
684// if(numero_multiplexer==2)
685// {
686// switch (numero_linea)
687// {
688// case 1:
689// MULTIPLEXER_2->Attiva_linea_MM1();
690// case 2:
691// MULTIPLEXER_2->Attiva_linea_MM2();
692// case 3:
693// MULTIPLEXER_2->Attiva_linea_NN1();
694// case 4:
695// MULTIPLEXER_2->Attiva_linea_NN2();
696// case 5:
697// MULTIPLEXER_2->Attiva_linea_TT1();
698// case 6:
699// MULTIPLEXER_2->Attiva_linea_TT2();
700// case 7:
701// MULTIPLEXER_2->Attiva_linea_HH2();
702// case 8:
703// MULTIPLEXER_2->Attiva_linea_LL2();
704// }
705// }
706//
707// // Multiplexer 3
708// if(numero_multiplexer==3)
709// {
710// switch (numero_linea)
711// {
712// case 6:
713// MULTIPLEXER_3->Attiva_linea_CC1();
714// case 7:
715// MULTIPLEXER_3->Attiva_linea_DD1();
716// case 8:
717// MULTIPLEXER_3->Attiva_linea_EE1();
718// }
719// }
720//
721// // Multiplexer 4
722// if(numero_multiplexer==4)
723// {
724// switch (numero_linea)
725// {
726// case 1:
727// MULTIPLEXER_4->Attiva_linea_FF1();
728// case 2:
729// MULTIPLEXER_4->Attiva_linea_FF2();
730// case 3:
731// MULTIPLEXER_4->Attiva_linea_GG1();
732// case 4:
733// MULTIPLEXER_4->Attiva_linea_GG2();
734// case 5:
735// MULTIPLEXER_4->Attiva_linea_UU1();
736// case 6:
737// MULTIPLEXER_4->Attiva_linea_UU2();
738// case 7:
739// MULTIPLEXER_4->Attiva_linea_HH1();
740// case 8:
741// MULTIPLEXER_4->Attiva_linea_LL1();
742// }
743// }
744//}
745
746
747 /****************************************************************************
748 Abbassa_chip_selector_multiplexer
749 *****************************************************************************/
750//void Abbassa_chip_selector_multiplexer(void)
751//{
752// GPIO_PinWrite(1, Chip_Sel_Multiplexer_4 ,0);
753// GPIO_PinW
const porta_pin_def Mux_enable_postmainboard_1
location of the chip select pin of analog mux 1 of postmainboard, 0=off
Definition: Gpio.c:136
const porta_pin_def Mux_select_word_2
selettore 2 del pin di ingresso dell'analog mux
Definition: Gpio.c:134
const porta_pin_def Mux_enable_postmainboard_7
location of the chip select pin of analog mux 7 of postmainboard, 0=off
Definition: Gpio.c:142
const porta_pin_def Mux_enable_postmainboard_3
location of the chip select pin of analog mux 3 of postmainboard, 0=off
Definition: Gpio.c:138
const porta_pin_def Mux_enable_postmainboard_8
location of the chip select pin of analog mux 8 of postmainboard, 0=off
Definition: Gpio.c:143
const porta_pin_def Mux_select_word_1
selettore 1 del pin di ingresso dell'analog mux
Definition: Gpio.c:133
const uint8_t ADC_node_map[]
Mapping to mux's on postmainboard. Its syntax: bits 0 to 3 are common to all the MUXs and select one ...
Definition: Gpio.c:172
const porta_pin_def Mux_select_word_0
selettore 0 del pin di ingresso dell'analog mux
Definition: Gpio.c:132
const porta_pin_def Mux_enable_postmainboard_5
location of the chip select pin of analog mux 5 of postmainboard, 0=off
Definition: Gpio.c:140
const porta_pin_def Mux_enable_postmainboard_6
location of the chip select pin of analog mux 6 of postmainboard, 0=off
Definition: Gpio.c:141
const porta_pin_def Mux_enable_postmainboard_4
location of the chip select pin of analog mux 4 of postmainboard, 0=off
Definition: Gpio.c:139
const porta_pin_def Mux_enable_postmainboard_2
location of the chip select pin of analog mux 2 of postmainboard, 0=off
Definition: Gpio.c:137
void I2C_to_Parallel_set_PCA9554_outputs_values(uint8_t scheda_su_scheda_giu, uint8_t select_PCA, uint8_t value)
The function I2C_to_Parallel_set_PCA9554_outputs_values allow to set the output pin of the I2C to par...
#define I2C_to_Parallel_maschera_linee_ucita
#define I2C_to_Parallel_name_3
the third PCA
#define I2C_to_Parallel_2_ini_set
#define I2C_to_Parallel_name_2
the second PCA
#define I2C_to_Parallel_3_ini_set
void Analog_mux_line_to_select_deselect(uint8_t scheda_su_scheda_giu, uint8_t line_to_select, uint8_t select_1_deselect_0)
Selection of the line to mesure with the analog MUX of the mainboard, driven by the I2C->parallel mux...
void Analog_mux_line_to_select_deselect_for_postmainboard(uint8_t scheda_su_scheda_giu, uint8_t line_to_select, uint8_t select_1_deselect_0)
Selection of the line to measure with the analog MUX's of the postmainboard, directely driven by the ...
@ node_voltage_Analog_Mux_0_offset
Starting Offset for this set of nodes, 32.
Definition: Gpio.h:13