Quote Originally Posted by comwarrior
The 4550 is quite commonly supported... not only that but the datasheets seem (to me) to be written properly...

I've not played with CAN, however i (along with a lot of other people on here) know the 4550 very well...
Thank you for your substantive post. It has helped me greatly.

Are you using SHIFTOUT to write the values or do you use the MSSP module?

If it was me I start by making a routine which write values to the MCP2515. Then I'd make a routine which reads values from the MCP2515 to verify that the write routine is working properly.

Can you post some code of your current attempts?
I'm using the MSSP. I think my commands are getting to the MCP but I'm guessing my problem lies in one of these places:

CNF1, CNF2, CNF3, SSPCON, SSPSTAT OR BAUDCON. It could be anywhere else too. Basically, the entire program is suspect. Thanks for the help Henrik. Maybe you can spot some issues with what I wrote:

Code:
INCLUDE "modedefs.bas"
'          
DEFINE OSC 20 


'==============================================================================
'                 SETTINGS
' ==============================================================================
           '76543210          '76543210
 TRISA   = %11111111: PORTA = %00000000 
 TRISB   = %00010001: PORTB = %00010000   
 TRISC   = %00000000: PORTC = %00000001
 TRISD   = %11111111: PORTD = %00000000
 TRISE   = %00010000: PORTE = %00010111
 ADCON0  = %00000000
 ADCON1  = %00000000
 ADRESH  = %00000000 
 ADRESL  = %00000000
 CMCON   = %00000000
 SSPSTAT = %11000100      
 SSPCON1 = %10110001 
 BAUDCON = %00001111   
    

'===============================================================================
'                   Register Mapping                          
'================================================================================

 CANSTAT         CON    $0E
 CANCTRL         CON    $0F
 BFPCTRL         CON    $0C
 TEC             CON    $1C
 REC             CON    $1D
 CNF3            CON    $28
 CNF2            CON    $29
 CNF1            CON    $2A
 CANINTE         CON    $2B
 CANINTF         CON    $2C
 EFLG            CON    $2D
 TXRTSCTRL       CON    $0D

''  Recieve Filters ''
 RXF0SIDH        CON    $00
 RXF0SIDL        CON    $01
 RXF0EID8        CON    $02
 RXF0EID0        CON    $03
 RXF1SIDH        CON    $04
 RXF1SIDL        CON    $05
 RXF1EID8        CON    $06
 RXF1EID0        CON    $07
 RXF2SIDH        CON    $08
 RXF2SIDL        CON    $09
 RXF2EID8        CON    $0A
 RXF2EID0        CON    $0B
 RXF3SIDH        CON    $10
 RXF3SIDL        CON    $11
 RXF3EID8        CON    $12
 RXF3EID0        CON    $13
 RXF4SIDH        CON    $14
 RXF4SIDL        CON    $15
 RXF4EID8        CON    $16
 RXF4EID0        CON    $17
 RXF5SIDH        CON    $18
 RXF5SIDL        CON    $19
 RXF5EID8        CON    $1A
 RXF5EID0        CON    $1B

'' Receive Masks ''
 RXM0SIDH        CON    $20
 RXM0SIDL        CON    $21
 RXM0EID8        CON    $22
 RXM0EID0        CON    $23
 RXM1SIDH        CON    $24
 RXM1SIDL        CON    $25
 RXM1EID8        CON    $26
 RXM1EID0        CON    $27

'' Tx Buffer 0 ''
 TXB0CTRL        CON    $30
 TXB0SIDH        CON    $31
 TXB0SIDL        CON    $32
 TXB0EID8        CON    $33
 TXB0EID0        CON    $34
 TXB0DLC         CON    $35
 TXB0D0          CON    $36
 TXB0D1          CON    $37
 TXB0D2          CON    $38
 TXB0D3          CON    $39
 TXB0D4          CON    $3A
 TXB0D5          CON    $3B
 TXB0D6          CON    $3C
 TXB0D7          CON    $3D
                         
