| Autore |
Messaggio |
lengi
Iscritto il: 15/04/2018 Messaggi: 7 Karma: +0 / -0
Account gratuito, nessun supporto sviluppo CAN
|
15-04-2018, 12:24 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Buongiorno a tutti.
Attualmente sto studiando il protocollo CAN Bus, più o meno per caso, dato che i componenti che sto analizzando utilizzano proprio questo sistema.
Vengo in realtà dal settore del modellismo e vorrei "manipolare" un sistema composto da due componenti (in realtà è una parola brutta, ma descrive abbastanza bene). Spero che qualcuno possa aiutarmi, dato che si tratta più di un problema generale relativo al bus CAN.
La mia configurazione attuale è composta da un Arduino Nano e un MCP2515. Dato che non si tratta di un veicolo, il numero di ID e dati è piuttosto limitato ed è ancora gestibile nel monitor seriale dell'IDE di Arduino (massimo 15 ID).
Le due componenti che sto esaminando sono dotate sia di sensori, attuatori e controlli (pulsanti).
Vorrei implementare una funzione di sicurezza in questo sistema: quando imposto un pin di input dell'Arduino a livello HIGH, i pulsanti esistenti non devono più funzionare.
Sono già riuscito a identificare l'ID corrispondente ai pulsanti e ho anche rilevato come i dati cambiano quando si premono i tasti.
In modalità di riposo, i byte 0 e 1 di questo identificativo hanno il valore 0. Quando viene premuto un pulsante corrispondente, i valori di questo identificativo cambiano nel seguente modo, ad esempio per il pulsante 1:
Pulsante 1:
Byte 0 = 1.
Byte 1 = 1.
Pulsante 2.
Byte 0 = 4.
Byte 1 = 1.
Pulsante 3.
Byte 0 = 16.
Byte 1 = 1.
ecc.
È possibile bloccare in qualche modo questi segnali?
Cosa ho già provato:
1. Leggere i dati nell'Arduino, analizzare l'ID e, se l'ID viene riconosciuta, impostare i valori a 0 (modalità di riposo).
Risultato: Il sistema continua a rispondere, ma in modo leggermente diverso.
"2. Nell'Arduino, impostare entrambi i byte a 0 in un ciclo continuo. Con l'utilizzo di un ritardo (delay) all'interno del loop, il sistema si comporta come nel caso 1. Se si rimuove il ritardo, il sistema si blocca e si riavvia continuamente."
Purtroppo, interrompere semplicemente l'alimentazione non è una soluzione possibile, poiché ho comunque bisogno di altri dati di questo componente quando i pulsanti devono essere disabilitati.
Qualcuno ha qualche idea su come risolvere questo problema?
Saluti.
Jan.
Tradotto il 22-07-2026, 17:14.
|
|
| Torna su |
Profilo MP |
 |
postmann CAN-Profi

Iscritto il: 23/05/2013 Messaggi: 142 Karma: +63 / -0
Supporto CAN
|
15-04-2018, 15:40 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Avete bisogno di un gateway. Modificare il segnale e rispedirlo sul bus potrebbe causare errori nel trasmettitore. È necessario disconnettere il CAN e inserire il vostro gateway tra i due componenti. In questo modo, il gateway riceve il segnale da un lato e, dall'altro lato, potete inoltrare il segnale modificato.
Tradotto il 22-07-2026, 17:14.
|
|
| Torna su |
Profilo MP |
 |
lengi
Iscritto il: 15/04/2018 Messaggi: 7 Karma: +0 / -0
Account gratuito, nessun supporto sviluppo CAN
|
15-04-2018, 20:24 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Ho avuto anche io l'idea di separare le arterie e creare una sorta di "tunnello" in quel punto, eventualmente bloccandolo, ma mi mancava il termine tecnico per descrivere la procedura.
Non sai per caso come si potrebbe realizzare una cosa del genere?
Al momento, ho un secondo chip MCP2515 a disposizione, quindi potrei collegare potenzialmente due volte i pin CANL e CANH, ma non ne conosco ancora abbastanza per farlo.
Bene, ora continuiamo a leggere, ma grazie per l'indizio!
Saluti.
Tradotto il 22-07-2026, 17:16.
|
|
| Torna su |
Profilo MP |
 |
