• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
  • slider image 488
  • slider image 491
:::


Browsing this Thread:   1 Anonymous Users






Re: CAN BUS PIC18F458
#3
新會員
新會員


查看用戶資訊
謝謝你!! 果然是這問題 Orz , 問題已經解決了

發表於: 2006/4/22 18:07
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: CAN BUS PIC18F458
#2
初級會員
初級會員


查看用戶資訊
連接線是否有跳線 ?
若無則CAN_H 與CAN_L 會短路 ,
會產生Error Frame

發表於: 2006/4/21 18:20
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


CAN BUS PIC18F458
#1
新會員
新會員


查看用戶資訊
大家好:
我這邊有一個奇怪的問題想請問大家
我是使用APP001的版子, 上面有PIC18F458,
我現在有兩塊APP001,
我曾上過CAN202的課程, 我使用的code是課程裡面的範例程式
ex3.cpp, code大致如下:

#include <p18f458.h>
#include "CAN18XX8.h"
#include "WAP_LCD.H"
#include <stdlib.h>


void Delay_100(void) ;

char Temp_ASCII[10] ;

union
{
unsigned char Bytes[2] ;
unsigned int Word ;
} AD_ALL ;

unsigned char Var1,Var2 ;

unsigned long TX_ID1 ;
BYTE TX_Data_Buf1[8] ;

unsigned long RX_ID1 ;
BYTE RX_Data_Buf1[8] ;
BYTE RX_Data_Len1 ;
enum CAN_RX_MSG_FLAGS RX1_Message_Flag ;

unsigned long RX_ID2 ;
BYTE RX_Data_Buf2[8] ;
BYTE RX_Data_Len2 ;
enum CAN_RX_MSG_FLAGS RX2_Message_Flag ;

#define OUTGOING_ID 0X210
#define INCOMING_ID 0X200

#define MESSAGE_ID1 0x110
#define RX_Filter0 0x120
#define RX_Filter1 0x00
#define RX_Filter2 0x00
#define RX_Filter3 0x00
#define RX_Filter4 0x00
#define RX_Filter5 0x00
#define RXB0_MASK 0x7ff
#define RXB1_MASK 0x7ff