'' Tx Buffer 1 ''
 TXB1CTRL        CON    $40
 TXB1SIDH        CON    $41
 TXB1SIDL        CON    $42
 TXB1EID8        CON    $43
 TXB1EID0        CON    $44
 TXB1DLC         CON    $45
 TXB1D0          CON    $46
 TXB1D1          CON    $47
 TXB1D2          CON    $48
 TXB1D3          CON    $49
 TXB1D4          CON    $4A
 TXB1D5          CON    $4B
 TXB1D6          CON    $4C
 TXB1D7          CON    $4D

'' Tx Buffer 2 ''
 TXB2CTRL        CON    $50
 TXB2SIDH        CON    $51
 TXB2SIDL        CON    $52
 TXB2EID8        CON    $53
 TXB2EID0        CON    $54
 TXB2DLC         CON    $55
 TXB2D0          CON    $56
 TXB2D1          CON    $57
 TXB2D2          CON    $58
 TXB2D3          CON    $59
 TXB2D4          CON    $5A
 TXB2D5          CON    $5B
 TXB2D6          CON    $5C
 TXB2D7          CON    $5D
                         
'' Rx Buffer 0 ''
 RXB0CTRL        CON    $60
 RXB0SIDH        CON    $61
 RXB0SIDL        CON    $62
 RXB0EID8        CON    $63
 RXB0EID0        CON    $64
 RXB0DLC         CON    $65
 RXB0D0          CON    $66
 RXB0D1          CON    $67
 RXB0D2          CON    $68
 RXB0D3          CON    $69
 RXB0D4          CON    $6A
 RXB0D5          CON    $6B
 RXB0D6          CON    $6C
 RXB0D7          CON    $6D
                         
'' Rx Buffer 1 ''
 RXB1CTRL        CON    $70
 RXB1SIDH        CON    $71
 RXB1SIDL        CON    $72
 RXB1EID8        CON    $73
 RXB1EID0        CON    $74
 RXB1DLC         CON    $75
 RXB1D0          CON    $76
 RXB1D1          CON    $77
 RXB1D2          CON    $78
 RXB1D3          CON    $79
 RXB1D4          CON    $7A
 RXB1D5          CON    $7B
 RXB1D6          CON    $7C
 RXB1D7          CON    $7D


'===============================================================================
'                  Register Bit Masks                             
'===============================================================================

 DLC_0          CON   $00
 DLC_1          CON   $01
 DLC_2          CON   $02
 DLC_3          CON   $03
 DLC_4          CON   $04
 DLC_5          CON   $05
 DLC_6          CON   $06
 DLC_7          CON   $07    
 DLC_8          CON   $08



'===============================================================================
' '                  CAN SPI commands                               
'===============================================================================
'
' CAN_RESET         $C0
' CAN_READ          $03
MCPWRT              CON       $02
' CAN_RTS           $80
' CAN_RTS_TXB0      $81
' CAN_RTS_TXB1      $82
' CAN_RTS_TXB2      $84
' CAN_RD_STATUS     $A0
' CAN_BIT_MODIFY    $05  
' CAN_RX_STATUS     $B0
' CAN_RD_RX_BUFF    $90
' CAN_LOAD_TX       $40  

'===============================================================================
'                         ALIAS & MODIFIERS
'==============================================================================
CS          VAR PORTB.4             ' CS LINE
SCLK        VAR PORTB.1             ' CLOCK LINE
SDI         VAR PORTB.0             ' DATA INPUT LINE
SDO         VAR PORTC.7             ' DATA OUTPUT LINE
SENDLED     VAR PORTA.5             ' LED TO INDICATE THE PROGRAM IS IN THE SENDING ROUTINE
MAINLED     VAR PORTE.2             ' LED TO INDICATE THE PROGRAM IS IN THE MAIN ROUTINE
INT         VAR PORTB.5             ' INTERRUPT OUTPUT FROM 18F4550
MCPRST      VAR PORTC.0             ' RESET LINE FOR MCP2515
SW_LOAD     VAR PORTA.4             ' BUTTON CONNECTED TO 18F4550 TO START SENDING DATA (WHEN IMPLEMENTED)

'===============================================================================
'                       SOFTWARE VARIABLES
'===============================================================================

