This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于内部晶振和外部晶振



各位好,目前我遇到一个问题,关于内部晶振和外部晶振的,

一个程序,具体应用是这样的,可以按照设定的工作时间以及间隔时间对传感器的数据进行采样并进行储存,用户可以通过串口对单片机进行设置和数据获取。

使用外部晶振(8M)时工作正常,LPM2,但是功耗不是令人满意。随后改为使用内部DCO(8M),功耗令人满意,但随之问题来了,短时间工作时,像一两个小时,正常,工作时间长了,4个小时等就会出现数据错乱,测试过多次,包括更改低功耗模式,LPM1,LPM0,甚至不用低功耗都是如此。

我想请问一下,DCO能不能用于长时间工作,有没有其他方法能降低功耗

  • 功耗大约要做到多少,具体测操作模式是什么,利用DCO工作时间长后出现的具体错误是什么能否找到数据错乱是什么地方导致?

  • 你好,我需要的是功耗越小越好,起码要小于100uA ,因为具体使用时可能每10分钟采集一次数据,然后可能需要连续工作几个月甚至数年。我使用外部晶振时LPM2的待机电流约为1.2mA, 使用DOC能达到50uA.

    使用DOC后,长时间工作后我跟踪到是一个变量出错,导致根据这个变量的一系列数据都出错,奇怪的是,使用外部晶振XT2却一点问题都没有

  • 对了,在使用DCO时,仿真器会有出错的信息

    Mon Jul 29 14:39:13 2013: The stack 'Stack' is filled to 100% (80 bytes used out of 80). The warning threshold is set to 90.%
    Mon Jul 29 14:39:13 2013: The stack pointer for stack 'Stack' (currently Memory:0x18D8) is outside the stack range (Memory:0x20B0 to Memory:0x2100)

    我的堆栈大小设置为80,实际上最多才用到16,所以为什么出这个错误,不明白

  • 堆栈溢出了,实际最多16是怎么衡量的?,堆栈中存储一些局部变量这个是和函数子体相关的,

  • 我是查看MAp文件里面的信息得知的,当然也是看网上的一些资料才得知的方法,呵呵。

    其实,我把这个堆栈设置到160,依然如故,另外,为什么使用XT2就是好好的?郁闷中

  • 为什么在使用DCO时会出现堆栈出错,而使用XT2就不会出错,难道使用DCO和XT2会在中断和LPM时有不同的出入栈数据或操作?