Buonasera, mi aggiungo alla discussione per chiedere un chiarimento...
Ho sviluppato una scheda che riceve dati da un canbus, ma al momento di provarla, questa non funzionava...
Ho verificato che effettivamente vi fosse un segnale sulla linea tramite un oscilloscopio, ed effettivamente si vedeva un segnale sia in ingresso al tranceiver, sia in ingresso al pic (qui, naturalmente, solo sulla linea di ricezione). Quindi penso che il problema sia di natura software.
Ho inizializzato il modulo can del pic seguendo le istruzioni del datasheet, ovvero:
1. Initial LAT and TRIS bits for RX and TX CAN.
2. Ensure that the ECAN module is in Configuration mode.
3. Select ECAN Operational mode.
4. Set up the Baud Rate registers.
5. Set up the Filter and Mask registers.
6. Set the ECAN module to normal mode or any other mode required by the application logic.
ma verificando lo stato dei registri tramite la funzione di debug del pickt3 (mi sembra si chiami così il programmatore che sto usando), si vede che il bit RXFUL del registro RXB0CON rimane costantemente a zero, ciò mi porta a pensare che il problema sia nella inizializzazione del modulo e non nella parte relativa alla lettura del messsaggio.
Poichè mi sembrerebbe che i registri relativi al baud rate siano settatti giustamente (cosa non certa però), vorrei chiedervi, nel caso di identificatori standard a 11 bit, e nel caso io dovessi ricevere solamente il pacchetto con identificatore 001 0000 0110, se io setto i registri relativi a maschere e filtri in questo modo:
Codice:
///// Maschere buffer0 e buffer1, vengono controllati tutti i bit
//Standard MASK RX BUFFER 0
RXM0SIDH = 0b11111111;
RXM0SIDL = 0b11100000;
//Standard MASK RX BUFFER 1
RXM1SIDH = 0b11111111;
RXM1SIDL = 0b11100000;
/// Filtri buffer0 e buffer1, viene fatto passare solo identificatore 0x106
// STANDARD FILTER 0 BUFFER 0
RXF0SIDLbits.EXIDEN = 0x00; //standard filter
RXF0SIDH = 0b00100000;
RXF0SIDL = 0b11000000;
// STANDARD FILTER 1 BUFFER 0
RXF1SIDLbits.EXIDEN = 0x00; //standard filter
RXF1SIDH = 0b00100000;
RXF1SIDL = 0b11000000;
// STANDARD FILTER 2 BUFFER 1
RXF2SIDLbits.EXIDEN = 0x00; //standard filter
RXF2SIDH = 0b00100000;
RXF2SIDL = 0b11000000;
// STANDARD FILTER 3 BUFFER 1
RXF3SIDLbits.EXIDEN = 0x00; //standard filter
RXF3SIDH = 0b00100000;
RXF3SIDL = 0b11000000;
// STANDARD FILTER 4 BUFFER 1
RXF4SIDLbits.EXIDEN = 0x00; //standard filter
RXF4SIDH = 0b00100000;
RXF4SIDL = 0b11000000;
// STANDARD FILTER 5 BUFFER 1
RXF5SIDLbits.EXIDEN = 0x00; //standard filter
RXF5SIDH = 0b00100000;
RXF5SIDL = 0b11000000;
è corretto o dimentico qualcosa?