CAN bus Shield 1.2 + Seeed Stalker 2.3 + multiple SoftSerial

Ciao a tutti,

Sto provando a connettere un Seeeduino Stalker 1.2 + Seeedstudio CAN Bus Shield v1.2 + e una shield custom che monitora la qualità dell'aria.

Il CAN bus shield comunica tramite SPI attraverso i pins 2 (INT), 9 (SS), gli altri pin dell'MCP2515 sono connessi all'ICSP(MISO, MOSI, SCK).
Lo shield custom comunica con lo Stalker attraverso una Software Serial sui pins 2 (TX) e 3 (RX).

Per simulare una rete CAN utilizzo il software PCAN Explorer, con BitRate = 250 kbit/s, messaggi con ID esteso (29bit) e Cycle Time compreso tra 20ms e 1000ms.

In particolare, solamente 3 messages hanno un Cycle Time di 20 ms, gli altri di 300ms, 500ms e 1000ms.

Ho provato a programmare il seeeduino stalker e uno degli shield sopra riportati singolarmente e tutti funzionano correttamente. Ho un problema quando provo a integrare il CAN Bus Shield, la scheda custom e il seeeduino stalker.

Il principale problema è dovuto alla condivisione del pin 2 utilizzato dal CAN Bus Shield come interrupt per la lettura del messaggi ricevuti e dalla shield custom che utilizza i pin 2 e 3 come software serial.

Per evitare di dover rimuovere i pin 2 e 3 dello shield custom e creare un collegamento volante su altri 2 pin del Seeeduino Stalker ho provato a temporizzare il funzionamento del pin 2 una volta come interrupt e una volta come pin digitale.

In pratica leggo sempre i messaggi CAN in arrivo dalla bus CAN, ogni 5s vorrei interrompere la lettura dei messaggi CAN e leggere i dati inviati dallo shield custom.

Al momento ho provato a:

  1. disabilitare tutti gli interrupts, leggere i dati dello shield custom e riabilitare gli interrupts
  2. disabilitare la comunicazione SPI, leggere i dati dello shield custom e riabilitare la SPI
  3. utilizzare dei ritardi nel programma che consentissero allo shield custom di leggere i dati ambientali ed esporli sulla seriale.

Ogni prova al momento non ha dato esito positivo e vorrei sapere se qualcuno è in grado di capire che errore sto commettendo. Il codice che sto utilizzando al momento è nell'allegato e sulla comunicazione seriale leggo i seguenti dati:

/Ho la rete CAN attiva (ricevo messaggi CAN)/
CAN BUS Shield init ok!
Time: 79 - ID: 18FF8F03
Time: 147 - ID: 18FF8F03
Time: 217 - ID: 18FF8F03
Time: 284 - ID: 18FF8F03
Time: 354 - ID: 18FF8F03
Time: 421 - ID: 18FF8F03
Time: 489 - ID: 18FF8F03
Time: 559 - ID: 18FF1027
Time: 626 - ID: 18FF8F03
Time: 696 - ID: 18FF8F03
Time: 763 - ID: 18FF8F03
Time: 833 - ID: 18FF8F03
Time: 901 - ID: 18FF9F1E
Time: 970 - ID: 18FF8F03
Time: 1038 - ID: 18FF8F03
Time: 1107 - ID: 18FF9F1E
Time: 1175 - ID: 18FF8F03
Time: 1245 - ID: 18FF8F03
Time: 1312 - ID: 18FF9F1E
Time: 1382 - ID: 18FF8F03
Time: 1449 - ID: 18FF8F03
Time: 1519 - ID: 18FF8F03
Time: 1587 - ID: 18FF8F03
Time: 1656 - ID: 18FF8F03
Time: 1724 - ID: 18FF8F03
Time: 1794 - ID: 18FF8F03
Time: 1861 - ID: 18FF8F03
Time: 1931 - ID: 18FF8F03
Time: 1998 - ID: 18FF8F03
Time: 2068 - ID: 18FF8F03
Time: 2136 - ID: 18FF8F03
Time: 2205 - ID: CFF3F27
Time: 2273 - ID: 18FF8F03
Time: 2342 - ID: 18FF8F03
Time: 2410 - ID: 18FF9F1E
Time: 2480 - ID: 18FF8F03
Time: 2547 - ID: 18FF1027
Time: 2617 - ID: 18FF8F03
Time: 2684 - ID: 18FF8F03
Time: 2754 - ID: 18FF8F03
Time: 2822 - ID: 18FF8F03
Time: 2891 - ID: 18FF8F03
Time: 2961 - ID: 18FF8F03
Time: 3028 - ID: 18FF8F03
Time: 3098 - ID: 18FF8F03
Time: 3166 - ID: 18FF8F03
Time: 3235 - ID: 18FF8F03
Time: 3303 - ID: 18F0010B
Time: 3373 - ID: 18FF8F03
Time: 3440 - ID: 18FF8F03
Time: 3510 - ID: 18FF9F1E
Time: 3577 - ID: 18FF8F03
Time: 3647 - ID: 18FF8F03
Time: 3715 - ID: 18FF8F03
Time: 3784 - ID: 18FF8F03
Time: 3852 - ID: 18FF8F03
Time: 3921 - ID: 18FF8F03
Time: 3989 - ID: 18FF8F03
Time: 4059 - ID: 18FF1027
Time: 4126 - ID: 18FF8F03
Time: 4196 - ID: 18FF8F03
Time: 4263 - ID: 18FF8F03
Time: 4333 - ID: 18FF8F03
Time: 4401 - ID: 18FF9F1E
Time: 4470 - ID: 18FF8F03
Time: 4538 - ID: 18FF8F03
Time: 4608 - ID: CFF3F27
Time: 4675 - ID: 18FF8F03
Time: 4745 - ID: 18FF8F03
Time: 4812 - ID: 18FF9F1E
Time: 4882 - ID: 18FF8F03
Time: 4950 - ID: 18FF8F03
Time: 5019 - ID: 18FF8F03
Time: 5087 - ID: 18FF8F03
Time: 5156 - ID: 18FF8F03
Time: 5224 - ID: 18FF8F03
Time: 5294 - ID: 18FF8F03
Time: 5361 - ID: 18FF8F03
Time: 5431 - ID: 18FF8F03

/Non ho la rete CAN attiva (nessun messaggio ricevuto)/
CAN BUS Shield init ok!

Time: 0 - Ambiental data: 0740, 0242, 0455, 000017068, 0016, 0267, 0000, 0196, 0000005, 0740, 0242,,000
CAN Message EVCU1_DICO: 000000000

Time: 5000 - Ambiental data: 0740, 0242, 0455, 000017392, 0016, 0265, 0000, 0195, 0000004, 0740, 0242, 0455, 10007
CAN Message EVCU1_DICO: 000000000

Time: 10000 - Ambiental data: 0739, 0242, 0454, 000019903, 0016, 0265, 0000, 0198, 0000006, 0739, 0242, 04662 0

CAN Message EVCU1_DICO: 000000000

Time: 15000 - Ambiental data: 0737, 0242, 0454, 000017946, 0016, 0265, 0000, 0196, 0000004, 0737, 0242, 0401000
CAN Message EVCU1_DICO: 000000000

CAN_e_Ambiente.ino (8.51 KB)