0% found this document useful (0 votes)
87 views2 pages

CAN Article in Mikrobasic PRO For PIC

Uploaded by

Joseph Thomas
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
87 views2 pages

CAN Article in Mikrobasic PRO For PIC

Uploaded by

Joseph Thomas
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

ADVERTISEMENT

          

Now you need a ...

OK. CAN bus


Three EasyPIC5
development systems
connected on a CAN bus
by CAN-SPI modules

SmartGPS module connected to


EasyPIC5 Development System





       
      
            
           
      
        
            
       
        
     
 Software 
      
             
  
  
     
Hardware  
 
        
          
             
       
  

      
     

      
    

     


  

 Figure 1. Message filtering

Advertising article by MikroElektronika www.mikroe.com


mikroBASIC® and mikroBASICs PRO ® are registered trademarks of MikroElektronika. All rights reserved.
... making it simple SOFTWARE AND HARDWARE SOLUTIONS FOR EMBEDDED WORLD www.mikroe.com

Program to demonstrate the operation of a CAN bus


program CanSPI
‘ Description: This program demonstrates how to make a CAN network
using mikroElektronika
‘ CANSPI boards and mikroBasic compiler.
‘ Target device: Microchip PIC 16F887
‘ Oscillator: 8MHz crystal
#DEFINE NODE1 ‘ uncomment this line to build HEX for Node 1
‘#DEFINE NODE2 ‘ uncomment this line to build HEX for Node 2
‘#DEFINE NODE3} ‘ uncomment this line to build HEX for Node 3
dim Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags as byte ‘ can flags
Rx_Data_Len as byte ‘ received data length in bytes
RxTx_Data as byte[8] ‘ can rx/tx data buffer
Msg_Rcvd as byte ‘ reception flag
Tx_ID, Rx_ID as longint ‘ can rx and tx ID
ErrorCount as byte
‘ CANSPI module connections
dim CanSpi_CS as sbit at RC0_bit ‘ Chip select (CS) pin for
CANSPI board
CanSpi_CS_Direction as sbit at TRISC0_bit‘ Direction register for
CS pin
CanSpi_Rst as sbit at RC2_bit ‘ Reset pin for CANSPI board
CanSpi_Rst_Direction as sbit at TRISC2_bit ‘
Direction register for Reset pin
‘ End CANSPI module connections
main:
ANSEL = 0 ANSELH = 0 ‘ Configure analog pins as digital I/O
PORTB = 0 TRISB = 0 ‘ Initialize ports
PORTD = 0 TRISD = 0
ErrorCount = 0 ‘ Error flag
Can_Init_Flags = 0 Can_Send_Flags = 0 Can_Rcv_Flags = 0 ‘ clear
flags

Can_Send_Flags = _CANSPI_TX_PRIORITY_0 and ‘ form value to be used


_CANSPI_TX_XTD_FRAME and ‘ with CANSPIWrite
_CANSPI_TX_NO_RTR_FRAME
Schematic 1. Connecting the CAN-SPI module to a PIC16F887
Can_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE and ‘ form value to be used
_CANSPI_CONFIG_PHSEG2_PRG_ON and‘ with CANSPIInit
_CANSPI_CONFIG_XTD_MSG and
 _CANSPI_CONFIG_DBL_BUFFER_ON and
_CANSPI_CONFIG_VALID_XTD_MSG
 SPI1_Init() ‘ initialize SPI module
 CANSPIInitialize(1, 3, 3, 3, 1, Can_Init_Flags) ‘ Initialize external
CANSPI module
 CANSPISetOperationMode(_CANSPI_MODE_CONFIG, TRUE) ‘ set CONFIGURATION
mode
 CANSPISetMask(_CANSPI_MASK_B1, -1, _CANSPI_CONFIG_XTD_MSG)
mask1 bits to ones
‘ set all

CANSPISetMask(_CANSPI_MASK_B2, -1, _CANSPI_CONFIG_XTD_MSG) ‘ set all


