2015-11-12 72 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个时钟周期)。一切都按预期工作。