• slider image 514
  • slider image 516
  • slider image 517
  • slider image 518
  • slider image 519
:::


Browsing this Thread:   1 Anonymous Users






Re: 請教有關I2C 與TIMER的問題
#4
版主
版主


查看用戶資訊
剛在測試了一下 Setting 的選項,平常在用 PIC18 & PIC24 時 Freeze 的選項都可以被設定的。剛才驚覺原來 PIC16F 並無法啟用 Peripheral Freeze 的功能。抱歉。

有關 Timer 中斷的時間基本上都是用算的,實際驗證時會用 MPLAB SIM + Stopwatch 的功能來檢查Timer 的中斷計時,或使用示波器實際量測一下在中斷裡 Toggle I/O 的時間。

發表於: 2010/1/20 10:47
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教有關I2C 與TIMER的問題
#3
新會員
新會員


查看用戶資訊
參照:

Ryang 寫道:

因為在更新 watch window 時,ICD 需要利用Target MCU 來執行監督程式,所以也就會有些狀況會繼續動作這時就會與預期得結果不一樣,尤其是在做 Step 的動作時。因為你在做單部執行時表面上程式只執行一步,實際上PIC 內部也許已經跑過數百的指令了所以你的Timer 值就不是你所預期的了。
這也就是使用 ICD 需要注意的地方。


感謝版主的提示. 我想這應該是主要原因吧. 所以之前我在正常RUN底下執行. TIMER值不會亂掉造成邏輯錯誤.

Debugger --> Setting 下的 Freeze選項是暗色的. 所以無法勾選 " All Peripherals"

這是否代表MPLAB會自動檢查我有無其他設備?

發表於: 2010/1/20 10:21
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 請教有關I2C 與TIMER的問題
#2
版主
版主


查看用戶資訊
參照:
目前在開發板上DEBUG模擬時. 常常會用到2.3個TIMER
雖然"感覺上"各TIMER運作正常. 但是在WATCH欄位總是覺得怪怪的.
TIMER1.2應該是暫存器溢位時中斷. 但是使用中斷點觀看暫存器欄位總是亂數.
單步執行指令時TIMER暫存器增加數值也是亂跳.
TMR1.2IF永遠都是1.


第一先檢查一下,Debugger --> Setting 下檢查一下 Freeze 的選項是否有勾選 " All Peripherals"

第二,因為在更新 watch window 時,ICD 需要利用Target MCU 來執行監督程式,所以也就會有些狀況會繼續動作這時就會與預期得結果不一樣,尤其是在做 Step 的動作時。因為你在做單部執行時表面上程式只執行一步,實際上PIC 內部也許已經跑過數百的指令了所以你的Timer 值就不是你所預期的了。
這也就是使用 ICD 需要注意的地方。

發表於: 2010/1/20 10:01
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


請教有關I2C 與TIMER的問題
#1
新會員
新會員


查看用戶資訊
請教各位先進.

我使用的編譯器是Hi-Tehc Pro9.65. 晶片是16F887

目前在開發板上DEBUG模擬時. 常常會用到2.3個TIMER
雖然"感覺上"各TIMER運作正常. 但是在WATCH欄位總是覺得怪怪的.
TIMER1.2應該是暫存器溢位時中斷. 但是使用中斷點觀看暫存器欄位總是亂數.
單步執行指令時TIMER暫存器增加數值也是亂跳.
TMR1.2IF永遠都是1.

所以想請問TIMER即使不是外接震盪器而是內部時脈. 但是他依舊持續記數. 不管DEBUG時中斷點停下與否?


第二個問題是:
目前改實驗硬體支援的I2C. 照DATA SHEET FIGURE 13-7說明:
接收到開始信號時 SSPSTAT的開始位元為1
檢查SSPSR預暫存器到第7位元時是否與SSPADD<7:1>相符
是的話就自動幫我丟出ACK. 進入中斷.

雖然有進入中斷. 但是MASTER卻都沒有收到過ACK訊號. 由於我讓MSATER丟出0X01的訊息. 所以令SSPADD為0.

void init_ssp(){
GIE = 1;
PEIE = 1;
SSPIE = 1;

//SSPMSK = 0X00;
SSPADD = 0X00;
SSPM3 = 1;
SSPM2 = 1;
SSPM1 = 1;
SSPM0 = 0;
SSPEN = 1;
CKP = 1;
}



static void interrupt isr(void)
{
if (SSPIF == 1){
RD0 = !RD0;
//while(!BF);
RD1 = !RD1;
AA = SSPBUF;
SSPIF=0;
}
}

能請問哪裡我的觀念錯誤嗎? 謝謝

發表於: 2010/1/19 15:34
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... ]

教育訓練中心

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