mask2 bits to ones
#IFDEF NODE1
CANSPISetFilter(_CANSPI_FILTER_B2_F4, 0x12, _CANSPI_CONFIG_XTD_MSG) ‘
Node1 accepts messages with ID 0x12
CANSPISetFilter(_CANSPI_FILTER_B1_F1, 0x13, _CANSPI_CONFIG_XTD_MSG) ‘
Node1 accepts messages with ID 0x13
#ELSE
CANSPISetFilter(_CANSPI_FILTER_B2_F2, 0x10, _CANSPI_CONFIG_XTD_MSG) ‘
Node2 and Node3 accept messages with ID 0x10
CANSPISetFilter(_CANSPI_FILTER_B1_F2, 0x11, _CANSPI_CONFIG_XTD_MSG) ‘
Node2 and Node3 accept messages with ID 0x11
#ENDIF
CANSPISetOperationMode(_CANSPI_MODE_NORMAL,0xFF) ‘ set NORMAL mode
RxTx_Data[0] = 0x40 ‘ set initial data to be sent
#IFDEF NODE1
Tx_ID = 0x10 ‘ set transmit ID for CAN message
#ENDIF
#IFDEF NODE2
Figure 2. Communication example Tx_ID = 0x12
#ENDIF
‘ set transmit ID for CAN message

#IFDEF NODE3
Tx_ID = 0x13 ‘ set transmit ID for CAN message
 #ENDIF
#IFDEF NODE1
 CANSPIWrite(Tx_ID, RxTx_Data, 1, Can_Send_Flags)
initial message
‘ Node1 sends

 #ENDIF
while (TRUE) ‘ endless loop
 Msg_Rcvd = CANSPIRead(Rx_ID, RxTx_Data, Rx_Data_Len, Can_Rcv_Flags)
‘ attempt receive message
 if (Msg_Rcvd) then
#IFDEF NODE1
‘ if message is received then check id

if Rx_ID = 0x12 then ‘ check ID


PORTB = RxTx_Data[0] ‘ output data at PORTB
else
mikroBASIC PRO for PIC® library editor PORTD = RxTx_Data[0]
end if
‘ output data at PORTD

with ready to use libraries such as: delay_ms(50) ‘ wait for a while between messages
CAN_SPI, GLCD, Ethernet etc. Functions used in the program CANSPIWrite(Tx_ID, RxTx_Data, 1, Can_Send_Flags)
one byte of data
‘ send

inc(Tx_ID) ‘ switch to next message


if Tx_ID > 0x11 then Tx_ID = 0x10 end if ‘ check overflow
CANSPIGetOperationMode() Current operation mode #ENDIF
#IFDEF NODE2
if Rx_ID = 0x10 then begin ‘ check if this is our message
CANSPIInitialize()* Initialize the CANSPI module PORTB = RxTx_Data[0] ‘ display incoming data on PORTB
RxTx_Data[0] = RxTx_Data[0] shl 1 ‘ prepare data for
CANIRead()* Read message sending back
if RxTx_Data[0] = 0 then RxTx_Data[0] = 1 end if ‘
reinitialize if maximum reached
CANSPISetBaudRate() Set the CANSPI baud rate Delay_ms(10) ‘ wait for a while
CANSPIWrite(Tx_ID, RxTx_Data, 1, Can_Send_Flags) ‘ send
CANSPISetFilter()* Configure message filter one byte of data back
end if
#ENDIF
CANSPISetMask()* Advanced filtering configuration #IFDEF NODE3
if Rx_ID = 0x11 then ‘ check if this is our message
CANSPISet OperationMode()* Current operation mode PORTD = RxTx_Data[0] ‘ display incoming data on PORTD
RxTx_Data[0] = RxTx_Data[0] shr 1‘ prepare data for sending
back
CANSPIWrite()* Write message if RxTx_Data[0] = 0 then RxTx_Data[0] = 128 end if ‘
reinitialize if maximum reached
* CANSPI library functions used in the program Delay_ms(10) ‘ wait for a while
CANSPIWrite(Tx_ID, RxTx_Data, 1, Can_Send_Flags) ‘ send
one byte of data back
end if
#ENDIF
Other mikroBASIC PRO for PIC functions used in the program: else ‘ an error occured, wait for a while
#IFDEF NODE1
Delay_us() inc(ErrorCount) ‘ increment error indicator
Delay_ms(10) ‘ wait for 100ms
SPI1_init() if (ErrorCount > 10) then ‘ timeout expired - process errors
SPI1_read() ErrorCount = 0
inc(Tx_ID)
‘ reset error counter
‘ switch to another message
if Tx_ID > 0x11 then Tx_ID = 0x10 end if ‘ check overflow
CANSPIWrite(Tx_ID, RxTx_Data, 1, Can_Send_Flags) ‘ send
new message


GO TO
end if
#ENDIF
 end if
www.mikroe.com/en/article/ wend
end.

Microchip®, logo and combinations thereof, PIC® and others are registered trademarks or trademarks of Microchip Corporation or its
subsidiaries. Other terms and product names may be trademarks of others.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy