Re: 關於使用 internal oscillator
|
||||
---|---|---|---|---|
版主
|
Microchip 的 何仁杰 已經告訴你原音了。
http://www.microchip.com.tw/modules/n ... t_id=17354#forumpost17354 要這麼快的速度考慮使用 In-Line Assembly,並使用Hi-Priority Interrupt 所提共的 Shadow Register 的快速儲存功能,並用 RETFIE 1 的方式返回。
發表於: 2007/12/24 10:55
|
|||
|
Re: 關於使用 internal oscillator
|
||||
---|---|---|---|---|
初級會員
|
各位
我把我的 interrupt 改成用 TIMER2 設定 我現在感覺就是 我想要在每一個 interrupt 發生的時候, 某幾隻腳會HIGH LOW HIGH LOW 另外,我用 EVM:APP001 Rev.2 這個版子,理論上上面有個 16MHz 的石英震盪器,所以我想要讓他在每次 interrupt (1 clock) 就改變,可是我現在量出來的都大概是 9uS。 放上有我的 code //********************************************************** //* Ex9_1_TMR1_INT.c //* 設計一個0.5秒讓 PORTD 的 LED 所顯示的二進位數字自動加一的程式 //********************************************************** #include <p18f4480.h> //納入微控制器定義檔 #include <timers.h> //納入計時器函式庫定義檔 // 結構位元定義 #pragma config BOREN=OFF, BORV = 2, PWRT=ON, WDT=OFF, LVP=OFF #pragma config OSC = HS #define TMR2_VAL 256-10//65536-16384 // Timer1 設定為 500ms 中斷一次 //宣告函式原型 void Init_TMR2(void); void timer2_isr (void); //宣告並安排中斷執行程式記憶體位置 #pragma code low_vector=0x18 void low_interrupt (void) { _asm GOTO timer2_isr _endasm } #pragma code #pragma interruptlow timer2_isr int i; void timer2_isr (void) { PIR1bits.TMR2IF = 0; // 清除中斷旗標 WriteTimer2(TMR2_VAL); // 當將計數器觸發次數歸零寫入預設值0 PORTD=PORTD^0xff; PORTC=PORTC^0xff; } void main (void) { PORTD = 0x00; TRISD = 0; PORTC = 0x00; TRISC = 0; i = 0; Init_TMR2(); // 初始化設定Timer1函式 INTCONbits.PEIE = 1; // 開啟周邊中斷功能 INTCONbits.GIE = 1; // 開啟全域中斷控制 while (1); // 無窮迴圈 } void Init_TMR2 (void){ OpenTimer2(T2_POST_1_1 & T2_PS_1_1); PR2=0xff; PIE1bits.TMR2IE=1; WriteTimer2(TMR2_VAL); // 寫入預設值 PIR1bits.TMR2IF = 0; // 清除中斷旗標 } 附上也有我的版子 不知道是不是要調什麼 jumper? 麻煩各位幫幫忙 謝謝 附件: http://img205.imageshack.us/img205/8773/img0284dm7.jpg
發表於: 2007/12/21 18:55
|
|||
|
Re: 關於使用 internal oscillator
|
||||
---|---|---|---|---|
初級會員
|
參照:
請問,你說的那個值,我不太了解是哪一個值。指令週期的時間是用哪一個 Register 設定的? 參照:
請問,關於這個,如何在把 Clock 往上提? 我會再另外用 Timer2 試試看 謝謝
發表於: 2007/12/19 17:26
|
|||
|
Re: 關於使用 internal oscillator
|
||||
---|---|---|---|---|
版主
|
還是建議使用Timer2來計時會比用 Timer1 好。
Timer2 的預除器設為 1:1,0.5uS Tcy (8MHz OSC) 就設 PR2 = 10 就可以得到 5uS 的中斷時間。 看起來要每 5uS 中斷一次,OSC 再拉高點會比較好。建議使用40MHz。
發表於: 2007/12/19 12:00
|
|||
|
Re: 關於使用 internal oscillator
|
||||
---|---|---|---|---|
資深會員
|
參照:
那 你的TIMER 有設定好嗎 ?? 妳要設定時間 讓他固定時間中斷 可是你的程式裡面 那值是0 @@" TIMER 架構在指令週期上 先確定指令週期的時間 然後再去更改TMR1L,TMR1H這兩個值 (TIMER1) 然後 多試幾次 就會得到你想要的 ^^
發表於: 2007/12/18 17:23
|
|||
|
Re: 關於使用 internal oscillator
|
||||
---|---|---|---|---|
初級會員
|
恩,我了解
我之前看就知道沒有辦法做到 20 mS 所以我想要用 interrupt 達到每 5uS 可以讓其中一個 IO 轉變 可是我目前只做得到 17uS 就是說,我想要做個PWM,duty cycle 是5uS 週期是 10uS 不知道是不是我設定哪裡錯 謝謝 這樣清楚我想要的嗎?
發表於: 2007/12/18 15:44
|
|||
|
Re: 關於使用 internal oscillator
|
||||
---|---|---|---|---|
資深會員
|
參照:
回答你第二個問題 PWM的Module 請看Datasheet 18F4455 page146- 基本上 你用18F系列 是達不到20mS的 那值要放一萬, 8BIT才255 所以是做不到 ~~~ 其實我不清楚你是要怎樣應用 不過硬體是達不到這個RANGE
發表於: 2007/12/18 15:15
|
|||
|
Re: 關於使用 internal oscillator
|
||||
---|---|---|---|---|
初級會員
|
我現在做到的是
他只能到達 17uS 我不了解是不是哪裡沒有設定好 我想 8Mhz 應該可以做到 0.5uS 沒有錯,只是,我就是無法做到 能不能麻煩各位一下 我對 PIC 是新手,不懂還要去作其他設定 再次謝謝 還有,我需要的 PWM 週期是 20 mS PWM Module 做得到嗎?
發表於: 2007/12/18 14:45
|
|||
|
Re: 關於使用 internal oscillator
|
||||
---|---|---|---|---|
資深會員
|
參照:
8MHz 的OSC指令週期應該是0.5us, 不會是5uS 4MHZ FOSC 才是0.25uS 一個指令週期包含四個震盪時間(FOSC) ~ (An “Instruction Cycle” consists of four Q cycles: Q1through Q4.) -DATASHEET PIC18 F4455 page 61. 所以 你使用8M OSC 應該是得到0.5uS 不會是5uS
發表於: 2007/12/18 12:48
|
|||
|