2015-11-12 81 views
1

今天我開始了一個項目,試用PIC18F45K22來做一些事情。先前爲其他控制器編寫的代碼有一些時序問題。原來,控制器的時鐘頻率有問題。PIC18F45K22內部振盪器頻率問題

正如數據表告訴我的,當使用內部振盪器時,我應該有一個1MHz的默認時鐘頻率。根據我的示波器,我在OSC2(RA6)引腳上測量了250kHz的時鐘頻率。於是我開始在數據表中嗅探,並從數據表中找到表2-3。這個表格表示,當控制器處於休眠模式時,OSC2引腳將爲'時鐘/ 4',這可能是我的問題的來源,如1MHz/4 = 250kHz。根據第3.0章,除非啓用雙速啓動,否則控制器將在器件復位時以PRI_RUN模式啓動。所以,可以肯定我用下面的配置行禁用此模式:

#pragma config IESO = OFF 

這條線將禁止內部/外部振盪器切換位,這將禁止雙速啓動,按照權利2.12.1。

現在我嘗試了OSCCON,OSCCON2,OSCTUNE寄存器的所有失敗的多個設置。在這一點上,我想不出什麼是造成這個「問題」的原因。我希望有人會發現我的錯誤,以便我可以在指定的時鐘頻率上運行設備。

目前我設置這些配置位:

#pragma config WDTEN = OFF 
#pragma config FOSC = INTIO7 // Make clock visible on OSC2 pin 
#pragma config LVP = OFF 
#pragma config DEBUG = OFF 
#pragma config IESO = OFF // Disable Two-speed Start-up 

// Entry of application 
int main(int argc, char** argv) 
{ 
    OSCCONbits.IRCF = 0b011; // default frequency 
    // Tried different OSCCON; OSCCON2; OSCTUNE settings, without succes 
} 

數據手冊(1):http://ww1.microchip.com/downloads/en/DeviceDoc/41412F.pdf

+1

正如數據手冊2.6.1節所述,CLKOUT在與內部振盪器一起使用時將爲Fosc/4。如果你配置了一個1MHz的振盪器,那麼你應該期望在CLKOUT上看到250KHz,這代表了執行指令的速率(這些PIC上每個指令有4個時鐘週期)。一切都按預期工作。 –

+0

@RogerRowland,我完全錯過了這一關鍵信息!感謝您指出,時鐘確實是正確的。隨着我注意到,我轉換先前編寫的代碼,我嘗試在這個控制器上的另一個錯誤,解決了一切正在工作。 – WonderTiger

回答

1

羅傑·羅蘭回答我的問題:

由於它的第2.6.1節說: datasheet,與內部振盪器一起使用時,CLKOUT將爲Fosc/4。如果你配置了一個1MHz的振盪器,那麼你應該期望在CLKOUT上看到250KHz,這代表了執行指令的速率(這些PIC上每個指令有4個時鐘週期)。一切都按預期工作。