howto/come_gestire_comunicazione_CAN_con_PUZZE.md
... ...
@@ -1,2693 +0,0 @@
1
-# Come gestire la comunicazione CAN con multiperiferica con il PUZZLE
2
-
3
-Quando si ha una più **periferiche PUZZLE** con cui comunicare in **CAN**, il modo per gestirle è di inlcudere nel **common.h** la libreria **puzzle.h**
4
-
5
-Nella libreria è presente anche la parte per la comunicazione in RS485.
6
-
7
-Più avanti troverai anche la parte in start.c e common.h.
8
-
9
-In questo esempio, le periferiche sono 2 e le uscite sono di un progetto reale.
10
-
11
-Nel puzzle.h:
12
-
13
- // For multiperif:
14
- // #define PUZZLE_PERIFS 2, 3, 4, ...
15
- #ifndef PUZZLE_PERIFS
16
- #define PUZZLE_PERIFS 1
17
- #endif
18
-
19
- //----------------------------------------------
20
- #ifdef linux
21
- #define PortaCOM COM2
22
- #else
23
- #define PortaCOM COM3
24
- #endif
25
-
26
-
27
- // Tipo di comunicazione
28
- #define P_RS485 0
29
- #define P_CAN 1
30
-
31
- // Configurazione connettori X1, ... X8
32
- #define EMPTY 0 // Empty connector
33
- #define UA13144 1 // Analog input 0-20mA
34
- #define UA13143 2 // Analog input 0-10V
35
- #define UA23141 3 // Digital input PNP
36
- #define UA13151 4 // Digital output PNP
37
- #define UA13152 5 // Digital output NPN
38
- #define UA13171 6 // PT100
39
- #define UA13161 7 // Analog output (PWM)
40
-
41
- // Questi vanno in xn_config[]
42
- #define C_EMPTY 21
43
- #define C_ADC 22
44
- #define C_PWM 23
45
- #define C_IN 24
46
- #define C_OUT 25
47
- #define C_PT100 26
48
-
49
- #define DIM_RX 33
50
- #define DIM_TX 41
51
- #define DIM_CONFIG 8
52
- #define START_TX 0x00
53
-
54
- volatile char xn_config[] = { C_EMPTY, // X1
55
- C_EMPTY, // X2
56
- C_EMPTY, // X3
57
- C_EMPTY, // X4
58
- C_EMPTY, // X5
59
- C_EMPTY, // X6
60
- C_EMPTY, // X7
61
- C_EMPTY};// X8
62
- char msg_rx[DIM_RX];
63
- char msg_tx[DIM_TX];
64
-
65
- int puzzle_version=0; // FW version
66
- int puzzle_com=0;
67
-
68
- // Encoders
69
- volatile long p_encoder1;
70
- volatile long p_encoder2;
71
-
72
- volatile char puzzle_reset=0; // reset request flag
73
- volatile char puzzle_reset_perif[] = {0,0,0,0,0,0,0,0};
74
- volatile char puzzle_update=0; // update request flag
75
- int puzzle_disc_cnt = 0;
76
- int puzzle_perif_on = 1; // diventa 0 se scollego la periferica
77
- int prx_cnt=0;
78
- int ptx_cnt=0;
79
-
80
- volatile char config_on = 0;
81
- volatile char serial_port_on = 0;
82
- volatile int puzzle_status = 0;
83
- volatile int p_dipswitch_status = 0; // dip switch status
84
- volatile int p_ext1_on = 0; // EXP1 & EXP2 I/O & ENC1 on (1) off (0)
85
- volatile int p_ext2_on = 0; // EXP3 to EXP8 I/O & ENC2 on (1) off (0)
86
-
87
- void puzzle_reboot(void); // fai il reboot della/le periferica/che
88
- void create_config(void);
89
- void parse_rx(void);
90
- void create_tx(void);
91
- void rw_puzzle(void);
92
- void puzzle_task(void);
93
- void puzzle_start(void); // RS485
94
- void puzzle_start_can(char, char); // CAN (EXP ON/OFF, ENCODER ON/OFF)
95
- void puzzle_task_can(void);
96
- void puzzle_task_can_rx(void);
97
- float pt100_calc(int, int);
98
-
99
- // bootloader
100
- void puzzle_stop(void); // RS485 - bootloader
101
- void puzzle_stop_can(void); // CAN
102
-
103
-
104
- // ----------------------- RS485 -------------------------
105
-
106
- #define CMD_CONFIG 1
107
- #define CMD_DRIVE 2
108
- #define CMD_OK 3
109
- #define CMD_NO 4
110
-
111
- // Comandi bootloader (da definire anche all'interno del bootloader)
112
- #define CMD_BOOT_WU 5 // wake up del bootloader (rx)
113
-
114
- void RXCom(COM *);
115
- void parsing_test_pettine_com(void);
116
- void timer_tx_rx_perif(void);
117
- //----------------------------------------------
118
- COM *Com=0;
119
- volatile char flag_test_tx_com3=0;
120
- // struttura unificata buffer messaggi
121
- typedef struct COM_MESSAGE
122
- {
123
- char cmd; // comando
124
- short para[100]; // operandi
125
- }COM_MESSAGE;
126
- volatile COM_MESSAGE txmess;
127
- volatile COM_MESSAGE rxmess;
128
- volatile int rxsize;
129
- volatile U32 cnt_reply=0;
130
- volatile char flag_comunica_con_perif=0;
131
- //----------------------------------------------
132
- typedef struct COM_TX_RX_MESSAGE_test
133
- {
134
- char cmd; // comando
135
- U8 emb_msg[DIM_TX+1]; // messaggio incapsulato // bootloader
136
- }COM_TX_RX_MESSAGE_test __attribute__((PACKET));
137
-
138
-
139
-
140
- //----------------------------------------------
141
- void tx_cmd_msg(U8 command)
142
- {
143
- COM_TX_RX_MESSAGE_test *tx_1=(COM_TX_RX_MESSAGE_test *)&txmess;
144
- tx_1->cmd = command;
145
-
146
- int i;
147
- for (i=0; i<DIM_TX; i++) {
148
- tx_1->emb_msg[i] = msg_tx[i];
149
- }
150
-
151
- bsave(Com,tx_1,sizeof(COM_TX_RX_MESSAGE_test));
152
- ptx_cnt++;
153
- }
154
- //----------------------------------------------
155
- void install_port(void)
156
- {
157
- com_close(Com);
158
- com_disable(Com);
159
- com_open(Com,115200);
160
- protocol_mode(Com,1); // COMx IN MODO 1 (BLOAD/BSAVE)
161
- onrx(Com,RXCom); // RXCom() = callback linked/called/executed when received a complete packet Syel mode 1
162
- //onrx(Com,0);
163
- Com->centr=0x01; // centr = who sends
164
- Com->perif=0x02; // perif = who receives
165
- com_enable(Com); // ABILITA LA COM
166
- }
167
- //----------------------------------------------
168
- void RXCom(COM *Com)
169
- {
170
- prx_cnt++;
171
- puzzle_disc_cnt = 0;
172
- rxsize=bload(Com,&rxmess,sizeof(rxmess));
173
- int i;
174
-
175
- if(rxsize) {
176
- COM_TX_RX_MESSAGE_test* rx1 = (COM_TX_RX_MESSAGE_test*)&rxmess;
177
- for (i=0; i<DIM_RX; i++) {
178
- msg_rx[i] = rx1->emb_msg[i];
179
- }
180
- parse_rx(); // parsizzo gli input
181
- }
182
- }
183
- //----------------------------------------------
184
- void timer_tx_rx_perif(void)
185
- {
186
- flag_comunica_con_perif=1;
187
- }
188
-
189
- void puzzle_reboot()
190
- {
191
- puzzle_reset = 1;
192
- puzzle_reset_perif[0] = 1;
193
- puzzle_reset_perif[1] = 1;
194
- puzzle_reset_perif[2] = 1;
195
- puzzle_reset_perif[3] = 1;
196
- puzzle_reset_perif[4] = 1;
197
- puzzle_reset_perif[5] = 1;
198
- puzzle_reset_perif[6] = 1;
199
- puzzle_reset_perif[7] = 1;
200
- }
201
-
202
-
203
- // INGRESSI E USCITE
204
- volatile char p_i1 = 0;
205
- volatile char p_i2 = 0;
206
- volatile char p_i3 = 0;
207
- volatile char p_i4 = 0;
208
- volatile char p_i5 = 0;
209
- volatile char p_i6 = 0;
210
- volatile char p_i7 = 0;
211
- volatile char p_i8 = 0;
212
- volatile char p_i9 = 0;
213
- volatile char p_i10 = 0;
214
- volatile char p_i11 = 0;
215
- volatile char p_i12 = 0;
216
- volatile char p_i13 = 0;
217
- volatile char p_i14 = 0;
218
- volatile char p_i15 = 0;
219
- volatile char p_i16 = 0;
220
- volatile char p_i17 = 0;
221
- volatile char p_i18 = 0;
222
- volatile char p_i19 = 0;
223
- volatile char p_i20 = 0;
224
- volatile char p_i21 = 0;
225
- volatile char p_i22 = 0;
226
- volatile char p_i23 = 0;
227
- volatile char p_i24 = 0;
228
- volatile char p_i25 = 0;
229
- volatile char p_i26 = 0;
230
- volatile char p_i27 = 0;
231
- volatile char p_i28 = 0;
232
- volatile char p_i29 = 0;
233
- volatile char p_i30 = 0;
234
- volatile char p_i31 = 0;
235
- volatile char p_i32 = 0;
236
- volatile char p_i33 = 0;
237
- volatile char p_i34 = 0;
238
- volatile char p_i35 = 0;
239
- volatile char p_i36 = 0;
240
- volatile char p_i37 = 0;
241
- volatile char p_i38 = 0;
242
- volatile char p_i39 = 0;
243
- volatile char p_i40 = 0;
244
- volatile char p_i41 = 0;
245
- volatile char p_i42 = 0;
246
- volatile char p_i43 = 0;
247
- volatile char p_i44 = 0;
248
- volatile char p_i45 = 0;
249
- volatile char p_i46 = 0;
250
- volatile char p_i47 = 0;
251
- volatile char p_i48 = 0;
252
- volatile char p_i49 = 0;
253
- volatile char p_i50 = 0;
254
- volatile char p_i51 = 0;
255
- volatile char p_i52 = 0;
256
- volatile char p_i53 = 0;
257
- volatile char p_i54 = 0;
258
- volatile char p_i55 = 0;
259
- volatile char p_i56 = 0;
260
- volatile char p_i57 = 0;
261
- volatile char p_i58 = 0;
262
- volatile char p_i59 = 0;
263
- volatile char p_i60 = 0;
264
- volatile char p_i61 = 0;
265
- volatile char p_i62 = 0;
266
- volatile char p_i63 = 0;
267
- volatile char p_i64 = 0;
268
-
269
- volatile unsigned char *p__i__[] = {&p_i1, &p_i2, &p_i3, &p_i4, &p_i5,
270
- &p_i6, &p_i7, &p_i8, &p_i9, &p_i10,
271
- &p_i11, &p_i12, &p_i13, &p_i14, &p_i15,
272
- &p_i16, &p_i17, &p_i18, &p_i19, &p_i20,
273
- &p_i21, &p_i22, &p_i23, &p_i24, &p_i25,
274
- &p_i26, &p_i27, &p_i28, &p_i29, &p_i30,
275
- &p_i31, &p_i32, &p_i33, &p_i34, &p_i35,
276
- &p_i36, &p_i37, &p_i38, &p_i39, &p_i40,
277
- &p_i41, &p_i42, &p_i43, &p_i44, &p_i45,
278
- &p_i46, &p_i47, &p_i48, &p_i49, &p_i50,
279
- &p_i51, &p_i52, &p_i53, &p_i54, &p_i55,
280
- &p_i56, &p_i57, &p_i58, &p_i59, &p_i60,
281
- &p_i61, &p_i62, &p_i63, &p_i64};
282
-
283
-
284
- volatile char p_o1 = 0;
285
- volatile char p_o2 = 0;
286
- volatile char p_o3 = 0;
287
- volatile char p_o4 = 0;
288
- volatile char p_o5 = 0;
289
- volatile char p_o6 = 0;
290
- volatile char p_o7 = 0;
291
- volatile char p_o8 = 0;
292
- volatile char p_o9 = 0;
293
- volatile char p_o10 = 0;
294
- volatile char p_o11 = 0;
295
- volatile char p_o12 = 0;
296
- volatile char p_o13 = 0;
297
- volatile char p_o14 = 0;
298
- volatile char p_o15 = 0;
299
- volatile char p_o16 = 0;
300
- volatile char p_o17 = 0;
301
- volatile char p_o18 = 0;
302
- volatile char p_o19 = 0;
303
- volatile char p_o20 = 0;
304
- volatile char p_o21 = 0;
305
- volatile char p_o22 = 0;
306
- volatile char p_o23 = 0;
307
- volatile char p_o24 = 0;
308
- volatile char p_o25 = 0;
309
- volatile char p_o26 = 0;
310
- volatile char p_o27 = 0;
311
- volatile char p_o28 = 0;
312
- volatile char p_o29 = 0;
313
- volatile char p_o30 = 0;
314
- volatile char p_o31 = 0;
315
- volatile char p_o32 = 0;
316
- volatile char p_o33 = 0;
317
- volatile char p_o34 = 0;
318
- volatile char p_o35 = 0;
319
- volatile char p_o36 = 0;
320
- volatile char p_o37 = 0;
321
- volatile char p_o38 = 0;
322
- volatile char p_o39 = 0;
323
- volatile char p_o40 = 0;
324
- volatile char p_o41 = 0;
325
- volatile char p_o42 = 0;
326
- volatile char p_o43 = 0;
327
- volatile char p_o44 = 0;
328
- volatile char p_o45 = 0;
329
- volatile char p_o46 = 0;
330
- volatile char p_o47 = 0;
331
- volatile char p_o48 = 0;
332
- volatile char p_o49 = 0;
333
- volatile char p_o50 = 0;
334
- volatile char p_o51 = 0;
335
- volatile char p_o52 = 0;
336
- volatile char p_o53 = 0;
337
- volatile char p_o54 = 0;
338
- volatile char p_o55 = 0;
339
- volatile char p_o56 = 0;
340
- volatile char p_o57 = 0;
341
- volatile char p_o58 = 0;
342
- volatile char p_o59 = 0;
343
- volatile char p_o60 = 0;
344
- volatile char p_o61 = 0;
345
- volatile char p_o62 = 0;
346
- volatile char p_o63 = 0;
347
- volatile char p_o64 = 0;
348
-
349
- volatile unsigned char *p__o__[] = {&p_o1, &p_o2, &p_o3, &p_o4, &p_o5,
350
- &p_o6, &p_o7, &p_o8, &p_o9, &p_o10,
351
- &p_o11, &p_o12, &p_o13, &p_o14, &p_o15,
352
- &p_o16, &p_o17, &p_o18, &p_o19, &p_o20,
353
- &p_o21, &p_o22, &p_o23, &p_o24, &p_o25,
354
- &p_o26, &p_o27, &p_o28, &p_o29, &p_o30,
355
- &p_o31, &p_o32, &p_o33, &p_o34, &p_o35,
356
- &p_o36, &p_o37, &p_o38, &p_o39, &p_o40,
357
- &p_o41, &p_o42, &p_o43, &p_o44, &p_o45,
358
- &p_o46, &p_o47, &p_o48, &p_o49, &p_o50,
359
- &p_o51, &p_o52, &p_o53, &p_o54, &p_o55,
360
- &p_o56, &p_o57, &p_o58, &p_o59, &p_o60,
361
- &p_o61, &p_o62, &p_o63, &p_o64};
362
-
363
-
364
-
365
- // Valori 0-4095 degli input analogici
366
- volatile int x1_anal;
367
- volatile int x2_anal;
368
- volatile int x3_anal;
369
- volatile int x4_anal;
370
- volatile int x5_anal;
371
- volatile int x6_anal;
372
- volatile int x7_anal;
373
- volatile int x8_anal;
374
- volatile int* __xn_anal__[] = {&x1_anal, &x2_anal, &x3_anal, &x4_anal, &x5_anal, &x6_anal, &x7_anal, &x8_anal};
375
-
376
- // Valori a 16 bit delle PT100
377
- volatile int x1_pt100_raw;
378
- volatile int x2_pt100_raw;
379
- volatile int x3_pt100_raw;
380
- volatile int x4_pt100_raw;
381
- volatile int x5_pt100_raw;
382
- volatile int x6_pt100_raw;
383
- volatile int x7_pt100_raw;
384
- volatile int x8_pt100_raw;
385
- volatile int* __xn_pt100_raw__[] = {&x1_pt100_raw, &x2_pt100_raw, &x3_pt100_raw, &x4_pt100_raw, &x5_pt100_raw, &x6_pt100_raw, &x7_pt100_raw, &x8_pt100_raw};
386
-
387
- // Valori float in Celsius
388
- float x1_pt100;
389
- float x2_pt100;
390
- float x3_pt100;
391
- float x4_pt100;
392
- float x5_pt100;
393
- float x6_pt100;
394
- float x7_pt100;
395
- float x8_pt100;
396
- volatile float* __xn_pt100__[] = {&x1_pt100, &x2_pt100, &x3_pt100, &x4_pt100, &x5_pt100, &x6_pt100, &x7_pt100, &x8_pt100};
397
-
398
-
399
- // Ingressi digitali XN
400
- volatile char x1_digin;
401
- volatile char x2_digin;
402
- volatile char x3_digin;
403
- volatile char x4_digin;
404
- volatile char x5_digin;
405
- volatile char x6_digin;
406
- volatile char x7_digin;
407
- volatile char x8_digin;
408
- volatile char *__xn_digin__[] = {&x1_digin, &x2_digin, &x3_digin, &x4_digin, &x5_digin, &x6_digin, &x7_digin, &x8_digin};
409
-
410
- volatile char x1_i1;
411
- volatile char x1_i2;
412
- volatile char x2_i1;
413
- volatile char x2_i2;
414
- volatile char x3_i1;
415
- volatile char x3_i2;
416
- volatile char x4_i1;
417
- volatile char x4_i2;
418
- volatile char x5_i1;
419
- volatile char x5_i2;
420
- volatile char x6_i1;
421
- volatile char x6_i2;
422
- volatile char x7_i1;
423
- volatile char x7_i2;
424
- volatile char x8_i1;
425
- volatile char x8_i2;
426
-
427
- // Valori ricalcolati
428
- volatile float xn_ua13141[8]; // UA 13141 - 0-3V3
429
- volatile float xn_ua13142[8]; // UA 13142 - 0-5V
430
- volatile float xn_ua13143[8]; // UA 13143 - 0-10V
431
- volatile float xn_ua13144[8]; // UA 13144 - 0-20mA
432
- // TODO:
433
- volatile float xn_ua13145[8]; // UA 13145 - NTC 10K
434
-
435
- // Uscite digitali XN
436
- volatile char x1_o1;
437
- volatile char x1_o2;
438
- volatile char x2_o1;
439
- volatile char x2_o2;
440
- volatile char x3_o1;
441
- volatile char x3_o2;
442
- volatile char x4_o1;
443
- volatile char x4_o2;
444
- volatile char x5_o1;
445
- volatile char x5_o2;
446
- volatile char x6_o1;
447
- volatile char x6_o2;
448
- volatile char x7_o1;
449
- volatile char x7_o2;
450
- volatile char x8_o1;
451
- volatile char x8_o2;
452
- char *__xn_outs__[] = {&x1_o1, &x1_o2, &x2_o1, &x2_o2, &x3_o1, &x3_o2, &x4_o1, &x4_o2,
453
- &x5_o1, &x5_o2, &x6_o1, &x6_o2, &x7_o1, &x7_o2, &x8_o1, &x8_o2};
454
-
455
- // Uscite PWM
456
- volatile U16 x1_pwm = 2048;
457
- volatile U16 x2_pwm = 2048;
458
- volatile U16 x3_pwm = 2048;
459
- volatile U16 x4_pwm = 2048;
460
- volatile U16 x5_pwm = 2048;
461
- volatile U16 x6_pwm = 2048;
462
- volatile U16 x7_pwm = 2048;
463
- volatile U16 x8_pwm = 2048;
464
-
465
- U16 *__xn_pwms__[] = {&x1_pwm, &x2_pwm, &x3_pwm, &x4_pwm, &x5_pwm, &x6_pwm, &x7_pwm, &x8_pwm};
466
-
467
-
468
- #ifdef COLLAUDO
469
- float p_volt2[8];
470
- float p_ohm[8];
471
- #endif
472
-
473
- float pt100_current = 0.000926;
474
-
475
- float pt100_calc(int raw, int n)
476
- {
477
- float volt2, ohm, ret;
478
- int lraw;
479
- // trasformo raw a 18 bit
480
- lraw = (raw << 2);
481
- volt2 = (float)lraw * (0.000015625 / 8);
482
- //ohm = volt2 / 0.000926;
483
- ohm = volt2 / pt100_current;
484
- ret = -245.19 + ohm * (2.5293 + ohm * (-0.066046 + ohm * (0.0040422 + ohm * (-0.0000020697)))) / (1 + ohm * (-0.025422 + ohm * (0.0016883 + ohm * (-0.0000013601))));
485
- #ifdef COLLAUDO
486
- p_volt2[n] = volt2;
487
- p_ohm[n] = ohm;
488
- #endif
489
- return ret;
490
- }
491
-
492
-
493
-
494
- void create_config()
495
- {
496
- msg_tx[0] = START_TX;
497
- int i;
498
- for (i=0; i<8; i++) {
499
- msg_tx[i+1] = xn_config[i];
500
- }
501
- }
502
-
503
- void parse_rx()
504
- {
505
- // dipswitch
506
- p_dipswitch_status = (msg_rx[0] & 0x0F);
507
- // versione firmware
508
- puzzle_version = (msg_rx[0] & 0xF0) >> 4;
509
-
510
- // Dal byte 1 al byte 16 ho le informazioni sugli XN
511
- int i, j;
512
- for (i=1; i<9; i++) {
513
- j = 2*i-1;
514
- *__xn_anal__[i-1] = (msg_rx[j] << 8) | (msg_rx[j+1] & 0xff); // Analog
515
- *__xn_digin__[i-1] = (msg_rx[j+1] & 0x03); // Digital
516
- *__xn_pt100_raw__[i-1] = (msg_rx[j] << 8) | (msg_rx[j+1] & 0xff); // PT100
517
-
518
- // calcoli PT100
519
- if ( xn_config[i-1] == C_PT100 ) *__xn_pt100__[i-1] = pt100_calc(*__xn_pt100_raw__[i-1], i-1);
520
- }
521
-
522
- #if 0
523
- // Ricalcola tutti i valori in virgola mobile
524
- for (i=0; i<8; i++) { // ciclo sugli XN
525
- // 0-3V3
526
- xn_ua13141[i] = 3.3*(*__xn_anal__[i])/4095.;
527
- // 0-5V
528
- xn_ua13142[i] = 5.*(*__xn_anal__[i])/4095.;
529
- // 0-10V
530
- xn_ua13143[i] = 10.*(*__xn_anal__[i])/4095.;
531
- // 0-20mA
532
- xn_ua13144[i] = 20.*(*__xn_anal__[i])/4095.;
533
- // TODO: NTC 10K, PT100, ...
534
- }
535
- #endif
536
- // Ricalcola gli ingressi digitali
537
- x1_i1 = x1_digin & 0x01;
538
- x1_i2 = (x1_digin & 0x02) >> 1;
539
- x2_i1 = x2_digin & 0x01;
540
- x2_i2 = (x2_digin & 0x02) >> 1;
541
- x3_i1 = x3_digin & 0x01;
542
- x3_i2 = (x3_digin & 0x02) >> 1;
543
- x4_i1 = x4_digin & 0x01;
544
- x4_i2 = (x4_digin & 0x02) >> 1;
545
- x5_i1 = x5_digin & 0x01;
546
- x5_i2 = (x5_digin & 0x02) >> 1;
547
- x6_i1 = x6_digin & 0x01;
548
- x6_i2 = (x6_digin & 0x02) >> 1;
549
- x7_i1 = x7_digin & 0x01;
550
- x7_i2 = (x7_digin & 0x02) >> 1;
551
- x8_i1 = x8_digin & 0x01;
552
- x8_i2 = (x8_digin & 0x02) >> 1;
553
-
554
- // SPI IN
555
-
556
- // Dal byte 17 al 24 ho le informazioni degli 8 moduli
557
-
558
- for (i=17, j=0; i<25; i++, j+=8) { // ciclo sui byte
559
- *p__i__[j] = (msg_rx[i] >> 7) & 0x01;
560
- *p__i__[j+1] = (msg_rx[i] >> 6) & 0x01;
561
- *p__i__[j+2] = (msg_rx[i] >> 5) & 0x01;
562
- *p__i__[j+3] = (msg_rx[i] >> 4) & 0x01;
563
- *p__i__[j+4] = (msg_rx[i] >> 3) & 0x01;
564
- *p__i__[j+5] = (msg_rx[i] >> 2) & 0x01;
565
- *p__i__[j+6] = (msg_rx[i] >> 1) & 0x01;
566
- *p__i__[j+7] = (msg_rx[i] >> 0) & 0x01;
567
- }
568
-
569
- // ENCODERS
570
-
571
- // Dal byte 25 al byte 32 ho le informazioni sulle due quote
572
-
573
- p_encoder1 = ( (msg_rx[25] << 24) & 0xFF000000 ) |
574
- ( (msg_rx[26] << 16) & 0xFF0000 ) |
575
- ( (msg_rx[27] << 8) & 0xFF00 ) |
576
- (msg_rx[28] & 0xFF);
577
-
578
- p_encoder2 = ( (msg_rx[29] << 24) & 0xFF000000 ) |
579
- ( (msg_rx[30] << 16) & 0xFF0000 ) |
580
- ( (msg_rx[31] << 8) & 0xFF00 ) |
581
- (msg_rx[32] & 0xFF);
582
-
583
- /*
584
- p_encoder2 = (msg_rx[29] << 24) |
585
- (msg_rx[30] << 16) |
586
- (msg_rx[31] << 8) |
587
- (msg_rx[32]);
588
- */
589
- }
590
-
591
- void create_tx()
592
- {
593
- msg_tx[0] = START_TX;
594
-
595
- // Scrivi la configurazione
596
- int i,j;
597
- for (i=0; i<8; i++) {
598
- msg_tx[i+1] = xn_config[i];
599
- }
600
- // X1
601
- switch (xn_config[0]) {
602
-
603
- case C_OUT: // Uscite digitali
604
- msg_tx[9] = 0;
605
- // msg_tx[10] = ((x1_o1 & 0x01) << 1) | (x1_o2 & 0x01); 04-12-2018
606
- msg_tx[10] = ((x1_o2 & 0x01) << 1) | (x1_o1 & 0x01); // 04-12-2018
607
- break;
608
-
609
- case C_PWM: // Uscite PWM
610
- msg_tx[9] = (x1_pwm & 0xFF00) >> 8;
611
- msg_tx[10] = (x1_pwm & 0xFF);
612
- break;
613
-
614
- case C_EMPTY:
615
- default:
616
- msg_tx[9] = 0;
617
- msg_tx[10] = 0;
618
- break;
619
- }
620
- // X2
621
- switch (xn_config[1]) {
622
-
623
- case C_OUT: // Uscite digitali
624
- msg_tx[11] = 0;
625
- // msg_tx[12] = ((x2_o1 & 0x01) << 1) | (x2_o2 & 0x01); 04-12-2018
626
- msg_tx[12] = ((x2_o2 & 0x01) << 1) | (x2_o1 & 0x01); // 04-12-2018
627
- break;
628
-
629
- case C_PWM: // Uscite PWM
630
- msg_tx[11] = (x2_pwm & 0xFF00) >> 8;
631
- msg_tx[12] = (x2_pwm & 0xFF);
632
- break;
633
-
634
- case C_EMPTY:
635
- default:
636
- msg_tx[11] = 0;
637
- msg_tx[12] = 0;
638
- break;
639
- }
640
- // X3
641
- switch (xn_config[2]) {
642
-
643
- case C_OUT: // Uscite digitali
644
- msg_tx[13] = 0;
645
- // msg_tx[14] = ((x3_o1 & 0x01) << 1) | (x3_o2 & 0x01); 04-12-2018
646
- msg_tx[14] = ((x3_o2 & 0x01) << 1) | (x3_o1 & 0x01); // 04-12-2018
647
- break;
648
-
649
- case C_PWM: // Uscite PWM
650
- msg_tx[13] = (x3_pwm & 0xFF00) >> 8;
651
- msg_tx[14] = (x3_pwm & 0xFF);
652
- break;
653
-
654
- case C_EMPTY:
655
- default:
656
- msg_tx[13] = 0;
657
- msg_tx[14] = 0;
658
- break;
659
- }
660
- // X4
661
- switch (xn_config[3]) {
662
-
663
- case C_OUT: // Uscite digitali
664
- msg_tx[15] = 0;
665
- // msg_tx[16] = ((x4_o1 & 0x01) << 1) | (x4_o2 & 0x01); 04-12-2018
666
- msg_tx[16] = ((x4_o2 & 0x01) << 1) | (x4_o1 & 0x01); // 04-12-2018
667
- break;
668
-
669
- case C_PWM: // Uscite PWM
670
- msg_tx[15] = (x4_pwm & 0xFF00) >> 8;
671
- msg_tx[16] = (x4_pwm & 0xFF);
672
- break;
673
-
674
- case C_EMPTY:
675
- default:
676
- msg_tx[15] = 0;
677
- msg_tx[16] = 0;
678
- break;
679
- }
680
- // X5
681
- switch (xn_config[4]) {
682
-
683
- case C_OUT: // Uscite digitali
684
- msg_tx[17] = 0;
685
- // msg_tx[18] = ((x5_o1 & 0x01) << 1) | (x5_o2 & 0x01); // 04-12-2018
686
- msg_tx[18] = ((x5_o2 & 0x01) << 1) | (x5_o1 & 0x01); // 04-12-2018
687
- break;
688
-
689
- case C_PWM: // Uscite PWM
690
- msg_tx[17] = (x5_pwm & 0xFF00) >> 8;
691
- msg_tx[18] = (x5_pwm & 0xFF);
692
- break;
693
-
694
- case C_EMPTY:
695
- default:
696
- msg_tx[17] = 0;
697
- msg_tx[18] = 0;
698
- break;
699
- }
700
- // X6
701
- switch (xn_config[5]) {
702
-
703
- case C_OUT: // Uscite digitali
704
- msg_tx[19] = 0;
705
- // msg_tx[20] = ((x6_o1 & 0x01) << 1) | (x6_o2 & 0x01); // 04-12-2018
706
- msg_tx[20] = ((x6_o2 & 0x01) << 1) | (x6_o1 & 0x01); // 04-12-2018
707
- break;
708
-
709
- case C_PWM: // Uscite PWM
710
- msg_tx[19] = (x6_pwm & 0xFF00) >> 8;
711
- msg_tx[20] = (x6_pwm & 0xFF);
712
- break;
713
-
714
- case C_EMPTY:
715
- default:
716
- msg_tx[19] = 0;
717
- msg_tx[20] = 0;
718
- break;
719
- }
720
- // X7
721
- switch (xn_config[6]) {
722
-
723
- case C_OUT: // Uscite digitali
724
- msg_tx[21] = 0;
725
- // msg_tx[22] = ((x7_o1 & 0x01) << 1) | (x7_o2 & 0x01); 04-12-2018
726
- msg_tx[22] = ((x7_o2 & 0x01) << 1) | (x7_o1 & 0x01); // 04-12-2018
727
- break;
728
-
729
- case C_PWM: // Uscite PWM
730
- msg_tx[21] = (x7_pwm & 0xFF00) >> 8;
731
- msg_tx[22] = (x7_pwm & 0xFF);
732
- break;
733
-
734
- case C_EMPTY:
735
- default:
736
- msg_tx[21] = 0;
737
- msg_tx[22] = 0;
738
- break;
739
- }
740
- // X8
741
- switch (xn_config[7]) {
742
-
743
- case C_OUT: // Uscite digitali
744
- msg_tx[23] = 0;
745
- // msg_tx[24] = ((x8_o1 & 0x01) << 1) | (x8_o2 & 0x01); 04-12-2018
746
- msg_tx[24] = ((x8_o2 & 0x01) << 1) | (x8_o1 & 0x01); // 04-12-2018
747
- break;
748
-
749
- case C_PWM: // Uscite PWM
750
- msg_tx[23] = (x8_pwm & 0xFF00) >> 8;
751
- msg_tx[24] = (x8_pwm & 0xFF);
752
- break;
753
-
754
- case C_EMPTY:
755
- default:
756
- msg_tx[23] = 0;
757
- msg_tx[24] = 0;
758
- break;
759
- }
760
-
761
- // SPI OUT
762
- //int i,j;
763
- for (i=25, j=0; i<33; i++, j+=8) {
764
- msg_tx[i] = ( ((*p__o__[j]) & 0x01) << 7 |
765
- ((*p__o__[j+1]) & 0x01) << 6 |
766
- ((*p__o__[j+2]) & 0x01) << 5 |
767
- ((*p__o__[j+3]) & 0x01) << 4 |
768
- ((*p__o__[j+4]) & 0x01) << 3 |
769
- ((*p__o__[j+5]) & 0x01) << 2 |
770
- ((*p__o__[j+6]) & 0x01) << 1 |
771
- ((*p__o__[j+7]) & 0x01) << 0 );
772
- }
773
-
774
- // Valutazione richiesta reset
775
-
776
- if (puzzle_reset) {
777
- puzzle_reset=0;
778
- msg_tx[39] = 0xFF;
779
- msg_tx[40] = 0xAA;
780
- } else {
781
- msg_tx[39] = 0;
782
- msg_tx[40] = 0;
783
- }
784
-
785
- // FINE
786
- //msg_tx[DIM_TX-1] = END_TX;
787
- }
788
-
789
- volatile char config_sent = 0;
790
- volatile char trigger_tx = 0;
791
-
792
- int puzzle_task_cnt=0;
793
- void puzzle_task()
794
- {
795
- while(1) {
796
- puzzle_task_cnt++;
797
- create_tx();
798
- tx_cmd_msg(CMD_DRIVE);
799
- if (puzzle_disc_cnt < 200) {
800
- puzzle_disc_cnt++;
801
- puzzle_perif_on = 1;
802
- } else {
803
- puzzle_perif_on = 0;
804
- }
805
- every(20);
806
- }
807
- }
808
-
809
- void puzzle_start()
810
- {
811
- puzzle_com = P_RS485;
812
- Com = PortaCOM;
813
- install_port();
814
- serial_port_on = 1;
815
- exec_task(puzzle_task, 0, 4);
816
- }
817
-
818
- void puzzle_stop()
819
- {
820
- //remove_timer(rw_puzzle);
821
- remove_task(puzzle_task);
822
- com_close(Com);
823
- com_disable(Com);
824
- }
825
-
826
- //------------------ MULTI PERIF --------------------------------
827
-
828
- // BUFFER UNIVERSALE (perif 50)
829
- volatile char p50_xn_config[] = { C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY,
830
- C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY};
831
- volatile long p50_encoder1, p50_encoder2;
832
- // EXP - INGRESSI E USCITE
833
- volatile U32 p50_i_low, p50_i_high;
834
- volatile U32 p50_o_low, p50_o_high;
835
-
836
- // Input analogici
837
- volatile int p50_x1_anal, p50_x2_anal, p50_x3_anal, p50_x4_anal, p50_x5_anal, p50_x6_anal, p50_x7_anal, p50_x8_anal;
838
- volatile int* p50__xn_anal__[] = {&p50_x1_anal, &p50_x2_anal, &p50_x3_anal, &p50_x4_anal, &p50_x5_anal, &p50_x6_anal, &p50_x7_anal, &p50_x8_anal};
839
-
840
- // PT100 RAW
841
- volatile int p50_x1_pt100_raw, p50_x2_pt100_raw, p50_x3_pt100_raw, p50_x4_pt100_raw,
842
- p50_x5_pt100_raw, p50_x6_pt100_raw, p50_x7_pt100_raw, p50_x8_pt100_raw;
843
- volatile int* p50__xn_pt100_raw__[] = {&p50_x1_pt100_raw, &p50_x2_pt100_raw, &p50_x3_pt100_raw, &p50_x4_pt100_raw,
844
- &p50_x5_pt100_raw, &p50_x6_pt100_raw, &p50_x7_pt100_raw, &p50_x8_pt100_raw};
845
-
846
- // PT100 CELSIUS
847
- float p50_x1_pt100, p50_x2_pt100, p50_x3_pt100, p50_x4_pt100, p50_x5_pt100, p50_x6_pt100, p50_x7_pt100, p50_x8_pt100;
848
- volatile float* p50__xn_pt100__[] = {&p50_x1_pt100, &p50_x2_pt100, &p50_x3_pt100, &p50_x4_pt100, &p50_x5_pt100, &p50_x6_pt100, &p50_x7_pt100, &p50_x8_pt100};
849
-
850
- // Ingressi digitali XN
851
- volatile char p50_x1_digin, p50_x2_digin, p50_x3_digin, p50_x4_digin,
852
- p50_x5_digin, p50_x6_digin, p50_x7_digin, p50_x8_digin;
853
-
854
- volatile char p50_x1_i1, p50_x1_i2, p50_x2_i1, p50_x2_i2, p50_x3_i1, p50_x3_i2, p50_x4_i1, p50_x4_i2,
855
- p50_x5_i1, p50_x5_i2, p50_x6_i1, p50_x6_i2, p50_x7_i1, p50_x7_i2, p50_x8_i1, p50_x8_i2;
856
-
857
- // Uscite digitali XN
858
- volatile char p50_x1_o1, p50_x1_o2, p50_x2_o1, p50_x2_o2, p50_x3_o1, p50_x3_o2, p50_x4_o1, p50_x4_o2,
859
- p50_x5_o1, p50_x5_o2, p50_x6_o1, p50_x6_o2, p50_x7_o1, p50_x7_o2, p50_x8_o1, p50_x8_o2;
860
-
861
- // Uscite PWM
862
- volatile U16 p50_x1_pwm = 2048;
863
- volatile U16 p50_x2_pwm = 2048;
864
- volatile U16 p50_x3_pwm = 2048;
865
- volatile U16 p50_x4_pwm = 2048;
866
- volatile U16 p50_x5_pwm = 2048;
867
- volatile U16 p50_x6_pwm = 2048;
868
- volatile U16 p50_x7_pwm = 2048;
869
- volatile U16 p50_x8_pwm = 2048;
870
-
871
- U16 *p50__xn_pwms__[] = {&p50_x1_pwm, &p50_x2_pwm, &p50_x3_pwm, &p50_x4_pwm, &p50_x5_pwm, &p50_x6_pwm, &p50_x7_pwm, &p50_x8_pwm};
872
-
873
-
874
-
875
-
876
- #if PUZZLE_PERIFS >= 2
877
- volatile char p1_xn_config[] = { C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY,
878
- C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY};
879
- volatile long p1_encoder1, p1_encoder2;
880
- // EXP - INGRESSI E USCITE
881
- volatile char p1_i1, p1_i2, p1_i3, p1_i4, p1_i5, p1_i6, p1_i7, p1_i8, p1_i9, p1_i10, p1_i11,
882
- p1_i12, p1_i13, p1_i14, p1_i15, p1_i16, p1_i17, p1_i18, p1_i19, p1_i20, p1_i21,
883
- p1_i22, p1_i23, p1_i24, p1_i25, p1_i26, p1_i27, p1_i28, p1_i29, p1_i30, p1_i31,
884
- p1_i32, p1_i33, p1_i34, p1_i35, p1_i36, p1_i37, p1_i38, p1_i39, p1_i40, p1_i41,
885
- p1_i42, p1_i43, p1_i44, p1_i45, p1_i46, p1_i47, p1_i48, p1_i49, p1_i50, p1_i51,
886
- p1_i52, p1_i53, p1_i54, p1_i55, p1_i56, p1_i57, p1_i58, p1_i59, p1_i60, p1_i61,
887
- p1_i62, p1_i63, p1_i64;
888
- volatile unsigned char *p1__i__[] = {&p1_i1, &p1_i2, &p1_i3, &p1_i4, &p1_i5,
889
- &p1_i6, &p1_i7, &p1_i8, &p1_i9, &p1_i10,
890
- &p1_i11, &p1_i12, &p1_i13, &p1_i14, &p1_i15,
891
- &p1_i16, &p1_i17, &p1_i18, &p1_i19, &p1_i20,
892
- &p1_i21, &p1_i22, &p1_i23, &p1_i24, &p1_i25,
893
- &p1_i26, &p1_i27, &p1_i28, &p1_i29, &p1_i30,
894
- &p1_i31, &p1_i32, &p1_i33, &p1_i34, &p1_i35,
895
- &p1_i36, &p1_i37, &p1_i38, &p1_i39, &p1_i40,
896
- &p1_i41, &p1_i42, &p1_i43, &p1_i44, &p1_i45,
897
- &p1_i46, &p1_i47, &p1_i48, &p1_i49, &p1_i50,
898
- &p1_i51, &p1_i52, &p1_i53, &p1_i54, &p1_i55,
899
- &p1_i56, &p1_i57, &p1_i58, &p1_i59, &p1_i60,
900
- &p1_i61, &p1_i62, &p1_i63, &p1_i64};
901
- volatile char p1_o1, p1_o2, p1_o3, p1_o4, p1_o5, p1_o6, p1_o7, p1_o8, p1_o9, p1_o10,
902
- p1_o11, p1_o12, p1_o13, p1_o14, p1_o15, p1_o16, p1_o17, p1_o18, p1_o19, p1_o20,
903
- p1_o21, p1_o22, p1_o23, p1_o24, p1_o25, p1_o26, p1_o27, p1_o28, p1_o29, p1_o30,
904
- p1_o31, p1_o32, p1_o33, p1_o34, p1_o35, p1_o36, p1_o37, p1_o38, p1_o39, p1_o40,
905
- p1_o41, p1_o42, p1_o43, p1_o44, p1_o45, p1_o46, p1_o47, p1_o48, p1_o49, p1_o50,
906
- p1_o51, p1_o52, p1_o53, p1_o54, p1_o55, p1_o56, p1_o57, p1_o58, p1_o59, p1_o60,
907
- p1_o61, p1_o62, p1_o63, p1_o64;
908
- volatile unsigned char *p1__o__[] = {&p1_o1, &p1_o2, &p1_o3, &p1_o4, &p1_o5,
909
- &p1_o6, &p1_o7, &p1_o8, &p1_o9, &p1_o10,
910
- &p1_o11, &p1_o12, &p1_o13, &p1_o14, &p1_o15,
911
- &p1_o16, &p1_o17, &p1_o18, &p1_o19, &p1_o20,
912
- &p1_o21, &p1_o22, &p1_o23, &p1_o24, &p1_o25,
913
- &p1_o26, &p1_o27, &p1_o28, &p1_o29, &p1_o30,
914
- &p1_o31, &p1_o32, &p1_o33, &p1_o34, &p1_o35,
915
- &p1_o36, &p1_o37, &p1_o38, &p1_o39, &p1_o40,
916
- &p1_o41, &p1_o42, &p1_o43, &p1_o44, &p1_o45,
917
- &p1_o46, &p1_o47, &p1_o48, &p1_o49, &p1_o50,
918
- &p1_o51, &p1_o52, &p1_o53, &p1_o54, &p1_o55,
919
- &p1_o56, &p1_o57, &p1_o58, &p1_o59, &p1_o60,
920
- &p1_o61, &p1_o62, &p1_o63, &p1_o64};
921
- // Input analogici
922
- volatile int p1_x1_anal, p1_x2_anal, p1_x3_anal, p1_x4_anal, p1_x5_anal, p1_x6_anal, p1_x7_anal, p1_x8_anal;
923
- volatile int* p1__xn_anal__[] = {&p1_x1_anal, &p1_x2_anal, &p1_x3_anal, &p1_x4_anal, &p1_x5_anal, &p1_x6_anal, &p1_x7_anal, &p1_x8_anal};
924
-
925
- // PT100 RAW
926
- volatile int p1_x1_pt100_raw, p1_x2_pt100_raw, p1_x3_pt100_raw, p1_x4_pt100_raw,
927
- p1_x5_pt100_raw, p1_x6_pt100_raw, p1_x7_pt100_raw, p1_x8_pt100_raw;
928
- volatile int* p1__xn_pt100_raw__[] = {&p1_x1_pt100_raw, &p1_x2_pt100_raw, &p1_x3_pt100_raw, &p1_x4_pt100_raw,
929
- &p1_x5_pt100_raw, &p1_x6_pt100_raw, &p1_x7_pt100_raw, &p1_x8_pt100_raw};
930
-
931
- // PT100 CELSIUS
932
- float p1_x1_pt100, p1_x2_pt100, p1_x3_pt100, p1_x4_pt100, p1_x5_pt100, p1_x6_pt100, p1_x7_pt100, p1_x8_pt100;
933
- volatile float* p1__xn_pt100__[] = {&p1_x1_pt100, &p1_x2_pt100, &p1_x3_pt100, &p1_x4_pt100, &p1_x5_pt100, &p1_x6_pt100, &p1_x7_pt100, &p1_x8_pt100};
934
-
935
-
936
- // Ingressi digitali XN
937
- volatile char p1_x1_digin, p1_x2_digin, p1_x3_digin, p1_x4_digin,
938
- p1_x5_digin, p1_x6_digin, p1_x7_digin, p1_x8_digin;
939
- volatile char *p1__xn_digin__[] = {&p1_x1_digin, &p1_x2_digin, &p1_x3_digin, &p1_x4_digin,
940
- &p1_x5_digin, &p1_x6_digin, &p1_x7_digin, &p1_x8_digin};
941
-
942
- volatile char p1_x1_i1, p1_x1_i2, p1_x2_i1, p1_x2_i2, p1_x3_i1, p1_x3_i2, p1_x4_i1, p1_x4_i2,
943
- p1_x5_i1, p1_x5_i2, p1_x6_i1, p1_x6_i2, p1_x7_i1, p1_x7_i2, p1_x8_i1, p1_x8_i2;
944
-
945
- // Uscite digitali XN
946
- volatile char p1_x1_o1, p1_x1_o2, p1_x2_o1, p1_x2_o2, p1_x3_o1, p1_x3_o2, p1_x4_o1, p1_x4_o2,
947
- p1_x5_o1, p1_x5_o2, p1_x6_o1, p1_x6_o2, p1_x7_o1, p1_x7_o2, p1_x8_o1, p1_x8_o2;
948
- char *p1__xn_outs__[] = {&p1_x1_o1, &p1_x1_o2, &p1_x2_o1, &p1_x2_o2, &p1_x3_o1, &p1_x3_o2, &p1_x4_o1, &p1_x4_o2,
949
- &p1_x5_o1, &p1_x5_o2, &p1_x6_o1, &p1_x6_o2, &p1_x7_o1, &p1_x7_o2, &p1_x8_o1, &p1_x8_o2};
950
-
951
- // Uscite PWM
952
- volatile U16 p1_x1_pwm = 2048;
953
- volatile U16 p1_x2_pwm = 2048;
954
- volatile U16 p1_x3_pwm = 2048;
955
- volatile U16 p1_x4_pwm = 2048;
956
- volatile U16 p1_x5_pwm = 2048;
957
- volatile U16 p1_x6_pwm = 2048;
958
- volatile U16 p1_x7_pwm = 2048;
959
- volatile U16 p1_x8_pwm = 2048;
960
-
961
- U16 *p1__xn_pwms__[] = {&p1_x1_pwm, &p1_x2_pwm, &p1_x3_pwm, &p1_x4_pwm, &p1_x5_pwm, &p1_x6_pwm, &p1_x7_pwm, &p1_x8_pwm};
962
- #endif
963
-
964
- #if PUZZLE_PERIFS >= 3
965
- volatile char p2_xn_config[] = { C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY,
966
- C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY};
967
- volatile long p2_encoder1, p2_encoder2;
968
- // EXP - INGRESSI E USCITE
969
- volatile char p2_i1, p2_i2, p2_i3, p2_i4, p2_i5, p2_i6, p2_i7, p2_i8, p2_i9, p2_i10, p2_i11,
970
- p2_i12, p2_i13, p2_i14, p2_i15, p2_i16, p2_i17, p2_i18, p2_i19, p2_i20, p2_i21,
971
- p2_i22, p2_i23, p2_i24, p2_i25, p2_i26, p2_i27, p2_i28, p2_i29, p2_i30, p2_i31,
972
- p2_i32, p2_i33, p2_i34, p2_i35, p2_i36, p2_i37, p2_i38, p2_i39, p2_i40, p2_i41,
973
- p2_i42, p2_i43, p2_i44, p2_i45, p2_i46, p2_i47, p2_i48, p2_i49, p2_i50, p2_i51,
974
- p2_i52, p2_i53, p2_i54, p2_i55, p2_i56, p2_i57, p2_i58, p2_i59, p2_i60, p2_i61,
975
- p2_i62, p2_i63, p2_i64;
976
- volatile unsigned char *p2__i__[] = {&p2_i1, &p2_i2, &p2_i3, &p2_i4, &p2_i5,
977
- &p2_i6, &p2_i7, &p2_i8, &p2_i9, &p2_i10,
978
- &p2_i11, &p2_i12, &p2_i13, &p2_i14, &p2_i15,
979
- &p2_i16, &p2_i17, &p2_i18, &p2_i19, &p2_i20,
980
- &p2_i21, &p2_i22, &p2_i23, &p2_i24, &p2_i25,
981
- &p2_i26, &p2_i27, &p2_i28, &p2_i29, &p2_i30,
982
- &p2_i31, &p2_i32, &p2_i33, &p2_i34, &p2_i35,
983
- &p2_i36, &p2_i37, &p2_i38, &p2_i39, &p2_i40,
984
- &p2_i41, &p2_i42, &p2_i43, &p2_i44, &p2_i45,
985
- &p2_i46, &p2_i47, &p2_i48, &p2_i49, &p2_i50,
986
- &p2_i51, &p2_i52, &p2_i53, &p2_i54, &p2_i55,
987
- &p2_i56, &p2_i57, &p2_i58, &p2_i59, &p2_i60,
988
- &p2_i61, &p2_i62, &p2_i63, &p2_i64};
989
- volatile char p2_o1, p2_o2, p2_o3, p2_o4, p2_o5, p2_o6, p2_o7, p2_o8, p2_o9, p2_o10,
990
- p2_o11, p2_o12, p2_o13, p2_o14, p2_o15, p2_o16, p2_o17, p2_o18, p2_o19, p2_o20,
991
- p2_o21, p2_o22, p2_o23, p2_o24, p2_o25, p2_o26, p2_o27, p2_o28, p2_o29, p2_o30,
992
- p2_o31, p2_o32, p2_o33, p2_o34, p2_o35, p2_o36, p2_o37, p2_o38, p2_o39, p2_o40,
993
- p2_o41, p2_o42, p2_o43, p2_o44, p2_o45, p2_o46, p2_o47, p2_o48, p2_o49, p2_o50,
994
- p2_o51, p2_o52, p2_o53, p2_o54, p2_o55, p2_o56, p2_o57, p2_o58, p2_o59, p2_o60,
995
- p2_o61, p2_o62, p2_o63, p2_o64;
996
- volatile unsigned char *p2__o__[] = {&p2_o1, &p2_o2, &p2_o3, &p2_o4, &p2_o5,
997
- &p2_o6, &p2_o7, &p2_o8, &p2_o9, &p2_o10,
998
- &p2_o11, &p2_o12, &p2_o13, &p2_o14, &p2_o15,
999
- &p2_o16, &p2_o17, &p2_o18, &p2_o19, &p2_o20,
1000
- &p2_o21, &p2_o22, &p2_o23, &p2_o24, &p2_o25,
1001
- &p2_o26, &p2_o27, &p2_o28, &p2_o29, &p2_o30,
1002
- &p2_o31, &p2_o32, &p2_o33, &p2_o34, &p2_o35,
1003
- &p2_o36, &p2_o37, &p2_o38, &p2_o39, &p2_o40,
1004
- &p2_o41, &p2_o42, &p2_o43, &p2_o44, &p2_o45,
1005
- &p2_o46, &p2_o47, &p2_o48, &p2_o49, &p2_o50,
1006
- &p2_o51, &p2_o52, &p2_o53, &p2_o54, &p2_o55,
1007
- &p2_o56, &p2_o57, &p2_o58, &p2_o59, &p2_o60,
1008
- &p2_o61, &p2_o62, &p2_o63, &p2_o64};
1009
- // Input analogici
1010
- volatile int p2_x1_anal, p2_x2_anal, p2_x3_anal, p2_x4_anal, p2_x5_anal, p2_x6_anal, p2_x7_anal, p2_x8_anal;
1011
- volatile int* p2__xn_anal__[] = {&p2_x1_anal, &p2_x2_anal, &p2_x3_anal, &p2_x4_anal, &p2_x5_anal, &p2_x6_anal, &p2_x7_anal, &p2_x8_anal};
1012
-
1013
- // PT100 RAW
1014
- volatile int p2_x1_pt100_raw, p2_x2_pt100_raw, p2_x3_pt100_raw, p2_x4_pt100_raw,
1015
- p2_x5_pt100_raw, p2_x6_pt100_raw, p2_x7_pt100_raw, p2_x8_pt100_raw;
1016
- volatile int* p2__xn_pt100_raw__[] = {&p2_x1_pt100_raw, &p2_x2_pt100_raw, &p2_x3_pt100_raw, &p2_x4_pt100_raw,
1017
- &p2_x5_pt100_raw, &p2_x6_pt100_raw, &p2_x7_pt100_raw, &p2_x8_pt100_raw};
1018
-
1019
- // PT100 CELSIUS
1020
- float p2_x1_pt100, p2_x2_pt100, p2_x3_pt100, p2_x4_pt100, p2_x5_pt100, p2_x6_pt100, p2_x7_pt100, p2_x8_pt100;
1021
- volatile float* p2__xn_pt100__[] = {&p2_x1_pt100, &p2_x2_pt100, &p2_x3_pt100, &p2_x4_pt100, &p2_x5_pt100, &p2_x6_pt100, &p2_x7_pt100, &p2_x8_pt100};
1022
-
1023
-
1024
- // Ingressi digitali XN
1025
- volatile char p2_x1_digin, p2_x2_digin, p2_x3_digin, p2_x4_digin,
1026
- p2_x5_digin, p2_x6_digin, p2_x7_digin, p2_x8_digin;
1027
- volatile char *p2__xn_digin__[] = {&p2_x1_digin, &p2_x2_digin, &p2_x3_digin, &p2_x4_digin,
1028
- &p2_x5_digin, &p2_x6_digin, &p2_x7_digin, &p2_x8_digin};
1029
-
1030
- volatile char p2_x1_i1, p2_x1_i2, p2_x2_i1, p2_x2_i2, p2_x3_i1, p2_x3_i2, p2_x4_i1, p2_x4_i2,
1031
- p2_x5_i1, p2_x5_i2, p2_x6_i1, p2_x6_i2, p2_x7_i1, p2_x7_i2, p2_x8_i1, p2_x8_i2;
1032
-
1033
- // Uscite digitali XN
1034
- volatile char p2_x1_o1, p2_x1_o2, p2_x2_o1, p2_x2_o2, p2_x3_o1, p2_x3_o2, p2_x4_o1, p2_x4_o2,
1035
- p2_x5_o1, p2_x5_o2, p2_x6_o1, p2_x6_o2, p2_x7_o1, p2_x7_o2, p2_x8_o1, p2_x8_o2;
1036
- char *p2__xn_outs__[] = {&p2_x1_o1, &p2_x1_o2, &p2_x2_o1, &p2_x2_o2, &p2_x3_o1, &p2_x3_o2, &p2_x4_o1, &p2_x4_o2,
1037
- &p2_x5_o1, &p2_x5_o2, &p2_x6_o1, &p2_x6_o2, &p2_x7_o1, &p2_x7_o2, &p2_x8_o1, &p2_x8_o2};
1038
-
1039
- // Uscite PWM
1040
- volatile U16 p2_x1_pwm = 2048;
1041
- volatile U16 p2_x2_pwm = 2048;
1042
- volatile U16 p2_x3_pwm = 2048;
1043
- volatile U16 p2_x4_pwm = 2048;
1044
- volatile U16 p2_x5_pwm = 2048;
1045
- volatile U16 p2_x6_pwm = 2048;
1046
- volatile U16 p2_x7_pwm = 2048;
1047
- volatile U16 p2_x8_pwm = 2048;
1048
-
1049
- U16 *p2__xn_pwms__[] = {&p2_x1_pwm, &p2_x2_pwm, &p2_x3_pwm, &p2_x4_pwm, &p2_x5_pwm, &p2_x6_pwm, &p2_x7_pwm, &p2_x8_pwm};
1050
- #endif
1051
-
1052
- #if PUZZLE_PERIFS >= 4
1053
- volatile char p3_xn_config[] = { C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY,
1054
- C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY};
1055
- volatile long p3_encoder1, p3_encoder2;
1056
- // EXP - INGRESSI E USCITE
1057
- volatile char p3_i1, p3_i2, p3_i3, p3_i4, p3_i5, p3_i6, p3_i7, p3_i8, p3_i9, p3_i10, p3_i11,
1058
- p3_i12, p3_i13, p3_i14, p3_i15, p3_i16, p3_i17, p3_i18, p3_i19, p3_i20, p3_i21,
1059
- p3_i22, p3_i23, p3_i24, p3_i25, p3_i26, p3_i27, p3_i28, p3_i29, p3_i30, p3_i31,
1060
- p3_i32, p3_i33, p3_i34, p3_i35, p3_i36, p3_i37, p3_i38, p3_i39, p3_i40, p3_i41,
1061
- p3_i42, p3_i43, p3_i44, p3_i45, p3_i46, p3_i47, p3_i48, p3_i49, p3_i50, p3_i51,
1062
- p3_i52, p3_i53, p3_i54, p3_i55, p3_i56, p3_i57, p3_i58, p3_i59, p3_i60, p3_i61,
1063
- p3_i62, p3_i63, p3_i64;
1064
- volatile unsigned char *p3__i__[] = {&p3_i1, &p3_i2, &p3_i3, &p3_i4, &p3_i5,
1065
- &p3_i6, &p3_i7, &p3_i8, &p3_i9, &p3_i10,
1066
- &p3_i11, &p3_i12, &p3_i13, &p3_i14, &p3_i15,
1067
- &p3_i16, &p3_i17, &p3_i18, &p3_i19, &p3_i20,
1068
- &p3_i21, &p3_i22, &p3_i23, &p3_i24, &p3_i25,
1069
- &p3_i26, &p3_i27, &p3_i28, &p3_i29, &p3_i30,
1070
- &p3_i31, &p3_i32, &p3_i33, &p3_i34, &p3_i35,
1071
- &p3_i36, &p3_i37, &p3_i38, &p3_i39, &p3_i40,
1072
- &p3_i41, &p3_i42, &p3_i43, &p3_i44, &p3_i45,
1073
- &p3_i46, &p3_i47, &p3_i48, &p3_i49, &p3_i50,
1074
- &p3_i51, &p3_i52, &p3_i53, &p3_i54, &p3_i55,
1075
- &p3_i56, &p3_i57, &p3_i58, &p3_i59, &p3_i60,
1076
- &p3_i61, &p3_i62, &p3_i63, &p3_i64};
1077
- volatile char p3_o1, p3_o2, p3_o3, p3_o4, p3_o5, p3_o6, p3_o7, p3_o8, p3_o9, p3_o10,
1078
- p3_o11, p3_o12, p3_o13, p3_o14, p3_o15, p3_o16, p3_o17, p3_o18, p3_o19, p3_o20,
1079
- p3_o21, p3_o22, p3_o23, p3_o24, p3_o25, p3_o26, p3_o27, p3_o28, p3_o29, p3_o30,
1080
- p3_o31, p3_o32, p3_o33, p3_o34, p3_o35, p3_o36, p3_o37, p3_o38, p3_o39, p3_o40,
1081
- p3_o41, p3_o42, p3_o43, p3_o44, p3_o45, p3_o46, p3_o47, p3_o48, p3_o49, p3_o50,
1082
- p3_o51, p3_o52, p3_o53, p3_o54, p3_o55, p3_o56, p3_o57, p3_o58, p3_o59, p3_o60,
1083
- p3_o61, p3_o62, p3_o63, p3_o64;
1084
- volatile unsigned char *p3__o__[] = {&p3_o1, &p3_o2, &p3_o3, &p3_o4, &p3_o5,
1085
- &p3_o6, &p3_o7, &p3_o8, &p3_o9, &p3_o10,
1086
- &p3_o11, &p3_o12, &p3_o13, &p3_o14, &p3_o15,
1087
- &p3_o16, &p3_o17, &p3_o18, &p3_o19, &p3_o20,
1088
- &p3_o21, &p3_o22, &p3_o23, &p3_o24, &p3_o25,
1089
- &p3_o26, &p3_o27, &p3_o28, &p3_o29, &p3_o30,
1090
- &p3_o31, &p3_o32, &p3_o33, &p3_o34, &p3_o35,
1091
- &p3_o36, &p3_o37, &p3_o38, &p3_o39, &p3_o40,
1092
- &p3_o41, &p3_o42, &p3_o43, &p3_o44, &p3_o45,
1093
- &p3_o46, &p3_o47, &p3_o48, &p3_o49, &p3_o50,
1094
- &p3_o51, &p3_o52, &p3_o53, &p3_o54, &p3_o55,
1095
- &p3_o56, &p3_o57, &p3_o58, &p3_o59, &p3_o60,
1096
- &p3_o61, &p3_o62, &p3_o63, &p3_o64};
1097
- // Input analogici
1098
- volatile int p3_x1_anal, p3_x2_anal, p3_x3_anal, p3_x4_anal, p3_x5_anal, p3_x6_anal, p3_x7_anal, p3_x8_anal;
1099
- volatile int* p3__xn_anal__[] = {&p3_x1_anal, &p3_x2_anal, &p3_x3_anal, &p3_x4_anal, &p3_x5_anal, &p3_x6_anal, &p3_x7_anal, &p3_x8_anal};
1100
-
1101
- // PT100 RAW
1102
- volatile int p3_x1_pt100_raw, p3_x2_pt100_raw, p3_x3_pt100_raw, p3_x4_pt100_raw,
1103
- p3_x5_pt100_raw, p3_x6_pt100_raw, p3_x7_pt100_raw, p3_x8_pt100_raw;
1104
- volatile int* p3__xn_pt100_raw__[] = {&p3_x1_pt100_raw, &p3_x2_pt100_raw, &p3_x3_pt100_raw, &p3_x4_pt100_raw,
1105
- &p3_x5_pt100_raw, &p3_x6_pt100_raw, &p3_x7_pt100_raw, &p3_x8_pt100_raw};
1106
-
1107
- // PT100 CELSIUS
1108
- float p3_x1_pt100, p3_x2_pt100, p3_x3_pt100, p3_x4_pt100, p3_x5_pt100, p3_x6_pt100, p3_x7_pt100, p3_x8_pt100;
1109
- volatile float* p3__xn_pt100__[] = {&p3_x1_pt100, &p3_x2_pt100, &p3_x3_pt100, &p3_x4_pt100, &p3_x5_pt100, &p3_x6_pt100, &p3_x7_pt100, &p3_x8_pt100};
1110
-
1111
-
1112
- // Ingressi digitali XN
1113
- volatile char p3_x1_digin, p3_x2_digin, p3_x3_digin, p3_x4_digin,
1114
- p3_x5_digin, p3_x6_digin, p3_x7_digin, p3_x8_digin;
1115
- volatile char *p3__xn_digin__[] = {&p3_x1_digin, &p3_x2_digin, &p3_x3_digin, &p3_x4_digin,
1116
- &p3_x5_digin, &p3_x6_digin, &p3_x7_digin, &p3_x8_digin};
1117
-
1118
- volatile char p3_x1_i1, p3_x1_i2, p3_x2_i1, p3_x2_i2, p3_x3_i1, p3_x3_i2, p3_x4_i1, p3_x4_i2,
1119
- p3_x5_i1, p3_x5_i2, p3_x6_i1, p3_x6_i2, p3_x7_i1, p3_x7_i2, p3_x8_i1, p3_x8_i2;
1120
-
1121
- // Uscite digitali XN
1122
- volatile char p3_x1_o1, p3_x1_o2, p3_x2_o1, p3_x2_o2, p3_x3_o1, p3_x3_o2, p3_x4_o1, p3_x4_o2,
1123
- p3_x5_o1, p3_x5_o2, p3_x6_o1, p3_x6_o2, p3_x7_o1, p3_x7_o2, p3_x8_o1, p3_x8_o2;
1124
- char *p3__xn_outs__[] = {&p3_x1_o1, &p3_x1_o2, &p3_x2_o1, &p3_x2_o2, &p3_x3_o1, &p3_x3_o2, &p3_x4_o1, &p3_x4_o2,
1125
- &p3_x5_o1, &p3_x5_o2, &p3_x6_o1, &p3_x6_o2, &p3_x7_o1, &p3_x7_o2, &p3_x8_o1, &p3_x8_o2};
1126
-
1127
- // Uscite PWM
1128
- volatile U16 p3_x1_pwm = 2048;
1129
- volatile U16 p3_x2_pwm = 2048;
1130
- volatile U16 p3_x3_pwm = 2048;
1131
- volatile U16 p3_x4_pwm = 2048;
1132
- volatile U16 p3_x5_pwm = 2048;
1133
- volatile U16 p3_x6_pwm = 2048;
1134
- volatile U16 p3_x7_pwm = 2048;
1135
- volatile U16 p3_x8_pwm = 2048;
1136
-
1137
- U16 *p3__xn_pwms__[] = {&p3_x1_pwm, &p3_x2_pwm, &p3_x3_pwm, &p3_x4_pwm, &p3_x5_pwm, &p3_x6_pwm, &p3_x7_pwm, &p3_x8_pwm};
1138
- #endif
1139
-
1140
- #if PUZZLE_PERIFS >= 5
1141
- volatile char p4_xn_config[] = { C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY,
1142
- C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY};
1143
- volatile long p4_encoder1, p4_encoder2;
1144
- // EXP - INGRESSI E USCITE
1145
- volatile char p4_i1, p4_i2, p4_i3, p4_i4, p4_i5, p4_i6, p4_i7, p4_i8, p4_i9, p4_i10, p4_i11,
1146
- p4_i12, p4_i13, p4_i14, p4_i15, p4_i16, p4_i17, p4_i18, p4_i19, p4_i20, p4_i21,
1147
- p4_i22, p4_i23, p4_i24, p4_i25, p4_i26, p4_i27, p4_i28, p4_i29, p4_i30, p4_i31,
1148
- p4_i32, p4_i33, p4_i34, p4_i35, p4_i36, p4_i37, p4_i38, p4_i39, p4_i40, p4_i41,
1149
- p4_i42, p4_i43, p4_i44, p4_i45, p4_i46, p4_i47, p4_i48, p4_i49, p4_i50, p4_i51,
1150
- p4_i52, p4_i53, p4_i54, p4_i55, p4_i56, p4_i57, p4_i58, p4_i59, p4_i60, p4_i61,
1151
- p4_i62, p4_i63, p4_i64;
1152
- volatile unsigned char *p4__i__[] = {&p4_i1, &p4_i2, &p4_i3, &p4_i4, &p4_i5,
1153
- &p4_i6, &p4_i7, &p4_i8, &p4_i9, &p4_i10,
1154
- &p4_i11, &p4_i12, &p4_i13, &p4_i14, &p4_i15,
1155
- &p4_i16, &p4_i17, &p4_i18, &p4_i19, &p4_i20,
1156
- &p4_i21, &p4_i22, &p4_i23, &p4_i24, &p4_i25,
1157
- &p4_i26, &p4_i27, &p4_i28, &p4_i29, &p4_i30,
1158
- &p4_i31, &p4_i32, &p4_i33, &p4_i34, &p4_i35,
1159
- &p4_i36, &p4_i37, &p4_i38, &p4_i39, &p4_i40,
1160
- &p4_i41, &p4_i42, &p4_i43, &p4_i44, &p4_i45,
1161
- &p4_i46, &p4_i47, &p4_i48, &p4_i49, &p4_i50,
1162
- &p4_i51, &p4_i52, &p4_i53, &p4_i54, &p4_i55,
1163
- &p4_i56, &p4_i57, &p4_i58, &p4_i59, &p4_i60,
1164
- &p4_i61, &p4_i62, &p4_i63, &p4_i64};
1165
- volatile char p4_o1, p4_o2, p4_o3, p4_o4, p4_o5, p4_o6, p4_o7, p4_o8, p4_o9, p4_o10,
1166
- p4_o11, p4_o12, p4_o13, p4_o14, p4_o15, p4_o16, p4_o17, p4_o18, p4_o19, p4_o20,
1167
- p4_o21, p4_o22, p4_o23, p4_o24, p4_o25, p4_o26, p4_o27, p4_o28, p4_o29, p4_o30,
1168
- p4_o31, p4_o32, p4_o33, p4_o34, p4_o35, p4_o36, p4_o37, p4_o38, p4_o39, p4_o40,
1169
- p4_o41, p4_o42, p4_o43, p4_o44, p4_o45, p4_o46, p4_o47, p4_o48, p4_o49, p4_o50,
1170
- p4_o51, p4_o52, p4_o53, p4_o54, p4_o55, p4_o56, p4_o57, p4_o58, p4_o59, p4_o60,
1171
- p4_o61, p4_o62, p4_o63, p4_o64;
1172
- volatile unsigned char *p4__o__[] = {&p4_o1, &p4_o2, &p4_o3, &p4_o4, &p4_o5,
1173
- &p4_o6, &p4_o7, &p4_o8, &p4_o9, &p4_o10,
1174
- &p4_o11, &p4_o12, &p4_o13, &p4_o14, &p4_o15,
1175
- &p4_o16, &p4_o17, &p4_o18, &p4_o19, &p4_o20,
1176
- &p4_o21, &p4_o22, &p4_o23, &p4_o24, &p4_o25,
1177
- &p4_o26, &p4_o27, &p4_o28, &p4_o29, &p4_o30,
1178
- &p4_o31, &p4_o32, &p4_o33, &p4_o34, &p4_o35,
1179
- &p4_o36, &p4_o37, &p4_o38, &p4_o39, &p4_o40,
1180
- &p4_o41, &p4_o42, &p4_o43, &p4_o44, &p4_o45,
1181
- &p4_o46, &p4_o47, &p4_o48, &p4_o49, &p4_o50,
1182
- &p4_o51, &p4_o52, &p4_o53, &p4_o54, &p4_o55,
1183
- &p4_o56, &p4_o57, &p4_o58, &p4_o59, &p4_o60,
1184
- &p4_o61, &p4_o62, &p4_o63, &p4_o64};
1185
- // Input analogici
1186
- volatile int p4_x1_anal, p4_x2_anal, p4_x3_anal, p4_x4_anal, p4_x5_anal, p4_x6_anal, p4_x7_anal, p4_x8_anal;
1187
- volatile int* p4__xn_anal__[] = {&p4_x1_anal, &p4_x2_anal, &p4_x3_anal, &p4_x4_anal, &p4_x5_anal, &p4_x6_anal, &p4_x7_anal, &p4_x8_anal};
1188
-
1189
- // PT100 RAW
1190
- volatile int p4_x1_pt100_raw, p4_x2_pt100_raw, p4_x3_pt100_raw, p4_x4_pt100_raw,
1191
- p4_x5_pt100_raw, p4_x6_pt100_raw, p4_x7_pt100_raw, p4_x8_pt100_raw;
1192
- volatile int* p4__xn_pt100_raw__[] = {&p4_x1_pt100_raw, &p4_x2_pt100_raw, &p4_x3_pt100_raw, &p4_x4_pt100_raw,
1193
- &p4_x5_pt100_raw, &p4_x6_pt100_raw, &p4_x7_pt100_raw, &p4_x8_pt100_raw};
1194
-
1195
- // PT100 CELSIUS
1196
- float p4_x1_pt100, p4_x2_pt100, p4_x3_pt100, p4_x4_pt100, p4_x5_pt100, p4_x6_pt100, p4_x7_pt100, p4_x8_pt100;
1197
- volatile float* p4__xn_pt100__[] = {&p4_x1_pt100, &p4_x2_pt100, &p4_x3_pt100, &p4_x4_pt100, &p4_x5_pt100, &p4_x6_pt100, &p4_x7_pt100, &p4_x8_pt100};
1198
-
1199
-
1200
- // Ingressi digitali XN
1201
- volatile char p4_x1_digin, p4_x2_digin, p4_x3_digin, p4_x4_digin,
1202
- p4_x5_digin, p4_x6_digin, p4_x7_digin, p4_x8_digin;
1203
- volatile char *p4__xn_digin__[] = {&p4_x1_digin, &p4_x2_digin, &p4_x3_digin, &p4_x4_digin,
1204
- &p4_x5_digin, &p4_x6_digin, &p4_x7_digin, &p4_x8_digin};
1205
-
1206
- volatile char p4_x1_i1, p4_x1_i2, p4_x2_i1, p4_x2_i2, p4_x3_i1, p4_x3_i2, p4_x4_i1, p4_x4_i2,
1207
- p4_x5_i1, p4_x5_i2, p4_x6_i1, p4_x6_i2, p4_x7_i1, p4_x7_i2, p4_x8_i1, p4_x8_i2;
1208
-
1209
- // Uscite digitali XN
1210
- volatile char p4_x1_o1, p4_x1_o2, p4_x2_o1, p4_x2_o2, p4_x3_o1, p4_x3_o2, p4_x4_o1, p4_x4_o2,
1211
- p4_x5_o1, p4_x5_o2, p4_x6_o1, p4_x6_o2, p4_x7_o1, p4_x7_o2, p4_x8_o1, p4_x8_o2;
1212
- char *p4__xn_outs__[] = {&p4_x1_o1, &p4_x1_o2, &p4_x2_o1, &p4_x2_o2, &p4_x3_o1, &p4_x3_o2, &p4_x4_o1, &p4_x4_o2,
1213
- &p4_x5_o1, &p4_x5_o2, &p4_x6_o1, &p4_x6_o2, &p4_x7_o1, &p4_x7_o2, &p4_x8_o1, &p4_x8_o2};
1214
-
1215
- // Uscite PWM
1216
- volatile U16 p4_x1_pwm = 2048;
1217
- volatile U16 p4_x2_pwm = 2048;
1218
- volatile U16 p4_x3_pwm = 2048;
1219
- volatile U16 p4_x4_pwm = 2048;
1220
- volatile U16 p4_x5_pwm = 2048;
1221
- volatile U16 p4_x6_pwm = 2048;
1222
- volatile U16 p4_x7_pwm = 2048;
1223
- volatile U16 p4_x8_pwm = 2048;
1224
-
1225
- U16 *p4__xn_pwms__[] = {&p4_x1_pwm, &p4_x2_pwm, &p4_x3_pwm, &p4_x4_pwm, &p4_x5_pwm, &p4_x6_pwm, &p4_x7_pwm, &p4_x8_pwm};
1226
- #endif
1227
-
1228
- #if PUZZLE_PERIFS >= 6
1229
- volatile char p5_xn_config[] = { C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY,
1230
- C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY};
1231
- volatile long p5_encoder1, p5_encoder2;
1232
- // EXP - INGRESSI E USCITE
1233
- volatile char p5_i1, p5_i2, p5_i3, p5_i4, p5_i5, p5_i6, p5_i7, p5_i8, p5_i9, p5_i10, p5_i11,
1234
- p5_i12, p5_i13, p5_i14, p5_i15, p5_i16, p5_i17, p5_i18, p5_i19, p5_i20, p5_i21,
1235
- p5_i22, p5_i23, p5_i24, p5_i25, p5_i26, p5_i27, p5_i28, p5_i29, p5_i30, p5_i31,
1236
- p5_i32, p5_i33, p5_i34, p5_i35, p5_i36, p5_i37, p5_i38, p5_i39, p5_i40, p5_i41,
1237
- p5_i42, p5_i43, p5_i44, p5_i45, p5_i46, p5_i47, p5_i48, p5_i49, p5_i50, p5_i51,
1238
- p5_i52, p5_i53, p5_i54, p5_i55, p5_i56, p5_i57, p5_i58, p5_i59, p5_i60, p5_i61,
1239
- p5_i62, p5_i63, p5_i64;
1240
- volatile unsigned char *p5__i__[] = {&p5_i1, &p5_i2, &p5_i3, &p5_i4, &p5_i5,
1241
- &p5_i6, &p5_i7, &p5_i8, &p5_i9, &p5_i10,
1242
- &p5_i11, &p5_i12, &p5_i13, &p5_i14, &p5_i15,
1243
- &p5_i16, &p5_i17, &p5_i18, &p5_i19, &p5_i20,
1244
- &p5_i21, &p5_i22, &p5_i23, &p5_i24, &p5_i25,
1245
- &p5_i26, &p5_i27, &p5_i28, &p5_i29, &p5_i30,
1246
- &p5_i31, &p5_i32, &p5_i33, &p5_i34, &p5_i35,
1247
- &p5_i36, &p5_i37, &p5_i38, &p5_i39, &p5_i40,
1248
- &p5_i41, &p5_i42, &p5_i43, &p5_i44, &p5_i45,
1249
- &p5_i46, &p5_i47, &p5_i48, &p5_i49, &p5_i50,
1250
- &p5_i51, &p5_i52, &p5_i53, &p5_i54, &p5_i55,
1251
- &p5_i56, &p5_i57, &p5_i58, &p5_i59, &p5_i60,
1252
- &p5_i61, &p5_i62, &p5_i63, &p5_i64};
1253
- volatile char p5_o1, p5_o2, p5_o3, p5_o4, p5_o5, p5_o6, p5_o7, p5_o8, p5_o9, p5_o10,
1254
- p5_o11, p5_o12, p5_o13, p5_o14, p5_o15, p5_o16, p5_o17, p5_o18, p5_o19, p5_o20,
1255
- p5_o21, p5_o22, p5_o23, p5_o24, p5_o25, p5_o26, p5_o27, p5_o28, p5_o29, p5_o30,
1256
- p5_o31, p5_o32, p5_o33, p5_o34, p5_o35, p5_o36, p5_o37, p5_o38, p5_o39, p5_o40,
1257
- p5_o41, p5_o42, p5_o43, p5_o44, p5_o45, p5_o46, p5_o47, p5_o48, p5_o49, p5_o50,
1258
- p5_o51, p5_o52, p5_o53, p5_o54, p5_o55, p5_o56, p5_o57, p5_o58, p5_o59, p5_o60,
1259
- p5_o61, p5_o62, p5_o63, p5_o64;
1260
- volatile unsigned char *p5__o__[] = {&p5_o1, &p5_o2, &p5_o3, &p5_o4, &p5_o5,
1261
- &p5_o6, &p5_o7, &p5_o8, &p5_o9, &p5_o10,
1262
- &p5_o11, &p5_o12, &p5_o13, &p5_o14, &p5_o15,
1263
- &p5_o16, &p5_o17, &p5_o18, &p5_o19, &p5_o20,
1264
- &p5_o21, &p5_o22, &p5_o23, &p5_o24, &p5_o25,
1265
- &p5_o26, &p5_o27, &p5_o28, &p5_o29, &p5_o30,
1266
- &p5_o31, &p5_o32, &p5_o33, &p5_o34, &p5_o35,
1267
- &p5_o36, &p5_o37, &p5_o38, &p5_o39, &p5_o40,
1268
- &p5_o41, &p5_o42, &p5_o43, &p5_o44, &p5_o45,
1269
- &p5_o46, &p5_o47, &p5_o48, &p5_o49, &p5_o50,
1270
- &p5_o51, &p5_o52, &p5_o53, &p5_o54, &p5_o55,
1271
- &p5_o56, &p5_o57, &p5_o58, &p5_o59, &p5_o60,
1272
- &p5_o61, &p5_o62, &p5_o63, &p5_o64};
1273
- // Input analogici
1274
- volatile int p5_x1_anal, p5_x2_anal, p5_x3_anal, p5_x4_anal, p5_x5_anal, p5_x6_anal, p5_x7_anal, p5_x8_anal;
1275
- volatile int* p5__xn_anal__[] = {&p5_x1_anal, &p5_x2_anal, &p5_x3_anal, &p5_x4_anal, &p5_x5_anal, &p5_x6_anal, &p5_x7_anal, &p5_x8_anal};
1276
-
1277
- // PT100 RAW
1278
- volatile int p5_x1_pt100_raw, p5_x2_pt100_raw, p5_x3_pt100_raw, p5_x4_pt100_raw,
1279
- p5_x5_pt100_raw, p5_x6_pt100_raw, p5_x7_pt100_raw, p5_x8_pt100_raw;
1280
- volatile int* p5__xn_pt100_raw__[] = {&p5_x1_pt100_raw, &p5_x2_pt100_raw, &p5_x3_pt100_raw, &p5_x4_pt100_raw,
1281
- &p5_x5_pt100_raw, &p5_x6_pt100_raw, &p5_x7_pt100_raw, &p5_x8_pt100_raw};
1282
-
1283
- // PT100 CELSIUS
1284
- float p5_x1_pt100, p5_x2_pt100, p5_x3_pt100, p5_x4_pt100, p5_x5_pt100, p5_x6_pt100, p5_x7_pt100, p5_x8_pt100;
1285
- volatile float* p5__xn_pt100__[] = {&p5_x1_pt100, &p5_x2_pt100, &p5_x3_pt100, &p5_x4_pt100, &p5_x5_pt100, &p5_x6_pt100, &p5_x7_pt100, &p5_x8_pt100};
1286
-
1287
-
1288
- // Ingressi digitali XN
1289
- volatile char p5_x1_digin, p5_x2_digin, p5_x3_digin, p5_x4_digin,
1290
- p5_x5_digin, p5_x6_digin, p5_x7_digin, p5_x8_digin;
1291
- volatile char *p5__xn_digin__[] = {&p5_x1_digin, &p5_x2_digin, &p5_x3_digin, &p5_x4_digin,
1292
- &p5_x5_digin, &p5_x6_digin, &p5_x7_digin, &p5_x8_digin};
1293
-
1294
- volatile char p5_x1_i1, p5_x1_i2, p5_x2_i1, p5_x2_i2, p5_x3_i1, p5_x3_i2, p5_x4_i1, p5_x4_i2,
1295
- p5_x5_i1, p5_x5_i2, p5_x6_i1, p5_x6_i2, p5_x7_i1, p5_x7_i2, p5_x8_i1, p5_x8_i2;
1296
-
1297
- // Uscite digitali XN
1298
- volatile char p5_x1_o1, p5_x1_o2, p5_x2_o1, p5_x2_o2, p5_x3_o1, p5_x3_o2, p5_x4_o1, p5_x4_o2,
1299
- p5_x5_o1, p5_x5_o2, p5_x6_o1, p5_x6_o2, p5_x7_o1, p5_x7_o2, p5_x8_o1, p5_x8_o2;
1300
- char *p5__xn_outs__[] = {&p5_x1_o1, &p5_x1_o2, &p5_x2_o1, &p5_x2_o2, &p5_x3_o1, &p5_x3_o2, &p5_x4_o1, &p5_x4_o2,
1301
- &p5_x5_o1, &p5_x5_o2, &p5_x6_o1, &p5_x6_o2, &p5_x7_o1, &p5_x7_o2, &p5_x8_o1, &p5_x8_o2};
1302
-
1303
- // Uscite PWM
1304
- volatile U16 p5_x1_pwm = 2048;
1305
- volatile U16 p5_x2_pwm = 2048;
1306
- volatile U16 p5_x3_pwm = 2048;
1307
- volatile U16 p5_x4_pwm = 2048;
1308
- volatile U16 p5_x5_pwm = 2048;
1309
- volatile U16 p5_x6_pwm = 2048;
1310
- volatile U16 p5_x7_pwm = 2048;
1311
- volatile U16 p5_x8_pwm = 2048;
1312
-
1313
- U16 *p5__xn_pwms__[] = {&p5_x1_pwm, &p5_x2_pwm, &p5_x3_pwm, &p5_x4_pwm, &p5_x5_pwm, &p5_x6_pwm, &p5_x7_pwm, &p5_x8_pwm};
1314
- #endif
1315
-
1316
- #if PUZZLE_PERIFS >= 7
1317
- volatile char p6_xn_config[] = { C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY,
1318
- C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY};
1319
- volatile long p6_encoder1, p6_encoder2;
1320
- // EXP - INGRESSI E USCITE
1321
- volatile char p6_i1, p6_i2, p6_i3, p6_i4, p6_i5, p6_i6, p6_i7, p6_i8, p6_i9, p6_i10, p6_i11,
1322
- p6_i12, p6_i13, p6_i14, p6_i15, p6_i16, p6_i17, p6_i18, p6_i19, p6_i20, p6_i21,
1323
- p6_i22, p6_i23, p6_i24, p6_i25, p6_i26, p6_i27, p6_i28, p6_i29, p6_i30, p6_i31,
1324
- p6_i32, p6_i33, p6_i34, p6_i35, p6_i36, p6_i37, p6_i38, p6_i39, p6_i40, p6_i41,
1325
- p6_i42, p6_i43, p6_i44, p6_i45, p6_i46, p6_i47, p6_i48, p6_i49, p6_i50, p6_i51,
1326
- p6_i52, p6_i53, p6_i54, p6_i55, p6_i56, p6_i57, p6_i58, p6_i59, p6_i60, p6_i61,
1327
- p6_i62, p6_i63, p6_i64;
1328
- volatile unsigned char *p6__i__[] = {&p6_i1, &p6_i2, &p6_i3, &p6_i4, &p6_i5,
1329
- &p6_i6, &p6_i7, &p6_i8, &p6_i9, &p6_i10,
1330
- &p6_i11, &p6_i12, &p6_i13, &p6_i14, &p6_i15,
1331
- &p6_i16, &p6_i17, &p6_i18, &p6_i19, &p6_i20,
1332
- &p6_i21, &p6_i22, &p6_i23, &p6_i24, &p6_i25,
1333
- &p6_i26, &p6_i27, &p6_i28, &p6_i29, &p6_i30,
1334
- &p6_i31, &p6_i32, &p6_i33, &p6_i34, &p6_i35,
1335
- &p6_i36, &p6_i37, &p6_i38, &p6_i39, &p6_i40,
1336
- &p6_i41, &p6_i42, &p6_i43, &p6_i44, &p6_i45,
1337
- &p6_i46, &p6_i47, &p6_i48, &p6_i49, &p6_i50,
1338
- &p6_i51, &p6_i52, &p6_i53, &p6_i54, &p6_i55,
1339
- &p6_i56, &p6_i57, &p6_i58, &p6_i59, &p6_i60,
1340
- &p6_i61, &p6_i62, &p6_i63, &p6_i64};
1341
- volatile char p6_o1, p6_o2, p6_o3, p6_o4, p6_o5, p6_o6, p6_o7, p6_o8, p6_o9, p6_o10,
1342
- p6_o11, p6_o12, p6_o13, p6_o14, p6_o15, p6_o16, p6_o17, p6_o18, p6_o19, p6_o20,
1343
- p6_o21, p6_o22, p6_o23, p6_o24, p6_o25, p6_o26, p6_o27, p6_o28, p6_o29, p6_o30,
1344
- p6_o31, p6_o32, p6_o33, p6_o34, p6_o35, p6_o36, p6_o37, p6_o38, p6_o39, p6_o40,
1345
- p6_o41, p6_o42, p6_o43, p6_o44, p6_o45, p6_o46, p6_o47, p6_o48, p6_o49, p6_o50,
1346
- p6_o51, p6_o52, p6_o53, p6_o54, p6_o55, p6_o56, p6_o57, p6_o58, p6_o59, p6_o60,
1347
- p6_o61, p6_o62, p6_o63, p6_o64;
1348
- volatile unsigned char *p6__o__[] = {&p6_o1, &p6_o2, &p6_o3, &p6_o4, &p6_o5,
1349
- &p6_o6, &p6_o7, &p6_o8, &p6_o9, &p6_o10,
1350
- &p6_o11, &p6_o12, &p6_o13, &p6_o14, &p6_o15,
1351
- &p6_o16, &p6_o17, &p6_o18, &p6_o19, &p6_o20,
1352
- &p6_o21, &p6_o22, &p6_o23, &p6_o24, &p6_o25,
1353
- &p6_o26, &p6_o27, &p6_o28, &p6_o29, &p6_o30,
1354
- &p6_o31, &p6_o32, &p6_o33, &p6_o34, &p6_o35,
1355
- &p6_o36, &p6_o37, &p6_o38, &p6_o39, &p6_o40,
1356
- &p6_o41, &p6_o42, &p6_o43, &p6_o44, &p6_o45,
1357
- &p6_o46, &p6_o47, &p6_o48, &p6_o49, &p6_o50,
1358
- &p6_o51, &p6_o52, &p6_o53, &p6_o54, &p6_o55,
1359
- &p6_o56, &p6_o57, &p6_o58, &p6_o59, &p6_o60,
1360
- &p6_o61, &p6_o62, &p6_o63, &p6_o64};
1361
- // Input analogici
1362
- volatile int p6_x1_anal, p6_x2_anal, p6_x3_anal, p6_x4_anal, p6_x5_anal, p6_x6_anal, p6_x7_anal, p6_x8_anal;
1363
- volatile int* p6__xn_anal__[] = {&p6_x1_anal, &p6_x2_anal, &p6_x3_anal, &p6_x4_anal, &p6_x5_anal, &p6_x6_anal, &p6_x7_anal, &p6_x8_anal};
1364
-
1365
- // PT100 RAW
1366
- volatile int p6_x1_pt100_raw, p6_x2_pt100_raw, p6_x3_pt100_raw, p6_x4_pt100_raw,
1367
- p6_x5_pt100_raw, p6_x6_pt100_raw, p6_x7_pt100_raw, p6_x8_pt100_raw;
1368
- volatile int* p6__xn_pt100_raw__[] = {&p6_x1_pt100_raw, &p6_x2_pt100_raw, &p6_x3_pt100_raw, &p6_x4_pt100_raw,
1369
- &p6_x5_pt100_raw, &p6_x6_pt100_raw, &p6_x7_pt100_raw, &p6_x8_pt100_raw};
1370
-
1371
- // PT100 CELSIUS
1372
- float p6_x1_pt100, p6_x2_pt100, p6_x3_pt100, p6_x4_pt100, p6_x5_pt100, p6_x6_pt100, p6_x7_pt100, p6_x8_pt100;
1373
- volatile float* p6__xn_pt100__[] = {&p6_x1_pt100, &p6_x2_pt100, &p6_x3_pt100, &p6_x4_pt100, &p6_x5_pt100, &p6_x6_pt100, &p6_x7_pt100, &p6_x8_pt100};
1374
-
1375
-
1376
- // Ingressi digitali XN
1377
- volatile char p6_x1_digin, p6_x2_digin, p6_x3_digin, p6_x4_digin,
1378
- p6_x5_digin, p6_x6_digin, p6_x7_digin, p6_x8_digin;
1379
- volatile char *p6__xn_digin__[] = {&p6_x1_digin, &p6_x2_digin, &p6_x3_digin, &p6_x4_digin,
1380
- &p6_x5_digin, &p6_x6_digin, &p6_x7_digin, &p6_x8_digin};
1381
-
1382
- volatile char p6_x1_i1, p6_x1_i2, p6_x2_i1, p6_x2_i2, p6_x3_i1, p6_x3_i2, p6_x4_i1, p6_x4_i2,
1383
- p6_x5_i1, p6_x5_i2, p6_x6_i1, p6_x6_i2, p6_x7_i1, p6_x7_i2, p6_x8_i1, p6_x8_i2;
1384
-
1385
- // Uscite digitali XN
1386
- volatile char p6_x1_o1, p6_x1_o2, p6_x2_o1, p6_x2_o2, p6_x3_o1, p6_x3_o2, p6_x4_o1, p6_x4_o2,
1387
- p6_x5_o1, p6_x5_o2, p6_x6_o1, p6_x6_o2, p6_x7_o1, p6_x7_o2, p6_x8_o1, p6_x8_o2;
1388
- char *p6__xn_outs__[] = {&p6_x1_o1, &p6_x1_o2, &p6_x2_o1, &p6_x2_o2, &p6_x3_o1, &p6_x3_o2, &p6_x4_o1, &p6_x4_o2,
1389
- &p6_x5_o1, &p6_x5_o2, &p6_x6_o1, &p6_x6_o2, &p6_x7_o1, &p6_x7_o2, &p6_x8_o1, &p6_x8_o2};
1390
-
1391
- // Uscite PWM
1392
- volatile U16 p6_x1_pwm = 2048;
1393
- volatile U16 p6_x2_pwm = 2048;
1394
- volatile U16 p6_x3_pwm = 2048;
1395
- volatile U16 p6_x4_pwm = 2048;
1396
- volatile U16 p6_x5_pwm = 2048;
1397
- volatile U16 p6_x6_pwm = 2048;
1398
- volatile U16 p6_x7_pwm = 2048;
1399
- volatile U16 p6_x8_pwm = 2048;
1400
-
1401
- U16 *p6__xn_pwms__[] = {&p6_x1_pwm, &p6_x2_pwm, &p6_x3_pwm, &p6_x4_pwm, &p6_x5_pwm, &p6_x6_pwm, &p6_x7_pwm, &p6_x8_pwm};
1402
- #endif
1403
-
1404
- #if PUZZLE_PERIFS >= 8
1405
- volatile char p7_xn_config[] = { C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY,
1406
- C_EMPTY, C_EMPTY, C_EMPTY, C_EMPTY};
1407
- volatile long p7_encoder1, p7_encoder2;
1408
- // EXP - INGRESSI E USCITE
1409
- volatile char p7_i1, p7_i2, p7_i3, p7_i4, p7_i5, p7_i6, p7_i7, p7_i8, p7_i9, p7_i10, p7_i11,
1410
- p7_i12, p7_i13, p7_i14, p7_i15, p7_i16, p7_i17, p7_i18, p7_i19, p7_i20, p7_i21,
1411
- p7_i22, p7_i23, p7_i24, p7_i25, p7_i26, p7_i27, p7_i28, p7_i29, p7_i30, p7_i31,
1412
- p7_i32, p7_i33, p7_i34, p7_i35, p7_i36, p7_i37, p7_i38, p7_i39, p7_i40, p7_i41,
1413
- p7_i42, p7_i43, p7_i44, p7_i45, p7_i46, p7_i47, p7_i48, p7_i49, p7_i50, p7_i51,
1414
- p7_i52, p7_i53, p7_i54, p7_i55, p7_i56, p7_i57, p7_i58, p7_i59, p7_i60, p7_i61,
1415
- p7_i62, p7_i63, p7_i64;
1416
- volatile unsigned char *p7__i__[] = {&p7_i1, &p7_i2, &p7_i3, &p7_i4, &p7_i5,
1417
- &p7_i6, &p7_i7, &p7_i8, &p7_i9, &p7_i10,
1418
- &p7_i11, &p7_i12, &p7_i13, &p7_i14, &p7_i15,
1419
- &p7_i16, &p7_i17, &p7_i18, &p7_i19, &p7_i20,
1420
- &p7_i21, &p7_i22, &p7_i23, &p7_i24, &p7_i25,
1421
- &p7_i26, &p7_i27, &p7_i28, &p7_i29, &p7_i30,
1422
- &p7_i31, &p7_i32, &p7_i33, &p7_i34, &p7_i35,
1423
- &p7_i36, &p7_i37, &p7_i38, &p7_i39, &p7_i40,
1424
- &p7_i41, &p7_i42, &p7_i43, &p7_i44, &p7_i45,
1425
- &p7_i46, &p7_i47, &p7_i48, &p7_i49, &p7_i50,
1426
- &p7_i51, &p7_i52, &p7_i53, &p7_i54, &p7_i55,
1427
- &p7_i56, &p7_i57, &p7_i58, &p7_i59, &p7_i60,
1428
- &p7_i61, &p7_i62, &p7_i63, &p7_i64};
1429
- volatile char p7_o1, p7_o2, p7_o3, p7_o4, p7_o5, p7_o6, p7_o7, p7_o8, p7_o9, p7_o10,
1430
- p7_o11, p7_o12, p7_o13, p7_o14, p7_o15, p7_o16, p7_o17, p7_o18, p7_o19, p7_o20,
1431
- p7_o21, p7_o22, p7_o23, p7_o24, p7_o25, p7_o26, p7_o27, p7_o28, p7_o29, p7_o30,
1432
- p7_o31, p7_o32, p7_o33, p7_o34, p7_o35, p7_o36, p7_o37, p7_o38, p7_o39, p7_o40,
1433
- p7_o41, p7_o42, p7_o43, p7_o44, p7_o45, p7_o46, p7_o47, p7_o48, p7_o49, p7_o50,
1434
- p7_o51, p7_o52, p7_o53, p7_o54, p7_o55, p7_o56, p7_o57, p7_o58, p7_o59, p7_o60,
1435
- p7_o61, p7_o62, p7_o63, p7_o64;
1436
- volatile unsigned char *p7__o__[] = {&p7_o1, &p7_o2, &p7_o3, &p7_o4, &p7_o5,
1437
- &p7_o6, &p7_o7, &p7_o8, &p7_o9, &p7_o10,
1438
- &p7_o11, &p7_o12, &p7_o13, &p7_o14, &p7_o15,
1439
- &p7_o16, &p7_o17, &p7_o18, &p7_o19, &p7_o20,
1440
- &p7_o21, &p7_o22, &p7_o23, &p7_o24, &p7_o25,
1441
- &p7_o26, &p7_o27, &p7_o28, &p7_o29, &p7_o30,
1442
- &p7_o31, &p7_o32, &p7_o33, &p7_o34, &p7_o35,
1443
- &p7_o36, &p7_o37, &p7_o38, &p7_o39, &p7_o40,
1444
- &p7_o41, &p7_o42, &p7_o43, &p7_o44, &p7_o45,
1445
- &p7_o46, &p7_o47, &p7_o48, &p7_o49, &p7_o50,
1446
- &p7_o51, &p7_o52, &p7_o53, &p7_o54, &p7_o55,
1447
- &p7_o56, &p7_o57, &p7_o58, &p7_o59, &p7_o60,
1448
- &p7_o61, &p7_o62, &p7_o63, &p7_o64};
1449
- // Input analogici
1450
- volatile int p7_x1_anal, p7_x2_anal, p7_x3_anal, p7_x4_anal, p7_x5_anal, p7_x6_anal, p7_x7_anal, p7_x8_anal;
1451
- volatile int* p7__xn_anal__[] = {&p7_x1_anal, &p7_x2_anal, &p7_x3_anal, &p7_x4_anal, &p7_x5_anal, &p7_x6_anal, &p7_x7_anal, &p7_x8_anal};
1452
-
1453
- // PT100 RAW
1454
- volatile int p7_x1_pt100_raw, p7_x2_pt100_raw, p7_x3_pt100_raw, p7_x4_pt100_raw,
1455
- p7_x5_pt100_raw, p7_x6_pt100_raw, p7_x7_pt100_raw, p7_x8_pt100_raw;
1456
- volatile int* p7__xn_pt100_raw__[] = {&p7_x1_pt100_raw, &p7_x2_pt100_raw, &p7_x3_pt100_raw, &p7_x4_pt100_raw,
1457
- &p7_x5_pt100_raw, &p7_x6_pt100_raw, &p7_x7_pt100_raw, &p7_x8_pt100_raw};
1458
-
1459
- // PT100 CELSIUS
1460
- float p7_x1_pt100, p7_x2_pt100, p7_x3_pt100, p7_x4_pt100, p7_x5_pt100, p7_x6_pt100, p7_x7_pt100, p7_x8_pt100;
1461
- volatile float* p7__xn_pt100__[] = {&p7_x1_pt100, &p7_x2_pt100, &p7_x3_pt100, &p7_x4_pt100, &p7_x5_pt100, &p7_x6_pt100, &p7_x7_pt100, &p7_x8_pt100};
1462
-
1463
-
1464
- // Ingressi digitali XN
1465
- volatile char p7_x1_digin, p7_x2_digin, p7_x3_digin, p7_x4_digin,
1466
- p7_x5_digin, p7_x6_digin, p7_x7_digin, p7_x8_digin;
1467
- volatile char *p7__xn_digin__[] = {&p7_x1_digin, &p7_x2_digin, &p7_x3_digin, &p7_x4_digin,
1468
- &p7_x5_digin, &p7_x6_digin, &p7_x7_digin, &p7_x8_digin};
1469
-
1470
- volatile char p7_x1_i1, p7_x1_i2, p7_x2_i1, p7_x2_i2, p7_x3_i1, p7_x3_i2, p7_x4_i1, p7_x4_i2,
1471
- p7_x5_i1, p7_x5_i2, p7_x6_i1, p7_x6_i2, p7_x7_i1, p7_x7_i2, p7_x8_i1, p7_x8_i2;
1472
-
1473
- // Uscite digitali XN
1474
- volatile char p7_x1_o1, p7_x1_o2, p7_x2_o1, p7_x2_o2, p7_x3_o1, p7_x3_o2, p7_x4_o1, p7_x4_o2,
1475
- p7_x5_o1, p7_x5_o2, p7_x6_o1, p7_x6_o2, p7_x7_o1, p7_x7_o2, p7_x8_o1, p7_x8_o2;
1476
- char *p7__xn_outs__[] = {&p7_x1_o1, &p7_x1_o2, &p7_x2_o1, &p7_x2_o2, &p7_x3_o1, &p7_x3_o2, &p7_x4_o1, &p7_x4_o2,
1477
- &p7_x5_o1, &p7_x5_o2, &p7_x6_o1, &p7_x6_o2, &p7_x7_o1, &p7_x7_o2, &p7_x8_o1, &p7_x8_o2};
1478
-
1479
- // Uscite PWM
1480
- volatile U16 p7_x1_pwm = 2048;
1481
- volatile U16 p7_x2_pwm = 2048;
1482
- volatile U16 p7_x3_pwm = 2048;
1483
- volatile U16 p7_x4_pwm = 2048;
1484
- volatile U16 p7_x5_pwm = 2048;
1485
- volatile U16 p7_x6_pwm = 2048;
1486
- volatile U16 p7_x7_pwm = 2048;
1487
- volatile U16 p7_x8_pwm = 2048;
1488
-
1489
- U16 *p7__xn_pwms__[] = {&p7_x1_pwm, &p7_x2_pwm, &p7_x3_pwm, &p7_x4_pwm, &p7_x5_pwm, &p7_x6_pwm, &p7_x7_pwm, &p7_x8_pwm};
1490
- #endif
1491
-
1492
- //---------------------- CAN ------------------------------------
1493
- int ntx_frame = 0;
1494
- CANBASE_MSG CAN_TXBuf;
1495
- CANBASE_MSG CAN_RXBuf;
1496
-
1497
- int puzzle_can_cnt = 0;
1498
- int puzzle_can_rx_cnt = 0;
1499
- int puzzle_nperif = 0; // serve per ciclare sulle periferiche nel task di invio frame
1500
-
1501
- void puzzle_prepare_perif(int); // nperif
1502
- void puzzle_parse_perif(int); // nperif
1503
-
1504
- void puzzle_send_frame(int, int); // nperif, nframe
1505
- void puzzle_parse_frame(CANBASE_MSG);
1506
-
1507
- void puzzle_prepare_perif(int nper)
1508
- {
1509
- int i;
1510
-
1511
- switch (nper) {
1512
- case 0: // PERIF 0
1513
- // config
1514
- for (i = 0; i < 8; i++) p50_xn_config[i] = xn_config[i];
1515
- // dig outs
1516
- p50_x1_o1 = x1_o1; p50_x1_o2 = x1_o2;
1517
- p50_x2_o1 = x2_o1; p50_x2_o2 = x2_o2;
1518
- p50_x3_o1 = x3_o1; p50_x3_o2 = x3_o2;
1519
- p50_x4_o1 = x4_o1; p50_x4_o2 = x4_o2;
1520
- p50_x5_o1 = x5_o1; p50_x5_o2 = x5_o2;
1521
- p50_x6_o1 = x6_o1; p50_x6_o2 = x6_o2;
1522
- p50_x7_o1 = x7_o1; p50_x7_o2 = x7_o2;
1523
- p50_x8_o1 = x8_o1; p50_x8_o2 = x8_o2;
1524
- // pwms
1525
- p50_x1_pwm = x1_pwm;
1526
- p50_x2_pwm = x2_pwm;
1527
- p50_x3_pwm = x3_pwm;
1528
- p50_x4_pwm = x4_pwm;
1529
- p50_x5_pwm = x5_pwm;
1530
- p50_x6_pwm = x6_pwm;
1531
- p50_x7_pwm = x7_pwm;
1532
- p50_x8_pwm = x8_pwm;
1533
- // exp
1534
- p50_o_low = 0;
1535
- p50_o_high = 0;
1536
- for (i = 0; i < 32; i++) p50_o_low |= ((*p__o__[i] & 1) << i);
1537
- for (i = 0; i < 32; i++) p50_o_high |= ((*p__o__[i+32] & 1) << i);
1538
- break;
1539
- #if PUZZLE_PERIFS >= 2
1540
- case 1: // PERIF 1
1541
- // config
1542
- for (i = 0; i < 8; i++) p50_xn_config[i] = p1_xn_config[i];
1543
- // dig outs
1544
- p50_x1_o1 = p1_x1_o1; p50_x1_o2 = p1_x1_o2;
1545
- p50_x2_o1 = p1_x2_o1; p50_x2_o2 = p1_x2_o2;
1546
- p50_x3_o1 = p1_x3_o1; p50_x3_o2 = p1_x3_o2;
1547
- p50_x4_o1 = p1_x4_o1; p50_x4_o2 = p1_x4_o2;
1548
- p50_x5_o1 = p1_x5_o1; p50_x5_o2 = p1_x5_o2;
1549
- p50_x6_o1 = p1_x6_o1; p50_x6_o2 = p1_x6_o2;
1550
- p50_x7_o1 = p1_x7_o1; p50_x7_o2 = p1_x7_o2;
1551
- p50_x8_o1 = p1_x8_o1; p50_x8_o2 = p1_x8_o2;
1552
- // pwms
1553
- p50_x1_pwm = p1_x1_pwm;
1554
- p50_x2_pwm = p1_x2_pwm;
1555
- p50_x3_pwm = p1_x3_pwm;
1556
- p50_x4_pwm = p1_x4_pwm;
1557
- p50_x5_pwm = p1_x5_pwm;
1558
- p50_x6_pwm = p1_x6_pwm;
1559
- p50_x7_pwm = p1_x7_pwm;
1560
- p50_x8_pwm = p1_x8_pwm;
1561
- // exp
1562
- p50_o_low = 0;
1563
- p50_o_high = 0;
1564
- for (i = 0; i < 32; i++) p50_o_low |= ((*p1__o__[i] & 1) << i);
1565
- for (i = 0; i < 32; i++) p50_o_high |= ((*p1__o__[i+32] & 1) << i);
1566
- break;
1567
- #endif
1568
- #if PUZZLE_PERIFS >= 3
1569
- case 2: // PERIF 2
1570
- // config
1571
- for (i = 0; i < 8; i++) p50_xn_config[i] = p2_xn_config[i];
1572
- // dig outs
1573
- p50_x1_o1 = p2_x1_o1; p50_x1_o2 = p2_x1_o2;
1574
- p50_x2_o1 = p2_x2_o1; p50_x2_o2 = p2_x2_o2;
1575
- p50_x3_o1 = p2_x3_o1; p50_x3_o2 = p2_x3_o2;
1576
- p50_x4_o1 = p2_x4_o1; p50_x4_o2 = p2_x4_o2;
1577
- p50_x5_o1 = p2_x5_o1; p50_x5_o2 = p2_x5_o2;
1578
- p50_x6_o1 = p2_x6_o1; p50_x6_o2 = p2_x6_o2;
1579
- p50_x7_o1 = p2_x7_o1; p50_x7_o2 = p2_x7_o2;
1580
- p50_x8_o1 = p2_x8_o1; p50_x8_o2 = p2_x8_o2;
1581
- // pwms
1582
- p50_x1_pwm = p2_x1_pwm;
1583
- p50_x2_pwm = p2_x2_pwm;
1584
- p50_x3_pwm = p2_x3_pwm;
1585
- p50_x4_pwm = p2_x4_pwm;
1586
- p50_x5_pwm = p2_x5_pwm;
1587
- p50_x6_pwm = p2_x6_pwm;
1588
- p50_x7_pwm = p2_x7_pwm;
1589
- p50_x8_pwm = p2_x8_pwm;
1590
- // exp
1591
- p50_o_low = 0;
1592
- p50_o_high = 0;
1593
- for (i = 0; i < 32; i++) p50_o_low |= ((*p2__o__[i] & 1) << i);
1594
- for (i = 0; i < 32; i++) p50_o_high |= ((*p2__o__[i+32] & 1) << i);
1595
- break;
1596
- #endif
1597
- #if PUZZLE_PERIFS >= 4
1598
- case 3: // PERIF 3
1599
- // config
1600
- for (i = 0; i < 8; i++) p50_xn_config[i] = p3_xn_config[i];
1601
- // dig outs
1602
- p50_x1_o1 = p3_x1_o1; p50_x1_o2 = p3_x1_o2;
1603
- p50_x2_o1 = p3_x2_o1; p50_x2_o2 = p3_x2_o2;
1604
- p50_x3_o1 = p3_x3_o1; p50_x3_o2 = p3_x3_o2;
1605
- p50_x4_o1 = p3_x4_o1; p50_x4_o2 = p3_x4_o2;
1606
- p50_x5_o1 = p3_x5_o1; p50_x5_o2 = p3_x5_o2;
1607
- p50_x6_o1 = p3_x6_o1; p50_x6_o2 = p3_x6_o2;
1608
- p50_x7_o1 = p3_x7_o1; p50_x7_o2 = p3_x7_o2;
1609
- p50_x8_o1 = p3_x8_o1; p50_x8_o2 = p3_x8_o2;
1610
- // pwms
1611
- p50_x1_pwm = p3_x1_pwm;
1612
- p50_x2_pwm = p3_x2_pwm;
1613
- p50_x3_pwm = p3_x3_pwm;
1614
- p50_x4_pwm = p3_x4_pwm;
1615
- p50_x5_pwm = p3_x5_pwm;
1616
- p50_x6_pwm = p3_x6_pwm;
1617
- p50_x7_pwm = p3_x7_pwm;
1618
- p50_x8_pwm = p3_x8_pwm;
1619
- // exp
1620
- p50_o_low = 0;
1621
- p50_o_high = 0;
1622
- for (i = 0; i < 32; i++) p50_o_low |= ((*p3__o__[i] & 1) << i);
1623
- for (i = 0; i < 32; i++) p50_o_high |= ((*p3__o__[i+32] & 1) << i);
1624
- break;
1625
- #endif
1626
- #if PUZZLE_PERIFS >= 5
1627
- case 4: // PERIF 4
1628
- // config
1629
- for (i = 0; i < 8; i++) p50_xn_config[i] = p4_xn_config[i];
1630
- // dig outs
1631
- p50_x1_o1 = p4_x1_o1; p50_x1_o2 = p4_x1_o2;
1632
- p50_x2_o1 = p4_x2_o1; p50_x2_o2 = p4_x2_o2;
1633
- p50_x3_o1 = p4_x3_o1; p50_x3_o2 = p4_x3_o2;
1634
- p50_x4_o1 = p4_x4_o1; p50_x4_o2 = p4_x4_o2;
1635
- p50_x5_o1 = p4_x5_o1; p50_x5_o2 = p4_x5_o2;
1636
- p50_x6_o1 = p4_x6_o1; p50_x6_o2 = p4_x6_o2;
1637
- p50_x7_o1 = p4_x7_o1; p50_x7_o2 = p4_x7_o2;
1638
- p50_x8_o1 = p4_x8_o1; p50_x8_o2 = p4_x8_o2;
1639
- // pwms
1640
- p50_x1_pwm = p4_x1_pwm;
1641
- p50_x2_pwm = p4_x2_pwm;
1642
- p50_x3_pwm = p4_x3_pwm;
1643
- p50_x4_pwm = p4_x4_pwm;
1644
- p50_x5_pwm = p4_x5_pwm;
1645
- p50_x6_pwm = p4_x6_pwm;
1646
- p50_x7_pwm = p4_x7_pwm;
1647
- p50_x8_pwm = p4_x8_pwm;
1648
- // exp
1649
- p50_o_low = 0;
1650
- p50_o_high = 0;
1651
- for (i = 0; i < 32; i++) p50_o_low |= ((*p4__o__[i] & 1) << i);
1652
- for (i = 0; i < 32; i++) p50_o_high |= ((*p4__o__[i+32] & 1) << i);
1653
- break;
1654
- #endif
1655
- #if PUZZLE_PERIFS >= 6
1656
- case 5: // PERIF 5
1657
- // config
1658
- for (i = 0; i < 8; i++) p50_xn_config[i] = p5_xn_config[i];
1659
- // dig outs
1660
- p50_x1_o1 = p5_x1_o1; p50_x1_o2 = p5_x1_o2;
1661
- p50_x2_o1 = p5_x2_o1; p50_x2_o2 = p5_x2_o2;
1662
- p50_x3_o1 = p5_x3_o1; p50_x3_o2 = p5_x3_o2;
1663
- p50_x4_o1 = p5_x4_o1; p50_x4_o2 = p5_x4_o2;
1664
- p50_x5_o1 = p5_x5_o1; p50_x5_o2 = p5_x5_o2;
1665
- p50_x6_o1 = p5_x6_o1; p50_x6_o2 = p5_x6_o2;
1666
- p50_x7_o1 = p5_x7_o1; p50_x7_o2 = p5_x7_o2;
1667
- p50_x8_o1 = p5_x8_o1; p50_x8_o2 = p5_x8_o2;
1668
- // pwms
1669
- p50_x1_pwm = p5_x1_pwm;
1670
- p50_x2_pwm = p5_x2_pwm;
1671
- p50_x3_pwm = p5_x3_pwm;
1672
- p50_x4_pwm = p5_x4_pwm;
1673
- p50_x5_pwm = p5_x5_pwm;
1674
- p50_x6_pwm = p5_x6_pwm;
1675
- p50_x7_pwm = p5_x7_pwm;
1676
- p50_x8_pwm = p5_x8_pwm;
1677
- // exp
1678
- p50_o_low = 0;
1679
- p50_o_high = 0;
1680
- for (i = 0; i < 32; i++) p50_o_low |= ((*p5__o__[i] & 1) << i);
1681
- for (i = 0; i < 32; i++) p50_o_high |= ((*p5__o__[i+32] & 1) << i);
1682
- break;
1683
- #endif
1684
- #if PUZZLE_PERIFS >= 7
1685
- case 6: // PERIF 6
1686
- // config
1687
- for (i = 0; i < 8; i++) p50_xn_config[i] = p6_xn_config[i];
1688
- // dig outs
1689
- p50_x1_o1 = p6_x1_o1; p50_x1_o2 = p6_x1_o2;
1690
- p50_x2_o1 = p6_x2_o1; p50_x2_o2 = p6_x2_o2;
1691
- p50_x3_o1 = p6_x3_o1; p50_x3_o2 = p6_x3_o2;
1692
- p50_x4_o1 = p6_x4_o1; p50_x4_o2 = p6_x4_o2;
1693
- p50_x5_o1 = p6_x5_o1; p50_x5_o2 = p6_x5_o2;
1694
- p50_x6_o1 = p6_x6_o1; p50_x6_o2 = p6_x6_o2;
1695
- p50_x7_o1 = p6_x7_o1; p50_x7_o2 = p6_x7_o2;
1696
- p50_x8_o1 = p6_x8_o1; p50_x8_o2 = p6_x8_o2;
1697
- // pwms
1698
- p50_x1_pwm = p6_x1_pwm;
1699
- p50_x2_pwm = p6_x2_pwm;
1700
- p50_x3_pwm = p6_x3_pwm;
1701
- p50_x4_pwm = p6_x4_pwm;
1702
- p50_x5_pwm = p6_x5_pwm;
1703
- p50_x6_pwm = p6_x6_pwm;
1704
- p50_x7_pwm = p6_x7_pwm;
1705
- p50_x8_pwm = p6_x8_pwm;
1706
- // exp
1707
- p50_o_low = 0;
1708
- p50_o_high = 0;
1709
- for (i = 0; i < 32; i++) p50_o_low |= ((*p6__o__[i] & 1) << i);
1710
- for (i = 0; i < 32; i++) p50_o_high |= ((*p6__o__[i+32] & 1) << i);
1711
- break;
1712
- #endif
1713
- #if PUZZLE_PERIFS >= 8
1714
- case 7: // PERIF 7
1715
- // config
1716
- for (i = 0; i < 8; i++) p50_xn_config[i] = p7_xn_config[i];
1717
- // dig outs
1718
- p50_x1_o1 = p7_x1_o1; p50_x1_o2 = p7_x1_o2;
1719
- p50_x2_o1 = p7_x2_o1; p50_x2_o2 = p7_x2_o2;
1720
- p50_x3_o1 = p7_x3_o1; p50_x3_o2 = p7_x3_o2;
1721
- p50_x4_o1 = p7_x4_o1; p50_x4_o2 = p7_x4_o2;
1722
- p50_x5_o1 = p7_x5_o1; p50_x5_o2 = p7_x5_o2;
1723
- p50_x6_o1 = p7_x6_o1; p50_x6_o2 = p7_x6_o2;
1724
- p50_x7_o1 = p7_x7_o1; p50_x7_o2 = p7_x7_o2;
1725
- p50_x8_o1 = p7_x8_o1; p50_x8_o2 = p7_x8_o2;
1726
- // pwms
1727
- p50_x1_pwm = p7_x1_pwm;
1728
- p50_x2_pwm = p7_x2_pwm;
1729
- p50_x3_pwm = p7_x3_pwm;
1730
- p50_x4_pwm = p7_x4_pwm;
1731
- p50_x5_pwm = p7_x5_pwm;
1732
- p50_x6_pwm = p7_x6_pwm;
1733
- p50_x7_pwm = p7_x7_pwm;
1734
- p50_x8_pwm = p7_x8_pwm;
1735
- // exp
1736
- p50_o_low = 0;
1737
- p50_o_high = 0;
1738
- for (i = 0; i < 32; i++) p50_o_low |= ((*p7__o__[i] & 1) << i);
1739
- for (i = 0; i < 32; i++) p50_o_high |= ((*p7__o__[i+32] & 1) << i);
1740
- break;
1741
- #endif
1742
- }
1743
- }
1744
-
1745
- void puzzle_parse_perif(int nper)
1746
- {
1747
- int i;
1748
- switch (nper) {
1749
- case 0:
1750
- // dig in
1751
- x1_i1 = p50_x1_i1; x1_i2 = p50_x1_i2;
1752
- x2_i1 = p50_x2_i1; x2_i2 = p50_x2_i2;
1753
- x3_i1 = p50_x3_i1; x3_i2 = p50_x3_i2;
1754
- x4_i1 = p50_x4_i1; x4_i2 = p50_x4_i2;
1755
- x5_i1 = p50_x5_i1; x5_i2 = p50_x5_i2;
1756
- x6_i1 = p50_x6_i1; x6_i2 = p50_x6_i2;
1757
- x7_i1 = p50_x7_i1; x7_i2 = p50_x7_i2;
1758
- x8_i1 = p50_x8_i1; x8_i2 = p50_x8_i2;
1759
-
1760
- for (i = 0; i < 8; i++) *(__xn_anal__[i]) = *(p50__xn_anal__[i]); // analog in
1761
- for (i = 0; i < 8; i++) *(__xn_pt100_raw__[i]) = *(p50__xn_pt100_raw__[i]); // PT100 RAW
1762
- for (i = 0; i < 8; i++) *(__xn_pt100__[i]) = *(p50__xn_pt100__[i]); // PT100 CELSIUS
1763
- // EXP
1764
- for (i = 0; i < 32; i++) *(p__i__[i]) = ((p50_i_low >> i) & 1);
1765
- for (i = 0; i < 32; i++) *(p__i__[i+32]) = ((p50_i_high >> i) & 1);
1766
- // ENC
1767
- p_encoder1 = p50_encoder1;
1768
- p_encoder2 = p50_encoder2;
1769
- break;
1770
- #if PUZZLE_PERIFS >= 2
1771
- case 1:
1772
- // dig in
1773
- p1_x1_i1 = p50_x1_i1; p1_x1_i2 = p50_x1_i2;
1774
- p1_x2_i1 = p50_x2_i1; p1_x2_i2 = p50_x2_i2;
1775
- p1_x3_i1 = p50_x3_i1; p1_x3_i2 = p50_x3_i2;
1776
- p1_x4_i1 = p50_x4_i1; p1_x4_i2 = p50_x4_i2;
1777
- p1_x5_i1 = p50_x5_i1; p1_x5_i2 = p50_x5_i2;
1778
- p1_x6_i1 = p50_x6_i1; p1_x6_i2 = p50_x6_i2;
1779
- p1_x7_i1 = p50_x7_i1; p1_x7_i2 = p50_x7_i2;
1780
- p1_x8_i1 = p50_x8_i1; p1_x8_i2 = p50_x8_i2;
1781
-
1782
- for (i = 0; i < 8; i++) *(p1__xn_anal__[i]) = *(p50__xn_anal__[i]); // analog in
1783
- for (i = 0; i < 8; i++) *(p1__xn_pt100_raw__[i]) = *(p50__xn_pt100_raw__[i]); // PT100 RAW
1784
- for (i = 0; i < 8; i++) *(p1__xn_pt100__[i]) = *(p50__xn_pt100__[i]); // PT100 CELSIUS
1785
- // EXP
1786
- for (i = 0; i < 32; i++) *(p1__i__[i]) = ((p50_i_low >> i) & 1);
1787
- for (i = 0; i < 32; i++) *(p1__i__[i+32]) = ((p50_i_high >> i) & 1);
1788
- // ENC
1789
- p1_encoder1 = p50_encoder1;
1790
- p1_encoder2 = p50_encoder2;
1791
- break;
1792
- #endif
1793
- #if PUZZLE_PERIFS >= 3
1794
- case 2:
1795
- // dig in
1796
- p2_x1_i1 = p50_x1_i1; p2_x1_i2 = p50_x1_i2;
1797
- p2_x2_i1 = p50_x2_i1; p2_x2_i2 = p50_x2_i2;
1798
- p2_x3_i1 = p50_x3_i1; p2_x3_i2 = p50_x3_i2;
1799
- p2_x4_i1 = p50_x4_i1; p2_x4_i2 = p50_x4_i2;
1800
- p2_x5_i1 = p50_x5_i1; p2_x5_i2 = p50_x5_i2;
1801
- p2_x6_i1 = p50_x6_i1; p2_x6_i2 = p50_x6_i2;
1802
- p2_x7_i1 = p50_x7_i1; p2_x7_i2 = p50_x7_i2;
1803
- p2_x8_i1 = p50_x8_i1; p2_x8_i2 = p50_x8_i2;
1804
-
1805
- for (i = 0; i < 8; i++) *(p2__xn_anal__[i]) = *(p50__xn_anal__[i]); // analog in
1806
- for (i = 0; i < 8; i++) *(p2__xn_pt100_raw__[i]) = *(p50__xn_pt100_raw__[i]); // PT100 RAW
1807
- for (i = 0; i < 8; i++) *(p2__xn_pt100__[i]) = *(p50__xn_pt100__[i]); // PT100 CELSIUS
1808
- // EXP
1809
- for (i = 0; i < 32; i++) *(p2__i__[i]) = ((p50_i_low >> i) & 1);
1810
- for (i = 0; i < 32; i++) *(p2__i__[i+32]) = ((p50_i_high >> i) & 1);
1811
- // ENC
1812
- p2_encoder1 = p50_encoder1;
1813
- p2_encoder2 = p50_encoder2;
1814
- break;
1815
- #endif
1816
- #if PUZZLE_PERIFS >= 4
1817
- case 3:
1818
- // dig in
1819
- p3_x1_i1 = p50_x1_i1; p3_x1_i2 = p50_x1_i2;
1820
- p3_x2_i1 = p50_x2_i1; p3_x2_i2 = p50_x2_i2;
1821
- p3_x3_i1 = p50_x3_i1; p3_x3_i2 = p50_x3_i2;
1822
- p3_x4_i1 = p50_x4_i1; p3_x4_i2 = p50_x4_i2;
1823
- p3_x5_i1 = p50_x5_i1; p3_x5_i2 = p50_x5_i2;
1824
- p3_x6_i1 = p50_x6_i1; p3_x6_i2 = p50_x6_i2;
1825
- p3_x7_i1 = p50_x7_i1; p3_x7_i2 = p50_x7_i2;
1826
- p3_x8_i1 = p50_x8_i1; p3_x8_i2 = p50_x8_i2;
1827
-
1828
- for (i = 0; i < 8; i++) *(p3__xn_anal__[i]) = *(p50__xn_anal__[i]); // analog in
1829
- for (i = 0; i < 8; i++) *(p3__xn_pt100_raw__[i]) = *(p50__xn_pt100_raw__[i]); // PT100 RAW
1830
- for (i = 0; i < 8; i++) *(p3__xn_pt100__[i]) = *(p50__xn_pt100__[i]); // PT100 CELSIUS
1831
- // EXP
1832
- for (i = 0; i < 32; i++) *(p3__i__[i]) = ((p50_i_low >> i) & 1);
1833
- for (i = 0; i < 32; i++) *(p3__i__[i+32]) = ((p50_i_high >> i) & 1);
1834
- // ENC
1835
- p3_encoder1 = p50_encoder1;
1836
- p3_encoder2 = p50_encoder2;
1837
- break;
1838
- #endif
1839
- #if PUZZLE_PERIFS >= 5
1840
- case 4:
1841
- // dig in
1842
- p4_x1_i1 = p50_x1_i1; p4_x1_i2 = p50_x1_i2;
1843
- p4_x2_i1 = p50_x2_i1; p4_x2_i2 = p50_x2_i2;
1844
- p4_x3_i1 = p50_x3_i1; p4_x3_i2 = p50_x3_i2;
1845
- p4_x4_i1 = p50_x4_i1; p4_x4_i2 = p50_x4_i2;
1846
- p4_x5_i1 = p50_x5_i1; p4_x5_i2 = p50_x5_i2;
1847
- p4_x6_i1 = p50_x6_i1; p4_x6_i2 = p50_x6_i2;
1848
- p4_x7_i1 = p50_x7_i1; p4_x7_i2 = p50_x7_i2;
1849
- p4_x8_i1 = p50_x8_i1; p4_x8_i2 = p50_x8_i2;
1850
-
1851
- for (i = 0; i < 8; i++) *(p4__xn_anal__[i]) = *(p50__xn_anal__[i]); // analog in
1852
- for (i = 0; i < 8; i++) *(p4__xn_pt100_raw__[i]) = *(p50__xn_pt100_raw__[i]); // PT100 RAW
1853
- for (i = 0; i < 8; i++) *(p4__xn_pt100__[i]) = *(p50__xn_pt100__[i]); // PT100 CELSIUS
1854
- // EXP
1855
- for (i = 0; i < 32; i++) *(p4__i__[i]) = ((p50_i_low >> i) & 1);
1856
- for (i = 0; i < 32; i++) *(p4__i__[i+32]) = ((p50_i_high >> i) & 1);
1857
- // ENC
1858
- p4_encoder1 = p50_encoder1;
1859
- p4_encoder2 = p50_encoder2;
1860
- break;
1861
- #endif
1862
- #if PUZZLE_PERIFS >= 6
1863
- case 5:
1864
- // dig in
1865
- p5_x1_i1 = p50_x1_i1; p5_x1_i2 = p50_x1_i2;
1866
- p5_x2_i1 = p50_x2_i1; p5_x2_i2 = p50_x2_i2;
1867
- p5_x3_i1 = p50_x3_i1; p5_x3_i2 = p50_x3_i2;
1868
- p5_x4_i1 = p50_x4_i1; p5_x4_i2 = p50_x4_i2;
1869
- p5_x5_i1 = p50_x5_i1; p5_x5_i2 = p50_x5_i2;
1870
- p5_x6_i1 = p50_x6_i1; p5_x6_i2 = p50_x6_i2;
1871
- p5_x7_i1 = p50_x7_i1; p5_x7_i2 = p50_x7_i2;
1872
- p5_x8_i1 = p50_x8_i1; p5_x8_i2 = p50_x8_i2;
1873
-
1874
- for (i = 0; i < 8; i++) *(p5__xn_anal__[i]) = *(p50__xn_anal__[i]); // analog in
1875
- for (i = 0; i < 8; i++) *(p5__xn_pt100_raw__[i]) = *(p50__xn_pt100_raw__[i]); // PT100 RAW
1876
- for (i = 0; i < 8; i++) *(p5__xn_pt100__[i]) = *(p50__xn_pt100__[i]); // PT100 CELSIUS
1877
- // EXP
1878
- for (i = 0; i < 32; i++) *(p5__i__[i]) = ((p50_i_low >> i) & 1);
1879
- for (i = 0; i < 32; i++) *(p5__i__[i+32]) = ((p50_i_high >> i) & 1);
1880
- // ENC
1881
- p5_encoder1 = p50_encoder1;
1882
- p5_encoder2 = p50_encoder2;
1883
- break;
1884
- #endif
1885
- #if PUZZLE_PERIFS >= 7
1886
- case 6:
1887
- // dig in
1888
- p6_x1_i1 = p50_x1_i1; p6_x1_i2 = p50_x1_i2;
1889
- p6_x2_i1 = p50_x2_i1; p6_x2_i2 = p50_x2_i2;
1890
- p6_x3_i1 = p50_x3_i1; p6_x3_i2 = p50_x3_i2;
1891
- p6_x4_i1 = p50_x4_i1; p6_x4_i2 = p50_x4_i2;
1892
- p6_x5_i1 = p50_x5_i1; p6_x5_i2 = p50_x5_i2;
1893
- p6_x6_i1 = p50_x6_i1; p6_x6_i2 = p50_x6_i2;
1894
- p6_x7_i1 = p50_x7_i1; p6_x7_i2 = p50_x7_i2;
1895
- p6_x8_i1 = p50_x8_i1; p6_x8_i2 = p50_x8_i2;
1896
-
1897
- for (i = 0; i < 8; i++) *(p6__xn_anal__[i]) = *(p50__xn_anal__[i]); // analog in
1898
- for (i = 0; i < 8; i++) *(p6__xn_pt100_raw__[i]) = *(p50__xn_pt100_raw__[i]); // PT100 RAW
1899
- for (i = 0; i < 8; i++) *(p6__xn_pt100__[i]) = *(p50__xn_pt100__[i]); // PT100 CELSIUS
1900
- // EXP
1901
- for (i = 0; i < 32; i++) *(p6__i__[i]) = ((p50_i_low >> i) & 1);
1902
- for (i = 0; i < 32; i++) *(p6__i__[i+32]) = ((p50_i_high >> i) & 1);
1903
- // ENC
1904
- p6_encoder1 = p50_encoder1;
1905
- p6_encoder2 = p50_encoder2;
1906
- break;
1907
- #endif
1908
- #if PUZZLE_PERIFS >= 8
1909
- case 7:
1910
- // dig in
1911
- p7_x1_i1 = p50_x1_i1; p7_x1_i2 = p50_x1_i2;
1912
- p7_x2_i1 = p50_x2_i1; p7_x2_i2 = p50_x2_i2;
1913
- p7_x3_i1 = p50_x3_i1; p7_x3_i2 = p50_x3_i2;
1914
- p7_x4_i1 = p50_x4_i1; p7_x4_i2 = p50_x4_i2;
1915
- p7_x5_i1 = p50_x5_i1; p7_x5_i2 = p50_x5_i2;
1916
- p7_x6_i1 = p50_x6_i1; p7_x6_i2 = p50_x6_i2;
1917
- p7_x7_i1 = p50_x7_i1; p7_x7_i2 = p50_x7_i2;
1918
- p7_x8_i1 = p50_x8_i1; p7_x8_i2 = p50_x8_i2;
1919
-
1920
- for (i = 0; i < 8; i++) *(p7__xn_anal__[i]) = *(p50__xn_anal__[i]); // analog in
1921
- for (i = 0; i < 8; i++) *(p7__xn_pt100_raw__[i]) = *(p50__xn_pt100_raw__[i]); // PT100 RAW
1922
- for (i = 0; i < 8; i++) *(p7__xn_pt100__[i]) = *(p50__xn_pt100__[i]); // PT100 CELSIUS
1923
- // EXP
1924
- for (i = 0; i < 32; i++) *(p7__i__[i]) = ((p50_i_low >> i) & 1);
1925
- for (i = 0; i < 32; i++) *(p7__i__[i+32]) = ((p50_i_high >> i) & 1);
1926
- // ENC
1927
- p7_encoder1 = p50_encoder1;
1928
- p7_encoder2 = p50_encoder2;
1929
- break;
1930
- #endif
1931
- }
1932
- }
1933
-
1934
- void puzzle_send_frame(int nper, int nframe)
1935
- {
1936
- U32 da, db, msgid;
1937
- int i;
1938
-
1939
- msgid = (nper & 0xFF) | ((nframe & 0xFF) << 8) | ((p_ext1_on & 0x01) << 16) | ((p_ext2_on & 0x01) << 17);
1940
- // Reset request (bit-18 del msgid)
1941
- /*
1942
- if (puzzle_reset == 1) {
1943
- puzzle_reset = 0;
1944
- msgid |= (1 << 18);
1945
- }
1946
- */
1947
- if (puzzle_reset_perif[nper] == 1) {
1948
- puzzle_reset_perif[nper] = 0;
1949
- msgid |= (1 << 18);
1950
- }
1951
- da = 0;
1952
- db = 0;
1953
-
1954
- // prepara periferica sul buffer della periferica 50
1955
- puzzle_prepare_perif(nper);
1956
-
1957
- switch (nframe) {
1958
- case 0: // XN config
1959
- // 6-bit per ogni slot, 2 moduli EXP
1960
- da = ((p50_xn_config[5] & 0x03) << 30) |
1961
- ((p50_xn_config[4] & 0x3F) << 24) |
1962
- ((p50_xn_config[3] & 0x3F) << 18) |
1963
- ((p50_xn_config[2] & 0x3F) << 12) |
1964
- ((p50_xn_config[1] & 0x3F) << 6) |
1965
- (p50_xn_config[0] & 0x3F);
1966
- db |= ( (p50_o_low & 0xFFFF) << 16 ) |
1967
- ((p50_xn_config[7] & 0x3F) << 10) |
1968
- ((p50_xn_config[6] & 0x3F) << 4) |
1969
- ((p50_xn_config[5] >> 2) & 0x0F);
1970
- /*
1971
- db = ((p_o1 & 0x01) << 16) | ((p_o2 & 0x01) << 17) | ((p_o3 & 0x01) << 18) |
1972
- ((p_o4 & 0x01) << 19) | ((p_o5 & 0x01) << 20) | ((p_o6 & 0x01) << 21) |
1973
- ((p_o7 & 0x01) << 22) | ((p_o8 & 0x01) << 23) |
1974
- ((p_o9 & 0x01) << 24) | ((p_o10 & 0x01) << 25) | ((p_o11 & 0x01) << 26) |
1975
- ((p_o12 & 0x01) << 27) | ((p_o13 & 0x01) << 28) | ((p_o14 & 0x01) << 29) |
1976
- ((p_o15 & 0x01) << 30) | ((p_o16 & 0x01) << 31) |
1977
-
1978
- ((xn_config[7] & 0x3F) << 10) |
1979
- ((xn_config[6] & 0x3F) << 4) |
1980
- (xn_config[5] & 0x0F);
1981
- */
1982
- break;
1983
-
1984
- case 1: // X1... X4
1985
- switch (p50_xn_config[0]) { // X1
1986
- case C_OUT:
1987
- da |= ((p50_x1_o2 & 0x01) << 1) | (p50_x1_o1 & 0x01);
1988
- break;
1989
-
1990
- case C_PWM:
1991
- da |= (p50_x1_pwm & 0xFFFF);
1992
- break;
1993
-
1994
- case C_EMPTY:
1995
- break;
1996
- }
1997
- switch (p50_xn_config[1]) { // X2
1998
- case C_OUT:
1999
- da |= ((p50_x2_o2 & 0x01) << 17) | ((p50_x2_o1 & 0x01) << 16);
2000
- break;
2001
-
2002
- case C_PWM:
2003
- da |= ((p50_x2_pwm & 0xFFFF) << 16);
2004
- break;
2005
-
2006
- case C_EMPTY:
2007
- break;
2008
- }
2009
- switch (p50_xn_config[2]) { // X3
2010
- case C_OUT:
2011
- db |= ((p50_x3_o2 & 0x01) << 1) | (p50_x3_o1 & 0x01);
2012
- break;
2013
-
2014
- case C_PWM:
2015
- db |= (p50_x3_pwm & 0xFFFF);
2016
- break;
2017
-
2018
- case C_EMPTY:
2019
- break;
2020
- }
2021
- switch (p50_xn_config[3]) { // X4
2022
- case C_OUT:
2023
- db |= ((p50_x4_o2 & 0x01) << 17) | ((p50_x4_o1 & 0x01) << 16);
2024
- break;
2025
-
2026
- case C_PWM:
2027
- db |= ((p50_x4_pwm & 0xFFFF) << 16);
2028
- break;
2029
-
2030
- case C_EMPTY:
2031
- break;
2032
- }
2033
- break;
2034
-
2035
- case 2: // X5... X8
2036
- switch (p50_xn_config[4]) { // X5
2037
- case C_OUT:
2038
- da |= ((p50_x5_o2 & 0x01) << 1) | (p50_x5_o1 & 0x01);
2039
- break;
2040
-
2041
- case C_PWM:
2042
- da |= (p50_x5_pwm & 0xFFFF);
2043
- break;
2044
-
2045
- case C_EMPTY:
2046
- break;
2047
- }
2048
- switch (p50_xn_config[5]) { // X6
2049
- case C_OUT:
2050
- da |= ((p50_x6_o2 & 0x01) << 17) | ((p50_x6_o1 & 0x01) << 16);
2051
- break;
2052
-
2053
- case C_PWM:
2054
- da |= ((p50_x6_pwm & 0xFFFF) << 16);
2055
- break;
2056
-
2057
- case C_EMPTY:
2058
- break;
2059
- }
2060
- switch (p50_xn_config[6]) { // X7
2061
- case C_OUT:
2062
- db |= ((p50_x7_o2 & 0x01) << 1) | (p50_x7_o1 & 0x01);
2063
- break;
2064
-
2065
- case C_PWM:
2066
- db |= (p50_x7_pwm & 0xFFFF);
2067
- break;
2068
-
2069
- case C_EMPTY:
2070
- break;
2071
- }
2072
- switch (p50_xn_config[7]) { // X8
2073
- case C_OUT:
2074
- db |= ((p50_x8_o2 & 0x01) << 17) | ((p50_x8_o1 & 0x01) << 16);
2075
- break;
2076
-
2077
- case C_PWM:
2078
- db |= ((p50_x8_pwm & 0xFFFF) << 16);
2079
- break;
2080
-
2081
- case C_EMPTY:
2082
- break;
2083
- }
2084
- break;
2085
-
2086
- case 3: // EXP (opzionale)
2087
- da = p50_o_low;
2088
- db = p50_o_high;
2089
- /*
2090
- for (i = 0; i < 32; i++) da |= (*p__o__[i] & 0x01) << i;
2091
- for (i = 32; i< 64; i++) db |= (*p__o__[i] & 0x01) << (i-32);
2092
- */
2093
- break;
2094
- }
2095
-
2096
- //CAN_TXBuf.Frame = 0x00080000;
2097
- CAN_TXBuf.Frame = 0x80080000;
2098
- CAN_TXBuf.MsgID = msgid;
2099
- CAN_TXBuf.DatA = da;
2100
- CAN_TXBuf.DatB = db;
2101
- puzzle_can_cnt++;
2102
- canbase_txmsg(&CAN_TXBuf);
2103
- }
2104
-
2105
- float PT100_X1_perif0, PT100_X2_perif0, PT100_X3_perif0, PT100_X4_perif0;
2106
- float PT100_X5_perif0, PT100_X6_perif0, PT100_X7_perif0, PT100_X8_perif0;
2107
- float PT100_X1_perif1, PT100_X2_perif1, PT100_X3_perif1, PT100_X4_perif1;
2108
- float PT100_X5_perif1, PT100_X6_perif1, PT100_X7_perif1, PT100_X8_perif1;
2109
- short int cnt_rx0, cnt_rx1, cnt_rx2, cnt_rx3;
2110
-
2111
- void puzzle_parse_frame(CANBASE_MSG mcan_msg)
2112
- {
2113
- int i;
2114
- U32 msgid = mcan_msg.MsgID;
2115
- U32 da = mcan_msg.DatA;
2116
- U32 db = mcan_msg.DatB;
2117
- int nperif, nmess;
2118
-
2119
- p_dipswitch_status = (msgid >> 20) & 0xF;
2120
- puzzle_version = (msgid >> 16) & 0x0F;
2121
- nmess = (msgid >> 8) & 0xFF;
2122
- nperif = (msgid & 0xFF);
2123
-
2124
- if(nperif == 0)
2125
- {
2126
- if(nmess == 0)
2127
- {
2128
- p50_x1_pt100 = pt100_calc((da & 0xFFFF), 0);
2129
- PT100_X1_perif0 = p50_x1_pt100;
2130
- ///
2131
- p50_x2_pt100 = pt100_calc(((da & 0xFFFF0000) >> 16), 0);
2132
- PT100_X2_perif0 = p50_x2_pt100;
2133
- ///
2134
- p50_x3_pt100 = pt100_calc((db & 0xFFFF), 0);
2135
- PT100_X3_perif0 = p50_x3_pt100;
2136
- ///
2137
- p50_x4_pt100 = pt100_calc(((db & 0xFFFF0000) >> 16), 0);
2138
- PT100_X4_perif0 = p50_x4_pt100;
2139
- cnt_rx0++;
2140
- }
2141
- if(nmess == 1)
2142
- {
2143
- p50_x5_pt100 = pt100_calc((da & 0xFFFF), 0);
2144
- PT100_X5_perif0 = p50_x5_pt100;
2145
- ///
2146
- p50_x6_pt100 = pt100_calc(((da & 0xFFFF0000) >> 16), 0);
2147
- PT100_X6_perif0 = p50_x6_pt100;
2148
- ///
2149
- p50_x7_pt100 = pt100_calc((db & 0xFFFF), 0);
2150
- PT100_X7_perif0 = p50_x7_pt100;
2151
- ///
2152
- p50_x8_pt100 = pt100_calc(((db & 0xFFFF0000) >> 16), 0);
2153
- PT100_X8_perif0 = p50_x8_pt100;
2154
- cnt_rx1++;
2155
- }
2156
- }
2157
- else if(nperif == 1)
2158
- {
2159
- if(nmess == 0)
2160
- {
2161
- p50_x1_pt100 = pt100_calc((da & 0xFFFF), 0);
2162
- PT100_X1_perif1 = p50_x1_pt100;
2163
- ///
2164
- p50_x2_pt100 = pt100_calc(((da & 0xFFFF0000) >> 16), 0);
2165
- PT100_X2_perif1 = p50_x2_pt100;
2166
- ///
2167
- p50_x3_pt100 = pt100_calc((db & 0xFFFF), 0);
2168
- PT100_X3_perif1 = p50_x3_pt100;
2169
- ///
2170
- p50_x4_pt100 = pt100_calc(((db & 0xFFFF0000) >> 16), 0);
2171
- PT100_X4_perif1 = p50_x4_pt100;
2172
- cnt_rx2++;
2173
- }
2174
- if(nmess == 1)
2175
- {
2176
- p50_x5_pt100 = pt100_calc((da & 0xFFFF), 0);
2177
- PT100_X5_perif1 = p50_x5_pt100;
2178
- ///
2179
- p50_x6_pt100 = pt100_calc(((da & 0xFFFF0000) >> 16), 0);
2180
- PT100_X6_perif1 = p50_x6_pt100;
2181
- ///
2182
- p50_x7_pt100 = pt100_calc((db & 0xFFFF), 0);
2183
- PT100_X7_perif1 = p50_x7_pt100;
2184
- ///
2185
- p50_x8_pt100 = pt100_calc(((db & 0xFFFF0000) >> 16), 0);
2186
- PT100_X8_perif1 = p50_x8_pt100;
2187
- cnt_rx3++;
2188
- }
2189
- }
2190
-
2191
- // Scrivi sulla periferica 50
2192
- switch (nmess) {
2193
- case 0: // X1... X4
2194
- p50_x1_anal = (da & 0xFFFF);
2195
- p50_x1_i1 = (da & 0x01);
2196
- p50_x1_i2 = (da & 0x02) >> 1;
2197
- p50_x1_pt100_raw = (da & 0xFFFF);
2198
- p50_x1_pt100 = pt100_calc(x1_pt100_raw, 0);
2199
-
2200
- p50_x2_anal = (da & 0xFFFF0000) >> 16;
2201
- p50_x2_i1 = (da & 0x10000) >> 16;
2202
- p50_x2_i2 = (da & 0x20000) >> 16;
2203
- p50_x2_pt100_raw = (da & 0xFFFF0000) >> 16;
2204
- p50_x2_pt100 = pt100_calc(x2_pt100_raw, 1);
2205
-
2206
- p50_x3_anal = (db & 0xFFFF);
2207
- p50_x3_i1 = (db & 0x1);
2208
- p50_x3_i2 = (db & 0x2);
2209
- p50_x3_pt100_raw = (db & 0xFFFF);
2210
- p50_x3_pt100 = pt100_calc(x3_pt100_raw, 2);
2211
-
2212
- p50_x4_anal = (db & 0xFFFF0000) >> 16;
2213
- p50_x4_i1 = (db & 0x10000) >> 16;
2214
- p50_x4_i2 = (db & 0x20000) >> 16;
2215
- p50_x4_pt100_raw = (db & 0xFFFF0000) >> 16;
2216
- p50_x4_pt100 = pt100_calc(x4_pt100_raw, 3);
2217
- break;
2218
-
2219
- case 1: // X5... X8
2220
- p50_x5_anal = (da & 0xFFFF);
2221
- p50_x5_i1 = (da & 0x01);
2222
- p50_x5_i2 = (da & 0x02) >> 1;
2223
- p50_x5_pt100_raw = (da & 0xFFFF);
2224
- p50_x5_pt100 = pt100_calc(x5_pt100_raw, 4);
2225
-
2226
- p50_x6_anal = (da & 0xFFFF0000) >> 16;
2227
- p50_x6_i1 = (da & 0x10000) >> 16;
2228
- p50_x6_i2 = (da & 0x20000) >> 16;
2229
- p50_x6_pt100_raw = (da & 0xFFFF0000) >> 16;
2230
- p50_x6_pt100 = pt100_calc(x6_pt100_raw, 5);
2231
-
2232
- p50_x7_anal = (db & 0xFFFF);
2233
- p50_x7_i1 = (db & 0x1);
2234
- p50_x7_i2 = (db & 0x2);
2235
- p50_x7_pt100_raw = (db & 0xFFFF);
2236
- p50_x7_pt100 = pt100_calc(x7_pt100_raw, 6);
2237
-
2238
- p50_x8_anal = (db & 0xFFFF0000) >> 16;
2239
- p50_x8_i1 = (db & 0x10000) >> 16;
2240
- p50_x8_i2 = (db & 0x20000) >> 16;
2241
- p50_x8_pt100_raw = (db & 0xFFFF0000) >> 16;
2242
- p50_x8_pt100 = pt100_calc(x8_pt100_raw, 7);
2243
- break;
2244
-
2245
- case 2: // EXP 1-4 + ENC1.
2246
- p50_i_low = da;
2247
- p50_encoder1 = db;
2248
- break;
2249
-
2250
- case 3: // EXP 5-8 + ENC2
2251
- p50_i_high = da;
2252
- p50_encoder2 = db;
2253
- break;
2254
-
2255
- default:
2256
- break;
2257
- }
2258
-
2259
- if (nperif == 0)
2260
- {
2261
- if (nmess == 0)
2262
- {
2263
- x1_pt100 = p50_x1_pt100;
2264
- x2_pt100 = p50_x2_pt100;
2265
- x3_pt100 = p50_x3_pt100;
2266
- x4_pt100 = p50_x4_pt100;
2267
-
2268
- x1_i1 = p50_x1_i1;
2269
- x1_i2 = p50_x1_i2;
2270
- x2_i1 = p50_x2_i1;
2271
- x2_i2 = p50_x2_i2;
2272
- x3_i1 = p50_x3_i1;
2273
- x3_i2 = p50_x3_i2;
2274
- x4_i1 = p50_x4_i1;
2275
- x4_i2 = p50_x4_i2;
2276
- }
2277
- else if (nmess == 1)
2278
- {
2279
- x5_pt100 = p50_x5_pt100;
2280
- x6_pt100 = p50_x6_pt100;
2281
- x7_pt100 = p50_x7_pt100;
2282
- x8_pt100 = p50_x8_pt100;
2283
-
2284
- x5_i1 = p50_x5_i1;
2285
- x5_i2 = p50_x5_i2;
2286
- x6_i1 = p50_x6_i1;
2287
- x6_i2 = p50_x6_i2;
2288
- x7_i1 = p50_x7_i1;
2289
- x7_i2 = p50_x7_i2;
2290
- x8_i1 = p50_x8_i1;
2291
- x8_i2 = p50_x8_i2;
2292
- }
2293
- }
2294
- else if (nperif == 1)
2295
- {
2296
- if (nmess == 0)
2297
- {
2298
- p1_x1_pt100 = p50_x1_pt100;
2299
- p1_x2_pt100 = p50_x2_pt100;
2300
- p1_x3_pt100 = p50_x3_pt100;
2301
- p1_x4_pt100 = p50_x4_pt100;
2302
-
2303
- p1_x1_i1 = p50_x1_i1;
2304
- p1_x1_i2 = p50_x1_i2;
2305
- p1_x2_i1 = p50_x2_i1;
2306
- p1_x2_i2 = p50_x2_i2;
2307
- p1_x3_i1 = p50_x3_i1;
2308
- p1_x3_i2 = p50_x3_i2;
2309
- p1_x4_i1 = p50_x4_i1;
2310
- p1_x4_i2 = p50_x4_i2;
2311
- }
2312
- else if (nmess == 1)
2313
- {
2314
- p1_x5_pt100 = p50_x5_pt100;
2315
- p1_x6_pt100 = p50_x6_pt100;
2316
- p1_x7_pt100 = p50_x7_pt100;
2317
- p1_x8_pt100 = p50_x8_pt100;
2318
-
2319
- p1_x5_i1 = p50_x5_i1;
2320
- p1_x5_i2 = p50_x5_i2;
2321
- p1_x6_i1 = p50_x6_i1;
2322
- p1_x6_i2 = p50_x6_i2;
2323
- p1_x7_i1 = p50_x7_i1;
2324
- p1_x7_i2 = p50_x7_i2;
2325
- p1_x8_i1 = p50_x8_i1;
2326
- p1_x8_i2 = p50_x8_i2;
2327
- }
2328
- }
2329
- for (i = 0; i < 8; i++) *(__xn_pt100_raw__[i]) = *(p50__xn_pt100_raw__[i]); // PT100 RAW
2330
- for (i = 0; i < 8; i++) *(__xn_pt100__[i]) = *(p50__xn_pt100__[i]); // PT100 CELSIUS
2331
- // fai il parsing in base al numero di periferica
2332
- //puzzle_parse_perif(nperif);
2333
- }
2334
- void puzzle_task_can_rx()
2335
- {
2336
- while (1) {
2337
- if ( canbase_rxmsg(&CAN_RXBuf) ) {
2338
- puzzle_parse_frame(CAN_RXBuf);
2339
- puzzle_can_rx_cnt++;
2340
- puzzle_disc_cnt = 0;
2341
- }
2342
- idle();
2343
- }
2344
- }
2345
-
2346
- int puzzle_max = 0;
2347
- void puzzle_task_can()
2348
- {
2349
- int nper = 0;
2350
- puzzle_nperif = PUZZLE_PERIFS;
2351
-
2352
- while (1) {
2353
- //puzzle_can_cnt++;
2354
- // ciclo sulle periferiche
2355
- puzzle_send_frame(nper, ntx_frame);
2356
- ntx_frame = (ntx_frame + 1) % 4;
2357
- if ((ntx_frame == 3) && !p_ext2_on) { ntx_frame = 0; }
2358
- // scatta alla periferica successiva
2359
- if (ntx_frame == 0) nper = (nper + 1) % PUZZLE_PERIFS;
2360
- if (puzzle_disc_cnt < 1000) {
2361
- puzzle_disc_cnt++;
2362
- puzzle_perif_on = 1;
2363
- } else {
2364
- puzzle_perif_on = 0;
2365
- }
2366
-
2367
- every(3);
2368
- }
2369
- }
2370
-
2371
- void puzzle_start_can(char e1, char e2)
2372
- {
2373
- puzzle_com = P_CAN;
2374
- p_ext1_on = e2;
2375
- p_ext2_on = e1;
2376
- #ifdef linux
2377
- canbase_init(4, 670000);
2378
- #else
2379
- canbase_init(4, 0x0048c003);
2380
- CAN_AFMR = 0x00000002L;
2381
- CAN1IER = 0;
2382
- CAN1MOD = 1;
2383
- CAN1GSR = 0;
2384
- CAN1BTR = 0x003CC004; // 670KHz
2385
- CAN1IER = 1;
2386
- CAN1MOD = 4;
2387
- #endif
2388
- exec_task(puzzle_task_can, 0, 4);
2389
- exec_task(puzzle_task_can_rx, 0, 4);
2390
- }
2391
-
2392
- void puzzle_stop_can()
2393
- {
2394
- remove_task(puzzle_task_can);
2395
- remove_task(puzzle_task_can_rx);
2396
- }
2397
-
2398
- //------------------- BOOTLOADER ------------------
2399
- #define N_HIGH(x) (((x)>>8) & 0xFF)
2400
- #define N_LOW(x) ((x) & 0xFF)
2401
-
2402
- void install_fupdate(void);
2403
- U8 byte_chsum(U8 b);
2404
- U8 chsum(U8 *buf, int len);
2405
- void RX_fupdate(COM *);
2406
- void puzzle_fupdate(void);
2407
- int pfile_nchunks(FILE *);
2408
- int firmware_present(void);
2409
-
2410
- int pboot_status=0;
2411
- int pupdate_perc=0;
2412
- int rxflag=0; // setto a 1 dall'interrupt di rx
2413
- U8 prx_buf[10];
2414
- U8 ptx_buf[36]; // byte 0: start, bytes 1-2: nprog, bytes 3-34: payload, byte 35: chsum
2415
- int update_cnt=0;
2416
- int num_pacchetti=0;
2417
- int pnprog=0;
2418
- FILE *pfile;
2419
- U8 *pfhead; // puntatore alla porzione di heap che contiene il file
2420
- int pfirmware_source=0; // 0: USB, 1: SD
2421
-
2422
- void install_fupdate()
2423
- {
2424
- Com = PortaCOM;
2425
- com_close(Com);
2426
- com_disable(Com);
2427
- com_open(Com,115200);
2428
- protocol_mode(Com,1); // COMx IN MODO 1 (BLOAD/BSAVE)
2429
- onrx(Com,RX_fupdate);
2430
- Com->centr=0x01; // centr = who sends
2431
- Com->perif=0x02; // perif = who receives
2432
- com_enable(Com); // ABILITA LA COM
2433
- }
2434
-
2435
- void RX_fupdate(COM *Com)
2436
- {
2437
- rxflag=1;
2438
- int rxsize=0;
2439
- rxsize = bload(PortaCOM, prx_buf, 3);
2440
- }
2441
-
2442
- U8 byte_chsum(U8 b)
2443
- {
2444
- int i=0;
2445
- U8 ret=0;
2446
- for (i=0; i<8; i++) {
2447
- ret += (b >> i) & 1;
2448
- }
2449
- return (U8)ret;
2450
- }
2451
-
2452
- U8 chsum(U8 *buf, int len)
2453
- {
2454
- // len must be <= 256
2455
- if (len > 256) len=256;
2456
- int i=0;
2457
- U8 ret=0;
2458
- for (i=0; i<len; i++) ret += byte_chsum(buf[i]);
2459
- return (U8)ret;
2460
- }
2461
-
2462
- int pfile_nchunks(FILE *mfp)
2463
- {
2464
- // ritorna il numero di chunks da 32 bytes ciascuno del file
2465
- int size, ret;
2466
- fseek(mfp, 0, SEEK_END);
2467
- size = ftell(mfp);
2468
- fseek(mfp, 0, SEEK_SET);
2469
- ret = size / 32;
2470
- if ( (size%32) > 0 ) ret++;
2471
- return ret;
2472
- }
2473
-
2474
- int firmware_present() // NB: vale solo per terminale Puzzle
2475
- {
2476
- /*
2477
- int usb = 0;
2478
- usb = usb_present();
2479
- if ( !usb ) return 0;
2480
- */
2481
- char pfname[20];
2482
- if (pfirmware_source == 0) sprintf(pfname, "D:\\FIRMWARE.BIN");
2483
- else sprintf(pfname, "C:\\FIRMWARE.BIN");
2484
- FILE *fwfp;
2485
- //fwfp = fopen("D:\\FIRMWARE.BIN","r");
2486
- fwfp = fopen(pfname,"r");
2487
- if (fwfp) { fclose(fwfp); return 1; }
2488
- else { fclose(fwfp); return 0; }
2489
- }
2490
-
2491
- void puzzle_fupdate()
2492
- {
2493
- while (1) {
2494
- update_cnt++;
2495
-
2496
- switch (pboot_status) {
2497
-
2498
- case 0: // reset variabili
2499
- num_pacchetti=0;
2500
- pupdate_perc=0;
2501
- pnprog=0;
2502
- pboot_status=1;
2503
- break;
2504
-
2505
- case 1: // invio segnale di freezing del boot
2506
- pnprog = 0;
2507
- ptx_buf[0] = 0xFB;
2508
- ptx_buf[1] = 0xC1;
2509
- ptx_buf[2] = 0xBB;
2510
- bsave(PortaCOM, ptx_buf, 3);
2511
- rxflag=0;
2512
- if ( num_pacchetti > 0 ) pboot_status=5;
2513
- else pboot_status=3;
2514
- break;
2515
-
2516
- case 3: // preparo il file
2517
-
2518
- if (pfirmware_source == 0) {
2519
- pfile = fopen("D:\\FIRMWARE.BIN","r");
2520
- } else {
2521
- pfile = fopen("C:\\FIRMWARE.BIN","r");
2522
- }
2523
- if (pfile) {
2524
- num_pacchetti = pfile_nchunks(pfile);
2525
- pboot_status = 5;
2526
- } else {
2527
- pboot_status = 900;
2528
- }
2529
- break;
2530
-
2531
- case 5: // attesa ricezione ACK
2532
- if (rxflag==1) { rxflag=0; pboot_status=10; }
2533
- else { pboot_status=1; }
2534
- break;
2535
-
2536
- case 10: // verifica ACK
2537
- if (prx_buf[0]==0xC1 && prx_buf[1]==0xFB && prx_buf[2]==0xBB) pboot_status=15;
2538
- else pboot_status=1;
2539
- break;
2540
-
2541
- case 15: // ACK ricevuto, calcolo e mando il numero di chunks
2542
- ptx_buf[0] = 0xC1; // byte di controllo
2543
- ptx_buf[1] = N_HIGH(num_pacchetti); // n pacchetti
2544
- ptx_buf[2] = N_LOW(num_pacchetti); // n pacchetti
2545
- ptx_buf[3] = chsum(&ptx_buf[1], 2); // checksum
2546
- rxflag=0;
2547
- bsave(PortaCOM, ptx_buf, 4);
2548
- pboot_status=20;
2549
- break;
2550
-
2551
- case 20: // attesa ACK header
2552
- if (rxflag==1) { rxflag=0; pboot_status=25; } // pacchetto ricevuto
2553
- else pboot_status=15; // rimando il pacchetto
2554
- break;
2555
-
2556
- case 25: // verifica ACK, se OK vai avanti
2557
- if (prx_buf[0]==0xC2 && prx_buf[1]==0xFB && prx_buf[2]==0xBB) pboot_status=28;
2558
- else pboot_status=15; // rimando l'header
2559
- break;
2560
-
2561
- case 28: // leggo chunk dal file
2562
- fread( (U8 *)(&ptx_buf[3]), 32, 1, pfile );
2563
- pboot_status = 30;
2564
- break;
2565
-
2566
- case 30: // mando i pacchetti
2567
- ptx_buf[0] = 0xB1; // start
2568
- ptx_buf[1] = N_HIGH(pnprog);
2569
- ptx_buf[2] = N_LOW(pnprog);
2570
- ptx_buf[35] = chsum(&ptx_buf[3], 32); // checksum
2571
- rxflag=0;
2572
- bsave(PortaCOM, ptx_buf, 36);
2573
- pboot_status = 35;
2574
- break;
2575
-
2576
- case 35: // attesa ACK pacchetto
2577
- if (rxflag==1) { rxflag=0; pboot_status=40; }
2578
- else pboot_status=30; // rimando il pacchetto
2579
- break;
2580
-
2581
- case 40: // verifica ACK
2582
- if (prx_buf[0] == 0xC3 && prx_buf[1] == N_HIGH(pnprog) && prx_buf[2] == N_LOW(pnprog)) {
2583
- // ACK ok, manda pacchetto successivo o vai alla fine se era l'ultimo
2584
- pnprog++;
2585
- pupdate_perc = (100*pnprog)/num_pacchetti;
2586
- if (pnprog < num_pacchetti) { pboot_status = 28; break; } // pacchetto successivo
2587
- else { pboot_status = 70; } // manda flag di fine trasmissione
2588
- } else {
2589
- pboot_status = 30; // rimando pacchetto pnprog
2590
- }
2591
- break;
2592
-
2593
- case 70: // flag di fine trasmissione
2594
- ptx_buf[0] = 0xC9;
2595
- ptx_buf[1] = 0xFB;
2596
- ptx_buf[2] = 0xBB;
2597
- bsave(PortaCOM, ptx_buf, 3);
2598
- pboot_status = 1000;
2599
- break;
2600
-
2601
- case 900: // file D:\\FIRMWARE.BIN non presente
2602
- fclose(pfile); // prova
2603
- break;
2604
-
2605
- case 1000: // fine invio
2606
- fclose(pfile);
2607
- // riavvia il task puzzle, e resetta tutte le variabili del caso
2608
- pboot_status = 0;
2609
- if ( puzzle_com == P_RS485 ) puzzle_start();
2610
- else puzzle_start_can(p_ext1_on, p_ext2_on);
2611
- remove_task(puzzle_fupdate);
2612
- break;
2613
-
2614
- default:
2615
- break;
2616
- }
2617
-
2618
- wait(20);
2619
- }
2620
- }
2621
-
2622
-Nello start.c:
2623
-
2624
- // Configurazione puzzle
2625
- xn_config[0] = C_PT100; // Ogni slot xn viene configurato con la cosa collegata
2626
- xn_config[1] = C_PT100;
2627
- xn_config[2] = C_IN;
2628
- xn_config[3] = C_EMPTY;
2629
- xn_config[4] = C_EMPTY;
2630
- xn_config[5] = C_EMPTY;
2631
- xn_config[6] = C_EMPTY;
2632
- xn_config[7] = C_EMPTY;
2633
- //--------------------------------------
2634
- p1_xn_config[0] = C_PT100; // Anche per la periferica 1
2635
- p1_xn_config[1] = C_EMPTY;
2636
- p1_xn_config[2] = C_IN;
2637
- p1_xn_config[3] = C_IN;
2638
- p1_xn_config[4] = C_EMPTY;
2639
- p1_xn_config[5] = C_EMPTY;
2640
- p1_xn_config[6] = C_EMPTY;
2641
- p1_xn_config[7] = C_EMPTY;
2642
-
2643
- // deve essere fatto per ogni periferica
2644
-
2645
-
2646
- puzzle_start_can(1, 1); // inizializza il CAN (e1, e2) indicano: e1 = 0 --> no espansione da 1 a 4 e no encoder 1
2647
- // e1 = 1 --> si espansioni da 1 a 4 oppure si encoder 1
2648
- // e2 = 0 --> no espansione da 5 a 8 e no encoder 2
2649
- // e2 = 1 --> si espansione da 5 a 8 oppure si encoder 2
2650
-
2651
-Nel common.h:
2652
-
2653
- #define PUZZLE_PERIFS 2 // In questo esempio le periferiche puzzle sono 2
2654
- #include "puzzle.h"
2655
-
2656
- //-------------------------- uscite -----------------------//
2657
- #define pompaDiRisalita p_o1
2658
- #define pompaCambioAcquaSporca p_o2
2659
- #define skimmer p_o3
2660
- #define reattoreZeolite p_o4
2661
- #define riscaldatore1 p_o5
2662
- #define plafonieraATS p_o6
2663
- #define telecamera p_o7
2664
- #define pompaMovimentoAlta p_o8
2665
- #define pompaMovimentoBassa p_o9
2666
- #define pompaMovimentoAlternata p_o10
2667
- #define plafoniera p_o11
2668
- #define ventolaRaffreddamentoSx p_o12
2669
- #define ventolaRaffreddamentoDx p_o13
2670
- #define dosometrica p_o14
2671
- #define pompaATS p_o15
2672
- #define mangiatoia p_o16
2673
-
2674
- #define pompaPrelievoAcquaOsmosi p1_o1
2675
- #define pompaMoviAcquaSalata p1_o2
2676
- #define riscaldatore2 p1_o3
2677
- #define pompaCambioAcquaNuova p1_o4
2678
- #define EVacquaOsmosi p1_o5
2679
- #define EVpuliziaOsmosi p1_o6
2680
- #define EVrabbocco p1_o7
2681
- #define EVboosterOsmosi p1_o8
2682
-
2683
- //------------------------------ ingressi ---------------------------//
2684
- #define sondaLivelloAcquario x3_i1
2685
- #define sondaLivelloSump x3_i2
2686
- #define sondaTemperaturaAcquario PT100_X1_perif0 //x1_pt100
2687
- #define sondaTemperaturaSump PT100_X2_perif0 //x2_pt100
2688
-
2689
- #define sondaLivelloMaxOsmosi p1_x3_i1
2690
- #define sondaLivelloMinOsmosi p1_x3_i2
2691
- #define sondaLivelloAcquaSporca p1_x4_i1
2692
- #define sondaLivelloAcquaNuova p1_x4_i2
2693
- #define sondaTemperaturaAcquaNuova PT100_X1_perif1 //p1_x1_pt100
howto/come_gestire_comunicazione_CAN_con_PUZZE.textile
... ...
@@ -0,0 +1,43 @@
1
+**CONFIGURAZIONE ED UTILIZZO DI UN MASTER PUZZLE IN CAN**
2
+
3
+In questo esempio si vuole utilizzare un master puzzle che comunica con un dispositivo syel P10 linux.
4
+Sul master sono state utilizzate tre cartucce con tre tipi di ingressi differenti a titolo dimostrativo.
5
+Nel file start.c si nota come siano state dichiarate
6
+
7
+```
8
+xn_config[0] = C_ADC; // ingresso analogico
9
+xn_config[1] = C_IN; // ingress1 digitali
10
+xn_config[2] = C_OUT; // uscite digitali
11
+xn_config[3] = C_EMPTY;
12
+xn_config[4] = C_EMPTY;
13
+xn_config[5] = C_EMPTY;
14
+xn_config[6] = C_EMPTY;
15
+xn_config[7] = C_EMPTY;
16
+
17
+puzzle_start_can(0, 0); // avvio comunicazione
18
+```
19
+
20
+Nel file common.h viene inizialmente inclusa la libreria apposita "puzzle6.h"
21
+```
22
+#include "puzzle6.h"
23
+
24
+#define Ing_Anal p50_x1_anal
25
+#define Ing_dig1 x2_i1 // X2.0
26
+#define Ing_dig2 x2_i2 // X2.1
27
+#define Out_dig1 x3_o1 // X3.0
28
+#define Out_dig2 x3_o2 // X3.1
29
+```
30
+
31
+Nell'esempio, oltre che modificare le uscite digitali e leggere gli ingressi sia digitali che quello analogico vengono fatte delle valutazioni sul valor medio del dato analogico. A display vedrete i seguenti valori:
32
+**Ing_Anal** = lettura ingresso analogico
33
+**Ing_Anal_max** = massimo valore letto in ingresso (a fianco c'è un numero che sono i campioni sopra il valor medio di 10 tik)
34
+**Ing_Anal_min** = minimo valore letto in ingresso (a fianco c'è un numero che sono i campioni sotto il valor medio di 10 tik)
35
+**Ing_Anal_mediato** = lettura ingresso analogico mediata
36
+**Ing_Anal** = massimo valore mediato
37
+**Ing_Anal** = lminimo valore mediato
38
+Il tasto reset azzera questi valori
39
+
40
+L'esempio è stato testato su un dispositivi syel p10 ed un master puzzle via CAN bus ed è liberamente scaricabile dal seguente link:
41
+https://drive.google.com/file/d/1UyvUWTlRFX60brPdWx8EqynhXc16tAQV/view?usp=sharing
42
+
43
+2025-02-04 Creatore dell'articolo Simone De Santis. Per ulteriori richieste simone.desantis@syel.it