void main( void )
{

PORTD = 0x00 ;
TRISD = 0x00 ;
TRISBbits.TRISB2 = 0 ; // CANTX
TRISBbits.TRISB3 = 1 ; // CANRX

CMCON = 0b00000111 ; // Disable Comparator Module
ADCON0 = 0b10000001 ; // Initial ADCON0 for A/D Module
ADCON1bits.ADFM = 1 ; // Right Justified !!


OpenLCD( ) ;

Delay_100( ) ;

putrsLCD("FL= IN= ") ;
LCD_Set_Cursor(0,1) ;
putrsLCD("ID= AD= ") ;

itoa ( MESSAGE_ID1 ,Temp_ASCII ) ;
LCD_Set_Cursor(3,1) ;
putsLCD(Temp_ASCII ) ;

itoa (RX_Filter0,Temp_ASCII ) ;
LCD_Set_Cursor(3,0) ;
putsLCD(Temp_ASCII ) ;


CANInitialize( 2,8,3,3,1, CAN_CONFIG_LINE_FILTER_OFF &
CAN_CONFIG_SAMPLE_ONCE &
CAN_CONFIG_VALID_STD_MSG &
CAN_CONFIG_PHSEG2_PRG_ON ) ;

CANSetOperationMode(CAN_OP_MODE_CONFIG) ;

CANSetMask(CAN_MASK_B1, 0x7ff, CAN_CONFIG_STD_MSG ) ; // Set Mask For Standard Data Frame
CANSetMask(CAN_MASK_B2, 0x7ff, CAN_CONFIG_STD_MSG ) ;

CANSetFilter(CAN_FILTER_B1_F1, RX_Filter0 , CAN_CONFIG_STD_MSG) ;
CANSetFilter(CAN_FILTER_B1_F2, 0x00000000 , CAN_CONFIG_STD_MSG) ;
CANSetFilter(CAN_FILTER_B2_F1, 0x00000000 , CAN_CONFIG_STD_MSG) ;
CANSetFilter(CAN_FILTER_B2_F2, 0x00000000 , CAN_CONFIG_STD_MSG) ;
CANSetFilter(CAN_FILTER_B2_F3, 0x00000000 , CAN_CONFIG_STD_MSG) ;
CANSetFilter(CAN_FILTER_B2_F4, 0x00000000 , CAN_CONFIG_STD_MSG) ;

CANSetOperationMode(CAN_OP_MODE_NORMAL) ;

TX_Data_Buf1[0] = 0x01 ;
TX_Data_Buf1[1] = 0x02 ;
TX_Data_Buf1[2] = 0x03 ;
TX_Data_Buf1[3] = 0x04 ;
TX_Data_Buf1[4] = 0x05 ;

while (1)
{
Delay_100() ;
// if ( CANIsTxReady( ) )
// {
CANSendMessage( MESSAGE_ID1 ,TX_Data_Buf1,5,CAN_TX_PRIORITY_0 &
CAN_TX_STD_FRAME &
CAN_TX_NO_RTR_FRAME ) ;
// }
ADCON0bits.GO = 1 ;

while ( ADCON0bits.GO) ;

TX_Data_Buf1[3] = ADRESH ;
TX_Data_Buf1[4] = ADRESL ;

LCD_Set_Cursor(12,1) ;
putrsLCD(" ") ;
LCD_Set_Cursor(12,1) ;

AD_ALL.Bytes[0] = ADRESL ;
AD_ALL.Bytes[1] = ADRESH ;

itoa ( AD_ALL.Word , Temp_ASCII ) ;

putsLCD( Temp_ASCII ) ;

if ( CANIsRxReady( ) )

{
CANReceiveMessage(&RX_ID1,RX_Data_Buf1,&RX_Data_Len1,&RX1_Message_Flag ) ;

AD_ALL.Bytes[1] = RX_Data_Buf1[3] ; // ADRESH
AD_ALL.Bytes[0] = RX_Data_Buf1[4] ; // ADRESL

LCD_Set_Cursor(12,0) ;
puthexLCD(RX_Data_Buf1[3]) ;
puthexLCD(RX_Data_Buf1[4]) ;

LATD = AD_ALL.Word >> 2 ;
}

}

}


void Delay_100(void)
{
int X1 ;

for (X1 = 0 ; X1 < 10000 ; X1 ++ ) ;

}

#pragma interrupt isr_high // save = PRODL,PRODH,FSR0L,FSR0H
#pragma interruptlow isr_low // save = WREG,STATUS,BSR,PRODL,PRODH,FSR0L,FSR0H

#pragma code isrhighcode = 0x0000008

void isr_high_direct(void)
{
//***EXERCISE 2 CODE HERE***

_asm //begin in-line assembly
goto isr_high //go to isr_high function
_endasm //end in-line assembly
}

#pragma code


#pragma code isrlowcode = 0x0000018

void isr_low_direct(void)
{
//***EXERCISE 2 CODE HERE***

_asm //begin in-line assembly
goto isr_low //go to isr_high function
_endasm //end in-line assembly
}
#pragma code

void isr_high(void)
{

}
void isr_low(void)
{

}


======================
我是使用program燒錄進去
我兩塊APP001都是使用這code, 差別只在於其中一塊
的MESSAGE_ID1 為0x110, RX_Filter0為0x120
另一塊MESSAGE_ID1為0x120
也就是我0x120是用來傳輸的, 0x110是來街收的,
但是結果是: 0x110收不到0x120傳來的訊息,

而如果我將mode由CAN_OP_MODE_NORMAL改為
CAN_OP_MODE_LOOP, 則能收到自己looback的訊息

請問是怎麼回事呢, 謝謝大家解答!

還是APP001上的Jump要設定什麼呢?

發表於: 2006/4/21 14:33
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------