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
|
|||
|
Re: 暫存器設定波浪號問題
|
||||
---|---|---|---|---|
初級會員
|
目前有找到問題
在專案名稱右鍵→Properties→點XC16(Globlal options)→Override default device support→Compiler loacation 這樣波浪號就不會跳出來了。 如果是用XC8的就選XC8(Globlal options) 然而mggpyhs 說的問題我也是有遇到,有時候得把IDE重開才會正常 常常遇到一些莫名的問題用到有點心累
發表於: 2021/7/5 8:32
|
|||
|
暫存器設定波浪號問題
|
||||
---|---|---|---|---|
初級會員
|
想問一下在MPLAB X開啟一個新專案,在設定相關暫存器時出現紅色波浪號,提示是unable to resolve identifier
但是BUILD卻會成功,請問這個問題要從哪個部份去找呢?
發表於: 2021/6/30 16:06
|
|||
|
dsp33fj gpio的input可以設定pull high或者pull low嗎?
|
||||
---|---|---|---|---|
初級會員
|
目前想問一下是否可以在軟體那邊設定GPIO的腳為是否可以自行設定Pull High或者Pull Low,還是只能用硬體方式設計呢?
發表於: 2021/6/1 13:44
|
|||
|
Re: Dspic33FJ64MC508A 第一次上電 UART RX中斷收不到值
|
||||
---|---|---|---|---|
初級會員
|
更正,再次確認後發現,第一筆資料是有收到的,也是完整的。
第一次上電等待資料整筆收完,實際收到的資料是往右位移一個byte。 假設PC傳送10個byte給RX陣列接收,RX陣列0的位置應該為PC發送的第1個Byte,但是第一次上電RX陣列第0個Byte都是0,RX陣列第1個Byte才是PC發送的第一個Byte。 正常收到值應該是這樣 array[0] = 1; array[1] = 2; array[2] = 3; array[3] = 4; array[4] = 5; 第一次實際收到值為 array[0] = 0; array[1] = 1; array[2] = 2; array[3] = 3; array[4] = 4; array[5] = 5;
發表於: 2020/6/30 13:24
|
|||
|
Dspic33FJ64MC508A 第一次上電 UART RX中斷收不到值
|
||||
---|---|---|---|---|
初級會員
|
想請問一下,有人遇到過第一次上電的時候,UART RX中斷有收不到值的問題嗎?
目前用Debug去看,以一筆資料有10個Byte,這10個Byte在第一次RX中斷都不會進去,當我傳送第二次的時候才會正常,請問有人有遇過這個問題嗎? 還是我以下UART的設定有問題呢?
OpenUART1(UART_EN & UART_IDLE_CON & UART_EN_WAKE & UART_DIS_LOOPBACK & UART_DIS_ABAUD &
發表於: 2020/6/30 11:11
|
|||
|