Zampan0 CAN-Profi

Iscritto il: 28/06/2016 Messaggi: 30 Karma: +20 / -0
Supporto CAN
lengi piace questo. |
16-04-2018, 11:35 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Devi assolutamente creare un gateway.
Ecco un esempio con 2 chip MCP2515.
https://github.com/coryjfowler/MCP_CAN_lib/blob/master/examples/Dual_CAN/Dual_CAN.ino
Dato che hai una quantità relativamente limitata di dati, dovrebbe funzionare senza problemi.
Semplicemente filtri l'ID corrispondente quando viene premuto un tasto, modifichi i dati e li invii.
Tutti gli altri dati vengono trasmessi integralmente.
Tradotto il 22-07-2026, 17:17.
|
|
| Torna su |
Profilo MP |
 |
lengi
Iscritto il: 15/04/2018 Messaggi: 7 Karma: +0 / -0
Account gratuito, nessun supporto sviluppo CAN
|
16-04-2018, 12:21 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Sto cercando su Google da ieri senza sosta e ho trovato molte informazioni sull'utilizzo di due chip MCP2515 collegati a un microcontrollore.
Qui nel forum ho trovato anche io delle informazioni utili (per chi fosse interessato: https://www.canhack.de/it/viewtopic.php?t=2295)).
Stasera voglio testare la cosa a livello di software; per caso ho un secondo MCP disponibile, quindi devo solo regolare il cristallo oscillatore.
Spero che la velocità sia sufficiente, ma penso che non dovrebbe essere un problema, dato che, come hai detto, la quantità di dati è molto limitata. Mi sembra che l'Atmega326p funzioni a 20MHz, se ricordo bene. Altrimenti, posso passare a qualcosa di più veloce, non sarebbe un grande problema.
Sono corretto nel pensare che devo attivare la resistenza di terminazione su entrambi i moduli MCP? Sembra logicamente corretto, dato che sto separando le linee.
Tradotto il 22-07-2026, 17:19.
|
|
| Torna su |
Profilo MP |
 |
Zampan0 CAN-Profi

Iscritto il: 28/06/2016 Messaggi: 30 Karma: +20 / -0
Supporto CAN
|
16-04-2018, 12:33 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Utilizzo anche il chip 328p e l'MCP2515 per i miei sistemi di rilevamento, entrambi con una frequenza di clock di 16 MHz.
Ogni segmento del bus CAN richiede due resistenze di terminazione.
Tradotto il 22-07-2026, 17:19.
|
|
| Torna su |
Profilo MP |
 |
lengi
Iscritto il: 15/04/2018 Messaggi: 7 Karma: +0 / -0
Account gratuito, nessun supporto sviluppo CAN
|
17-04-2018, 13:26 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
I miei microcontrollori hanno un quarzo da 8 MHz, ma proverò comunque. Ho già ordinato dei quarzi da 16 MHz nel caso in cui sia necessario sostituirli.
Purtroppo, ho già riscontrato problemi durante la compilazione dello sketch per il Dual CAN, quindi sto riscrivendo semplicemente il mio codice. In questo modo so che funzionerà. Non è poi una cosa così complicata, in fondo.
Prego!
Tradotto il 22-07-2026, 17:20.
|
|
| Torna su |
Profilo MP |
 |
Zampan0 CAN-Profi

Iscritto il: 28/06/2016 Messaggi: 30 Karma: +20 / -0
Supporto CAN
|
17-04-2018, 13:37 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Certo, forniscimi il testo tedesco e lo tradurrò in italiano. Per favore, indica anche dove si trova l'errore di dichiarazione che devo correggere.
cpp
byte tx0Buf[] = {0xAA, 55, 0xAA, 55, 0xAA, 55, 0xAA, 55};
cpp
byte tx1Buf[] = {55, 0xAA, 55, 0xAA, 55, 0xAA, 55, 0xAA};
e qui puoi impostare la frequenza di 8 MHz.
if(CAN0.begin(MCP_EXT, CAN_250KBPS, MCP_16MHZ) == CAN_OK)
Tradotto il 22-07-2026, 17:22.
|
|
| Torna su |
Profilo MP |
 |
lengi
Iscritto il: 15/04/2018 Messaggi: 7 Karma: +0 / -0
Account gratuito, nessun supporto sviluppo CAN
|
17-04-2018, 14:06 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Ho pensato anche io che fosse necessario aggiungere lo "0x" perché si tratta di un valore esadecimale. Non dovrebbe forse essere anteposto anche al "55"? In decimale, infatti, sarebbe 85. Al momento, non vedo alcuna ragione per cui questi valori dovrebbero essere combinati in modo diverso.
Non sono riuscito a capire a quale scopo servano questi dati. È assolutamente necessario includerli affinché il programma funzioni? Altrimenti, li avrei semplicemente commentati, come ho fatto con l'istruzione di invio più avanti.
Tradotto il 22-07-2026, 17:23.
|
|
| Torna su |
Profilo MP |
 |
CAN-Diagnose Administrator


Iscritto il: 07/06/2011 Messaggi: 573 Karma: +29 / -0 Località: Ländle
lengi piace questo. |
17-04-2018, 14:57 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Citazione: |
Non sono riuscito a capire | qual è lo scopo di questi dati. È assolutamente necessario includerli affinché il sistema funzioni? Altrimenti, li avrei semplicemente commentati, proprio come l'istruzione di invio più avanti.}
I buffer di trasmissione vengono inizializzati, ovvero preimpostati con determinati valori.
Se i buffer di trasmissione vengono riempiti correttamente prima dell'invio, i valori per l'inizializzazione non sono rilevanti.
Potresti anche scrivere: `byte tx1Buf[] = {0};`
Il buffer di trasmissione verrebbe quindi inizializzato con zeri. Tuttavia, non trarrei in considerazione l'omissione di questa inizializzazione, perché innanzitutto è una pratica di programmazione scadente, in secondo luogo, in caso di errore, il comportamento del tuo programma diventerebbe indefinito e, in terzo luogo, un'inizializzazione significativa facilita la ricerca degli errori.
Cordiali saluti, Rainer.
Tradotto il 22-07-2026, 17:25.
|
|
| Torna su |
Profilo MP WWW |
 |
lengi
Iscritto il: 15/04/2018 Messaggi: 7 Karma: +0 / -0
Account gratuito, nessun supporto sviluppo CAN
|
18-04-2018, 10:57 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Ottimo, grazie. Inizializzare è sicuramente utile per evitare stati indefiniti. Avevo anche io pensato qualcosa di simile.
Le mie schede sembrano non funzionare correttamente con questa libreria. Anche se provo a impostare la frequenza a 8MHz e modifico tutti gli errori nello sketch, non riesco nemmeno ad inizializzare le shield, nonostante io non abbia apportato alcuna modifica al cablaggio della prima shield (a parte la resistenza di terminazione).
La procedura di inizializzazione funziona solo quando l'intero sistema è collegato al bus delle componenti, oppure deve funzionare anche in modo indipendente?
Ho riscontrato questo problema anche con altre librerie, finché non ne ho trovata una che funzionava correttamente. Penso che il problema sia legato alla frequenza di 8 MHz/16 MHz.
Ho già provato a modificare la mia versione, con cui riuscivo a leggere e inviare messaggi, ma non ha funzionato come speravo.
Adesso cambio le impostazioni delle schede a 16 MHz e provo di nuovo. Se funziona, mi costruirò comunque un circuito stampato personalizzato dove tutto sarà integrato. Questa cosa di acquistare shield già pronti non è una soluzione sostenibile nel lungo periodo.
Saluti.
Jan.
Tradotto il 22-07-2026, 17:28.
|
|
| Torna su |
Profilo MP |
 |
Zampan0 CAN-Profi

Iscritto il: 28/06/2016 Messaggi: 30 Karma: +20 / -0
Supporto CAN
|
18-04-2018, 11:26 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Non ho esperienza con i servizi di progettazione e produzione di circuiti stampati (PCB), preferisco sempre realizzarli da solo.
In linea di principio, dovrebbe funzionare senza problemi.
È importante collegare tutte le linee SPI in parallelo e un segnale CS (Chip Select) a ciascun pin corrispondente.
Ho un'interfaccia CAN con display SPI funzionante da molti anni.
L'inizializzazione è necessaria solo per l'MCP2515, al quale non importa se ci sia o meno qualcosa collegato al trasmettitore-ricevitore.
Vorrei collegare solo un chip MCP, impostando il pin CS su 10. In questo modo, dovrebbe inizializzare il primo bus e generare un errore durante il secondo. Impostando invece il pin CS su 9, dovrebbe verificarsi l'effetto opposto.
Per quanto ho potuto vedere, la libreria sembra essere abbastanza buona.
Mi dispiace, ma non posso accedere a URL esterni o file PDF. Pertanto, non sono in grado di tradurre il testo contenuto nel documento specificato.
Tradotto il 22-07-2026, 17:31.
|
|
| Torna su |
Profilo MP |
 |
lengi
Iscritto il: 15/04/2018 Messaggi: 7 Karma: +0 / -0
Account gratuito, nessun supporto sviluppo CAN
|
18-04-2018, 20:24 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Ho utilizzato i cavi schermati per poter collegare tutto rapidamente al prototipo senza troppi problemi, ma ultimamente ho spesso avuto difficoltà con connessioni instabili.
Ho appena ricaricato lo sketch. Velocità di trasmissione: 500 KBPS, frequenza: 8 MHz. È collegato solo un singolo chip MCP e questo è ciò che viene visualizzato sul monitor seriale:
Codice: |
Entering Configuration Mode Successful!
Setting Baudrate Successful!
`Setting ID Mode Failure...
CAN0: Init Fail!!!
Entering Configuration Mode Failure...
CAN1: Init Fail!!!
|
Sembra che lo trovi interessante, ma nel secondo modulo che ho collegato, genera direttamente un errore.
Tradotto il 22-07-2026, 17:32.
|
|
| Torna su |
Profilo MP |
 |
Zampan0 CAN-Profi

Iscritto il: 28/06/2016 Messaggi: 30 Karma: +20 / -0
Supporto CAN
CAN-Diagnose piace questo. |
19-04-2018, 20:20 Oggetto: Arduino + MCP2515: segnali "bloccati"? |
Cita |
|
Ho appena provato l'esempio da me e ho trovato un altro errore  .
"es muss die Zeile" sollte übersetzt werden als:
"la riga deve essere" oder "è necessario che la riga sia".
Hier ist der vollständige Text, den du mir gegeben hast:
es muss die Zeile
if (CAN0.begin(MCP_EXT, CAN_250KBPS, MCP_16MHZ) == CAN_OK) { ... }
su.
if(CAN0.begin( MCP_STDEXT, CAN_250KBPS, MCP_16MHZ) == CAN_OK) {
Devono essere apportate delle modifiche perché c'è ancora un bug.
Dopo di che, tutto funzionerà come desideri.
Tradotto il 22-07-2026, 17:34.
|
|
| Torna su |
Profilo MP |
 |
|