Re: Dspic33FJ64MC508A Timer1設定問題
|
||||
---|---|---|---|---|
版主
|
時勢所趨,較舊的元件沒有 MCC的支援,建議換一個較新的 dsPIC33CK256MP506 系列來玩玩。有 APP041 的實驗板可以配合 CAE 空中教室的 PIC1101 的教學課程。
http://www.microchip.com.tw/modules/t ... p?ncsn=2&nsn=41#PageTab11 PIC1001課程, 為基於學習 MCC(MPLAB Code Configurator)程式庫產生器 而開發, 課程中採用 APP041 實驗板, 並引入 PIM模組子板 概念,使用者可以透過購買不同的PIM模組子板, 來更換所需的MCU 8/16/32-bit 微控制器. APP041實驗板出廠已配置了 PIC24FJ128GB106 16-bit MCU, 而本課程會再搭配 dsPIC33CK256MP506 (APP041-3 PIM模組子板) 來上課, 為學習如何使用 MCC程式庫產生器, 提供了一個基礎且紮實的入門課程.
發表於: 2021/7/9 14:36
|
|||
|
Re: Dspic33FJ64MC508A Timer1設定問題
|
||||
---|---|---|---|---|
初級會員
|
這邊大致上了解。
不過版主提到的用MCC去做設定,但是我剛剛看MCC支援列表,好像沒有支援dsPIC33FJ64MC508A這顆MCU
發表於: 2021/7/9 11:30
|
|||
|
Re: Dspic33FJ64MC508A Timer1設定問題
|
||||
---|---|---|---|---|
初級會員
|
這邊已經找到問題,CLKDIVbits.PLLPRE設錯,之前設定備註是除4,應該將這個設為CLKDIVbits.PLLPRE = 0b00010才對
發表於: 2021/7/6 9:58
|
|||
|
Re: Dspic33FJ64MC508A Timer1設定問題
|
||||
---|---|---|---|---|
初級會員
|
可以順便問一下,當震盪器設定好之後,有方法可以驗證自己的震盪器設定的結果嗎?
發表於: 2021/7/6 9:22
|
|||
|
Dspic33FJ64MC508A Timer1設定問題
|
||||
---|---|---|---|---|
初級會員
|
想請問一下目前是在外部接一顆20Mhz的震盪器,但是目前設定Timer1為10us觸發一次中斷,
進中斷讓I/O腳一直反向動作的時間為500ms,但是出來的時間為3.5秒,是否是我哪邊設定有問題呢? ----------------------OSC設定---------------------- 設定圖檔連結 https://imgur.com/saWEPft /* Disable Watch Dog Timer */ RCONbits.SWDTEN = 0; //-----OSCCON 震盪器控制暫存器-----// OSCCONbits.COSC = 0b011; //目前震盪器選擇 0b011 = XTPLL, HSPLL, ECPLL OSCCONbits.NOSC = 0b011; //新震盪器選擇 0b011 = XTPLL, HSPLL, ECPLL OSCCONbits.CLKLOCK = 1; //PLL鎖定選擇 //OSCCONbits.LOCK = 0; //PLL鎖定狀態 這個暫存器只能讀取 OSCCONbits.CF = 0; //震盪器故障檢測 OSCCONbits.LPOSCEN = 1; //輔助(LP)震盪器 ON/OFF OSCCONbits.OSWEN = 0; //震盪器切換 ON/OFF //-----CLKDIV 震盪器除頻設定暫存器-----// CLKDIVbits.ROI = 0; //中斷恢復 CLKDIVbits.DOZE = 0b010; //MCU除頻選擇 CLKDIVbits.DOZEN = 0; //DOZE模式 ON/OFF CLKDIVbits.FRCDIV = 0b000; //內部快速RC震盪器除頻比 CLKDIVbits.PLLPOST = 0b00; //PLL VCO 輸出除頻比 輸出/2 //-----輸入震盪器 經過以下除頻器需在0.8Mhz~8Mhz之間----- //當外部震盪器為20Mhz,可由此除頻設為4,將震盪頻率降為5Mhz,可符合設定規範 CLKDIVbits.PLLPRE = 0b01100; //PLL輸入分頻比 輸入/4 //-----PLLFBD PLL 倍頻比暫存器-----// PLLFBDbits.PLLDIV = 30; //PLL倍頻比 32倍 //-----判斷目前是否設定為帶PLL的主震盪器(XT HS EC)這三種-----// while(OSCCONbits.COSC != 0b011); //-----判斷目前PLL是否處於失效情況或是被靜止-----// while(OSCCONbits.LOCK != 1); ----------------------Timer 1 設定---------------------- 設定圖檔連結 https://imgur.com/Wh7aEX2 T1CONbits.TON = 0; //Timer Disable 確認關閉Timer1再進行初始化 T1CONbits.TCS = 0; //Timer 時鐘選擇 1 = 引腳(T1CK)外部時鐘 0 = 內部時鐘(FOSC / 2) T1CONbits.TGATE = 0; //禁用門控定時器模式 T1CONbits.TCKPS = 0; //Timer 預除器 1:1 TMR1 = 0; //中斷暫存器歸零 PR1 = 400 - 1; //40,000,000 hz / 100,000 hz = 400 (10uS 觸發一次) IPC0bits.T1IP=7; //設定中斷優先等級 7 = 最高 IFS0bits.T1IF = 0; //將Timer 1 中斷旗標歸零 IEC0bits.T1IE=1; //中斷允許功能 開啟 // T1CONbits.TSIDL = 0; //空閒模式繼續工作 // T1CONbits.TSYNC = 0; //Timer 外部時鐘輸入同步選擇 TCS為0時忽略 T1CONbits.TON = 1; //Timer Enable 啟動Timer1 ----------------------Timer 1 中斷---------------------- void __attribute__((interrupt,auto_psv)) _T1Interrupt(void) { Toggle_cnt++; if(Toggle_cnt >= 50000) { BRAKE_O = !BRAKE_O; Toggle_cnt = 0; } }
發表於: 2021/7/5 15:04
|
|||
|