CANBUS 傳送資料的問題
|
||||
---|---|---|---|---|
初級會員
|
各位好
我這邊用的是 PIC18F4580 我CANBUS 可以成功的傳送資料 目前已經在同時傳送8個byte的資料了 想請問各位 因為PIC有三個 TX Buffer 兩個 RX Buffer 是不是可以利用不同Buffer 傳送比8byte還要長的資料? 如果不行,是否有其他方法? 麻煩各位幫我解答一下 謝謝
發表於: 2008/8/7 17:57
|
|||
|
Re: 關於 PIC18F4480 的 CAN BUS 功能文提
|
||||
---|---|---|---|---|
初級會員
|
拜託各位
對我來說很重要 麻煩各位幫忙一下 謝謝
發表於: 2008/4/30 10:49
|
|||
|
關於 PIC18F4480 的 CAN BUS 功能文提
|
||||
---|---|---|---|---|
初級會員
|
大家好
我用的是 PIC18F4480 請問一下 我如果想要傳送小數點 例如: 0.946521 請問CAN BUS是否支援這樣個功能? 有辦法做到嗎? 還是一定要整數? 因為我自己在試的時候,我看他的 TX_Buffer 都是 0 這是因為他本身只能傳送整數嗎? 謝謝
發表於: 2008/4/29 16:57
|
|||
|
CAN 的 Normal mode 無法傳送資料?
|
||||
---|---|---|---|---|
初級會員
|
各位
想要請教一些問題 我目前用 CAN-BUS 是用這種方式去設定他 CANInitialize( 2,10,6,6,3, 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, RXB0_MASK, CAN_CONFIG_STD_MSG ) ; // Set Mask For Standard Data Frame CANSetMask(CAN_MASK_B2, RXB1_MASK, CAN_CONFIG_STD_MSG ) ; CANSetFilter(CAN_FILTER_B1_F1, RX_Filter0 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B1_F2, RX_Filter1 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B2_F1,RX_Filter2 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B2_F2,RX_Filter3 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B2_F3,RX_Filter4 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B2_F4, RX_Filter5 , CAN_CONFIG_STD_MSG) ; CANSetOperationMode(CAN_OP_MODE_NORMAL) ; TX_Data_Buf1[0] = 0x58 ; TX_Data_Buf1[1] = 0x42 ; TX_Data_Buf1[2] = 0x43 ; TX_Data_Buf1[3] = 0x44 ; TX_Data_Buf1[4] = 0x45 ; TX_Data_Buf1[5] = 0x06 ; TX_Data_Buf1[6] = 0x07 ; TX_Data_Buf1[7] = 0x08 ; while (1) { NullCounter ++ ; if ( NullCounter > 5000 ) { NullCounter = 0 ; TX_Data_Buf1[3] = 0x71; //ADRESH ; TX_Data_Buf1[4] = 0x66; // ADRESL ; if (CANIsTxReady( ) ) { CANSendMessage( MESSAGE_ID1,TX_Data_Buf1,8,CAN_TX_PRIORITY_0 & CAN_TX_STD_FRAME & CAN_TX_NO_RTR_FRAME ) ; PORTDbits.RD4 ^= 0xFF; } } if ( CANIsRxReady() ) { CANReceiveMessage(&RX_ID1,RX_Data_Buf1,&RX_Data_Len1,&RX1_Message_Flag ) ; CANData[0] = RX_Data_Buf1[0] ; // Low Byte CANData[1] = RX_Data_Buf1[3] ; // High Byte PORTDbits.RD7 = 1; PORTD = CANData[0]; ttt=PORTD; PutD(ttt); } } 在以上的程式裡面 我設定的 filter 如下 #define MESSAGE_ID1 0x002 #define RX_Filter0 0x002 #define RX_Filter1 0x001 #define RX_Filter2 0x00 #define RX_Filter3 0x00 #define RX_Filter4 0x00 #define RX_Filter5 0x00 #define RXB0_MASK 0x7ff // 0b111 1111 1100 #define RXB1_MASK 0x7ff 如果我設定他的 operation mode 是 loopback mode 我可以成功的收回我自己丟出去的資料 目前我遇到的問題是 如果我改成 normal mode 我在 CanSendMessage 的地方設定一個 breakpoint 這樣我發現,他只會進入三次 第三次以後就不會在進入 CanSendMessage 這地方 不知道問題出在哪裡? 另外,我接另一個 PIC,裡面的程式是和以上的完全一樣 可是我卻都沒有收到任何資料 不知道各為能不能幫我解決這個問題? 我不曉得我問題出來哪裡 是不是要在另外處理什麼 buffer? 在送和接的部分? 麻煩各位了 謝謝
發表於: 2008/2/26 11:26
|
|||
|
Re: 關於 CAN BUS 的 ID 問題
|
||||
---|---|---|---|---|
初級會員
|
我想要請教一下一些問題
我在範例程式裡面看到一些 filter 以我所了解的,就是利用 filter 和 mask 去判斷是不是自己要的資料 #define MESSAGE_ID1 0x120 #define RX_Filter0 0x110 #define RX_Filter1 0x00 #define RX_Filter2 0x00 #define RX_Filter3 0x0 #define RX_Filter4 0x00 #define RX_Filter5 0x00 #define RXB0_MASK 0x7ff // 0b111 1111 1100 #define RXB1_MASK 0x7ff 我看這裡面有定義 filter 的參數,還有丟出去的 id (0x120) 我找不到這些 filter 代表什麼 他用什麼方式去 filter 這些資料? 另外 他在設 Mask 和 Filter CANSetMask(CAN_MASK_B1, RXB0_MASK, CAN_CONFIG_STD_MSG ) ; // Set Mask For Standard Data Frame CANSetMask(CAN_MASK_B2, RXB1_MASK, CAN_CONFIG_STD_MSG ) ; CANSetFilter(CAN_FILTER_B1_F1, RX_Filter0 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B1_F2, RX_Filter1 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B2_F1,RX_Filter2 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B2_F2,RX_Filter3 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B2_F3,RX_Filter4 , CAN_CONFIG_STD_MSG) ; CANSetFilter(CAN_FILTER_B2_F4, RX_Filter5 , CAN_CONFIG_STD_MSG) ; 這些 CAN_MASK_B1,CAN_MASK_B2, CAN_FILTER_B1_F1, 等等 在哪裡定義? 我在 h 檔案裡面找到這樣的東西 可是不知道他代表什麼 enum CAN_MASK { CAN_MASK_B1, CAN_MASK_B2 }; enum CAN_FILTER { CAN_FILTER_B1_F1, CAN_FILTER_B1_F2, CAN_FILTER_B2_F1, CAN_FILTER_B2_F2, CAN_FILTER_B2_F3, CAN_FILTER_B2_F4 }; 不知道能不能請教一下 定義這些 Rx_Filter 的方式是什麼? #define MESSAGE_ID1 0x120 #define RX_Filter0 0x110 這兩個有什麼關係,或是會做怎麼樣的過濾? 謝謝
發表於: 2008/2/22 11:58
|
|||
|
關於 CAN BUS 的 ID 問題
|
||||
---|---|---|---|---|
初級會員
|
我在網頁上看到一些範例程式 (我用的是 http://www.microchip.com.tw/modules/m ... nglefile.php?cid=6&lid=71 這個連結裡面的範例)
修改了一下配合我自己要的東西 我看到裡面有一些內建的 functions CANSendMessage CANReceiveMessage 裡面都有他的自己訂的指令 CANSendMessage( MESSAGE_ID1,TX_Data_Buf1,1,CAN_TX_PRIORITY_0 & CAN_TX_STD_FRAME & CAN_TX_NO_RTR_FRAME ) ; CANReceiveMessage(&RX_ID1,RX_Data_Buf1,&RX_Data_Len1,&RX1_Message_Flag ) ; 上面我是有看到這樣的定義 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 MESSAGE_ID1 0x200 #define RX_Filter0 0x200 #define RX_Filter1 0x000 #define RX_Filter2 0x00 #define RX_Filter3 0x00 #define RX_Filter4 0x00 #define RX_Filter5 0x00 #define RXB0_MASK 0x7ff // 0b111 1111 1100 #define RXB1_MASK 0x7ff 我想請問的是 我如何去設定現在我丟出去的 ID (就是要丟給誰) 我想這裡就是 MESSAGE_ID1 這一個,對不對? 這個 MESSAGE_ID1 是要寫我要傳給誰的 ID? 另外,我要怎麼設定自己這一個 PIC 的 ID 是什麼? 我以上都沒有看到 RX_ID1 的設定值。RX_ID1 應該就是我自己的 ID,只要我看到這樣的指令就代表我去讀接下來的資料。可是,哪裡有設定 RX_ID1? 還有,CANReceiveMessage(&RX_ID1,RX_Data_Buf1,&RX_Data_Len1,&RX1_Message_Flag ) ; ,在 RX_ID1 前面有一個 &,是什麼意思? 另外,MESSAGE_ID1 和 TX_ID1 是什麼差別? 簡單說,我想要知道如何設定我每一個的 ID 是什麼,好讓我可以傳出資料,也知道哪一個要去讀他 謝謝各位
發表於: 2008/1/24 18:12
|
|||
|
Re: 如何讓 Timer1 使用內部的石英震盪器
|
||||
---|---|---|---|---|
初級會員
|
謝謝
另外,近來 timer 的頻率 Fosc 一定是會經過 除四嗎? 有沒有辦法讓他直接是 Fosc (16Mhz) ? 謝謝
發表於: 2008/1/11 16:15
|
|||
|
Re: 如何讓 Timer1 使用內部的石英震盪器
|
||||
---|---|---|---|---|
初級會員
|
意思就是我直接這樣設定 T1CON 就可以讓 TIMER1 接 16mHz 的石英震盪器?
謝謝 參照:
發表於: 2008/1/11 11:08
|
|||
|
如何讓 Timer1 使用內部的石英震盪器
|
||||
---|---|---|---|---|
初級會員
|
請問一下
我這邊用的是 PIC18F4480 +EVM APP001 Rev.2 的版子 版子上面有一個 16kHz 的石英震盪器 可是我想要用的是版子上面接好的石英震盪器 (16 Mhz) 我想要知道如何不用 16kHz 而是用 16Mhz 的那個 是不是設定 OpenTimer1( TIMER_INT_ON & T1_16BIT_RW & T1_SOURCE_INT & T1_PS_1_1 & T1_OSC1EN_OFF ); 這樣就可以了嗎? 意思是把 T1CON 的 bit 1 和 bit 3 設成 0 就可以了嗎? 謝謝
發表於: 2008/1/10 16:27
|
|||
|