Buonasera a tutti,
Chiedo un aiuto per quanto riguarda il protocollo can bus. Sto cercando di far comunicare due pic 18F2580 con modulo ECAN attraverso il protocollo CAN bus.
Entrambi i pic lavorano con un quarzo da 20MHz e condensatori da 15pF e sono interfacciati sul bus attraverso i trasceiver mcp2551.
Sto utilizzando il vecchio MPLAB v8.92 con il compilatore C18 C compiler v3.47. Ho preso come riferimento la libreria laurtec CANlib.h.
Ho preso come spunto l'esempio sul tutorial della libreria, ma fino ad ora (per mia inesperienza) non sono riuscito a
far funzionare il sistema. Ho caricato lo stesso programma su entrambi i pic.
Il programma è pensato per accendere un led dopo aver pigiato un tasto.
Code:
// Imposta la modalità di funzionamento del modulo CAN
CANOperationMode (CAN_OP_MODE_NORMAL);
// 20 MHz 125Kb/s --> 2,7,6,1,4,
CANInitialize (2, 7, 6, 1, 4, CAN_CONFIG_LINE_FILTER_OFF &
CAN_CONFIG_SAMPLE_ONCE &
CAN_CONFIG_ALL_VALID_MSG &
CAN_CONFIG_DBL_BUFFER_ON);
// Ciclo infinito
while(1) {
// Azzero il contenuto nell' Array
info [0] = 0x00;
if (BUTTON_1 == BUTTON_PRESSED) {
info[0] = 0x01;
}
if (info[0] > 0) {
// Controlla che sia possibile inviare il messaggio
while (!CANisTxReady())
// Invia il carattere sul CANbus
CANsendMessage (0x0A005510, info, 1, CAN_TX_XTD_FRAME &
CAN_NORMAL_TX_FRAME &
CAN_TX_PRIORITY_2);
}
// Controlla se è stato ricevuto un dato
if (CANisRxReady()) {
CANreceiveMessage(&msg);
if (msg.data[0] == 0x01) {
LED = 0x01;
}
}
}
Qualcuno sa dirmi cosa sto sbagliando?
Vi ringrazio di cuore.
Valerio