DATAOUT VAR BYTE           'FIRST BYTE OF DATA TO BE SENT
MCPREG VAR BYTE            'ADDRESS OF FIRST BYTE OF DATA TO BE SENT

'==============================================================================
'                   RESET MCP2515
'==============================================================================

LOW MCPRST                 ' COMMAND TO RESET THE MCP2515 (SOFTWARE)
PAUSE 1
HIGH MCPRST
PAUSE 20

'==============================================================================
'                   INITIALIZE MCP2515
'==============================================================================


LOW CS
SSPBUF = MCPWRT                 ' COMMAND TO WRITE TO THE MCP2515
PIR1.3 = 0              
WHILE PIR1.3=0 :WEND 

MCPREG = CANCTRL                ' PUT THE MCP2515 INTO CONFIGURATION MODE 
DATAOUT =  %10001010
GOSUB SENDCANDATA  

MCPREG =   CNF3                 'CNF3 - CONFIGURATION REGISTER 3 
DATAOUT =  $07
GOSUB SENDCANDATA

MCPREG =   CNF2                 'CNF2 - CONFIGURATION REGISTER 2 
DATAOUT =  $BA
GOSUB SENDCANDATA

MCPREG =   CNF1                 'CNF1 - CONFIGURATION REGISTER 1 
DATAOUT =  $03
GOSUB SENDCANDATA
    
MCPREG =   TXB0SIDL             'TRANSMIT BUFFER 0 FOR SIDL
DATAOUT =  %10000000    
GOSUB SENDCANDATA 

MCPREG =   TXB0SIDH             'TRANSMIT BUFFER 0 FOR SIDH
DATAOUT =  %00000001
GOSUB SENDCANDATA
    
MCPREG =   CANCTRL              'PUT THE MCP2515 BACK INTO NORMAL MODE
DATAOUT =  %00001010
GOSUB SENDCANDATA
HIGH CS



'==============================================================================
'                   MAIN PROGRAM FOR MCP2515
'==============================================================================

PROGRAMSTART:
HIGH SENDLED 
PAUSE 50

 LOW CS

SSPBUF = $02                ' COMMAND TO WRITE TO THE MCP2515
PIR1.3 = 0              
WHILE PIR1.3=0 :WEND

MCPREG =   CANINTE         ' DISABLE ALL INTERRUPTS
DATAOUT =  %00000000
GOSUB SENDCANDATA
                            
MCPREG =   TXB0CTRL         ' FLAG THE TRANSMIT BUFFER - - 11=HIGH, 10=MEDIUM, 01=LOW, 00=LOWEST 
DATAOUT =  %00001011
GOSUB SENDCANDATA

MCPREG =   TXB0SIDL         ' TRANSMIT BUFFER 0 FOR SIDH 
DATAOUT =  %00110010    
GOSUB SENDCANDATA 

MCPREG =   TXB0SIDH        ' TRANSMIT BUFFER 0 FOR SIDH  
DATAOUT =  %00110001
GOSUB SENDCANDATA
 
MCPREG =   TXB0DLC         ' NUMBER OF BYTES TO BE TRANSMITTED IN CAN FRAME  
DATAOUT =  %00000010
GOSUB SENDCANDATA

MCPREG =   TXB0D0          ' DATA PACKET FOR BYTE 1 
DATAOUT =  %00000001
GOSUB SENDCANDATA
    
MCPREG =   TXB0D1          'DATA PACKET FOR BYTE 2
DATAOUT =  %00000100
GOSUB SENDCANDATA


HIGH CS

LOW sendled
pause 50



goto PROGRAMSTART
'===============================================================================
'                           SEND CAN DATA SECTION
'===============================================================================
SENDCANDATA:

SSPBUF = MCPREG          ' ADDRESS TO LOAD THE DATA TO THE MCP2515
PIR1.3 = 0              
WHILE PIR1.3=0 : WEND 
SSPBUF = DATAOUT          'DATA BEING LOADED TO THE MCP2515 ON MCPREG
PIR1.3 = 0              
WHILE PIR1.3=0 : WEND
    
 RETURN