Re: 請問 CANBus 能用中斷嗎?
|
||||
---|---|---|---|---|
高級會員
|
參考之前討論的:http://www.microchip.com.tw/modules/n ... 57&forum=1#forumpost16070
在CAN BUSnetwork中,每個node設的bps都要一樣快,至於PH1、PH2、PRO、SJW,必須時需做適當的調整,否則會有BIT sample錯誤的問題!!
發表於: 2008/1/21 9:05
|
|||
|
Re: 請問 CANBus 能用中斷嗎?
|
||||
---|---|---|---|---|
版主
|
沒有算 CAN bps 的軟體工具,需自己按照公式算,也就是說如果連TQ的基本定義都不清楚,那又如何知道 SJW, PH1, PH2..等時間參數的定義呢? 要能正確算出bps一定要清楚為什麼要有這些時間參數及其意義為何?
發表於: 2008/1/18 13:45
|
|||
|
Re: 請問 CANBus 能用中斷嗎?
|
||||
---|---|---|---|---|
版主
|
CAN250xx 的 Programmer 程式裡所設定的 CAN bps 是正確的,只要先將 OSC 的頻率設好其餘的參照 Data Sheet 的要求去做調整後 Baud-Rate 就自動計算出來。
CANInitialize( ) 也是需要這些設定值,把這些參數利用 PIC18F458 Data Sheet 裡對 bps 的計算公式,先算出TQ後再送出整個 bit 的組成時間就可以了,總之要照書上的公式算才會對。
發表於: 2008/1/17 14:28
|
|||
|
Re: 請問 CANBus 能用中斷嗎?
|
||||
---|---|---|---|---|
高級會員
|
是的!
是我設錯了.... 現在可以正常的執行中斷程式了... 謝謝各位的幫忙! 另外想請問版主,關於 CAN 的 CANInitialize 中的 Baud Rate 設定,我有下載之前討論過的 mcp250xx110 及 port95nt 的檔案,也安裝完了,但不會用! 請問要怎麼的使用,去得知 CANInitialize 中的參數怎麼的設定才能得到自己想要的 Baud Rate 速率?
發表於: 2008/1/17 13:59
|
|||
|
Re: 請問 CANBus 能用中斷嗎?
|
||||
---|---|---|---|---|
版主
|
CAN Module 只有在 PIC18F458 以上或16-bit 的元件才存在。可使看你的語法似乎是在 PIC16F 打轉。PIC18F 有分高低優先權中斷必須使用 IPR3 暫存器設定中斷優先權 IPR3bits.RXB0IP = 1 設 CAB RXB0 為高優先全中斷。
而相對會使用到的中斷設定為: IPR3bits.RXB0IP = 1; //Set CAN RXB0 as High Priority Inteuuupt. INTCONbits.GIEH = 1; PIR3bits.RXB0IF = 0; //在開啟中斷前。務必先設為零 PIE3bits.RXB0IE = 1; // Enable CAN RXB0 Interrupt
發表於: 2008/1/14 11:01
|
|||
|
Re: 請問 CANBus 能用中斷嗎?
|
||||
---|---|---|---|---|
資深會員
|
我沒用過CAN...但是看了你的設定覺得怪怪的...
PIR3bits.RXB1IF = 1; PIR3bits.RXB0IF = 1; 這兩個Bit應該是Flag,在中斷發生時,硬體會自動設成1,進入中斷向量後,用來判斷的旗標,返回前將它清除,但被你設成1,應該會進不了中斷向量吧!!! 中斷的設定,我想應該先將要中斷的功能啟動例如 INTCONbits.PEIE = 1; PIE3bits.RXB1IE = 1; PIE3bits.RXB0IE = 1; 最後再啟動中斷 INTCONbits.GIE = 1; 這樣子比較好吧。 還有你設定的是Rx,應該是終端機傳送資料給你時,才會中斷。如果沒有Tx資料出去的話,終端機那邊應該是看不到顯示吧!
發表於: 2008/1/11 20:00
|
|||
|
請問 CANBus 能用中斷嗎?
|
||||
---|---|---|---|---|
高級會員
|
請問如果要在 CAN Node 接收到資料的時候產生中斷,去執行中斷程式的話,那要怎麼啟動 CAN Receive 的中斷?
我設定了以下: INTCONbits.GIE = 1; INTCONbits.PEIE = 1; PIR3bits.RXB1IF = 1; PIR3bits.RXB0IF = 1; PIE3bits.RXB1IE = 1; PIE3bits.RXB0IE = 1; 中斷程式中,藉由 RS-232 傳送 CAN Message 的 RX_ID 給超級終端機來顯示! 但一直都沒有看到.....
發表於: 2008/1/9 15:48
|
|||
|