我正在使用 PIC18F4680,并且在 HSPLL 模式下从 40 MHz 外部时钟源或 10 MHz 晶振运行它时遇到问题。在 HS 模式下使用 10 MHz 晶振似乎很好,在 HSPLL 模式下使用 5 MHz 晶振也可以正常工作。
发生的情况是 PIC 启动,工作了几秒钟,然后关闭了一段时间,然后重新启动。循环的总周期约为 5 秒,其中 PIC 工作在第二秒提前停止工作。
我还注意到,有时当我在面包板的电源总线上添加一个足够大的放电电容器时,PIC 会正常工作。有趣的一点是,只有当我在 PIC 已经运行时添加电容器时才会发生这种情况。如果我用那里的电容器为面包板供电,或者我放置一个尚未完全放电的电容器,问题仍然存在。
我在一些网站上读到,由于 PIC 在更高频率和更高最低工作电压下的功耗增加,可能会发生类似于我的问题。在这些情况下,如果电源上有一些短暂的电压降,它们更有可能在该频率上达到 PIC 的最低工作电压,因此最好在面包板上安装额外的电容器来解决该问题。由于在 40 MHz 满载下,整个电路使用大约 64 mA,我的第一个想法是放置一些 \$10 \mbox{ } \mu F \$ 钽电容器,希望它们足够大并且具有足够低的 ESR解决问题。一个没有帮助,第二个也没有帮助。所以我添加了一个 \$100 \mbox{ } \mu F\$ 铝电容器,但这也无济于事。然后我加了一个\$ 470 \mbox{ } \mu F\$ 铝电容没有效果。最后,我添加了一个 1 mF 铝电解电容器,然后电路第一次正常工作,直到关闭并打开电源。我还应该注意,出于测试目的,我使用了 5.5 V 的 Vcc,这是该微控制器的最高额定电压。这应该给我留出一些空间,直到 4.2 V,这是 40 MHz 的最低工作电压
接下来,我读到有时浮动输出会导致故障,所以我在所有未使用的引脚上放置了一些 \$10 \mbox{ }k \Omega\$ 下拉电阻,但这也无济于事。之后我读到如果振荡器输入浮动有时可能会出现问题,所以我尝试使用一些 \$10 \mbox{ }M \Omega\$ 电阻器将它们连接到 GND,但这并没有帮助。
由于从振荡器输出到 PIC 上的振荡器输入的导线长度,我预计会出现问题,但我没想到 10 MHz 晶体会出现问题,它非常靠近 PIC 上的振荡器引脚。同样对于晶体,我预计 HS 模式下也会出现问题,如果由于面包板导致的振荡器信号失真是问题,但在 HS 模式下,PIC 工作正常。
我通常为晶体使用 33 pF 电容器,但我也尝试使用 15 pF 并且我无法检测到任何变化。
我还应该注意,这个 PIC 具有故障安全时钟监视器和内部/外部振荡器切换。我已经尝试启用它们,希望它们至少能确认问题出在振荡器上,但它们对解决问题没有帮助。它们是打开还是关闭没有区别。
出于测试目的,我还禁用了看门狗定时器、掉电复位和堆栈上溢/下溢复位。我认为我关闭了该芯片的所有复位源。而且程序处于无限循环中,所以它没有结束。
PCF8583 没有任何问题,即使 PIC 自行复位,它也能继续正常工作,但另一方面,它的最低电压要低得多。
不幸的是,我没有示波器,但我用声音(96 kHz 采样率)卡做了一些测试,我注意到当 RTC 开启时,电源线上有一些 25 Hz 的噪音。我正在使用的程序报告了大约 300 mV 峰峰值,但我不知道有多少信任它,我不知道这是否足以导致 PIC 出现任何问题。当一切都关闭时,噪声峰峰值约为 100 mV,所以应该没问题。
如果有帮助,这是面包板本身的图片:(右键单击->查看完整尺寸的图像)
那么有人知道这里发生了什么吗?
最后,我可以只以 20 MHz 运行 PIC,但如果我需要更多处理能力,我希望能够以 40 MHz 运行它。
更新
我在面包板本身放置了另一个调节器,声卡拾取的噪音现在要低得多(峰峰值约为 50 mV),但它并没有影响主要问题。