突然前些天, 发现上次能正常通信的软件, 通信不了了!
反复检查后, 很仔细才发现 mega48 的振荡频率在示波器上,略有些偏大了!
为此,我对 OSCCAL 直接加大 3 后, 通信完全正常!
于是,就该芯片我对 振荡的温度漂移做了简单的试验.希望能给大家一些参考.由于条件简陋, 我唯一改变温度的办法是 热风枪.
为了便于对比,我使用了外部的稳定的频率作参考,然后应用自己编写的自动校准软件对 片内 RC 振荡器频率进行测量
该芯片的 出厂校正参数为 A3
等到自动校准后的参数如下:
校准寄存器 OSCCAL 范围 98(高温) ~ A7
得到 98 的这个值的时候, 估计芯片会近 100℃了(手头没有准确的点测温仪器)
同时, 记录了不进行校准时,内部的计时值(用作校正的参数)
参数 23-3F C1-D0(高温) 平均值 31 ~ C8
这是对我的标准信号的实际的计时值 2024 ~ 2175
最后算出的 MEGA 48 的振荡频率为 7.7585MHz ~ 8.3373MHz(高温)
顺便,我也对内部基准电压做了一下测量
正常值 Vref = 1.062V
A7 A3 A2 A0 9F 9D 9C 99 98
62 62 61 60 59 58 57 52 51 50
上面一行为 OSCCAL 校准参数
下面一行为 Vref 的尾数后2位部分
结论: Vref 还是有比较高的精度, 而相对地, 片内 RC 振荡的精度却并不很高.
当然, 我只是对真好遇到的一个表现突出者进行了测试, 只代表真实的个别而已.
不过,也让我们看到, 单相信 RC 振荡能做串口通信的工程师们个警告:并非所有的芯片在全温度范围内能满足通信精度的要求!
]忘了说明,本次试验使用的芯片规格和批次: ATMEGA48V-10PI 0510A
频率是相对值,数码直接读数. 电压的测试是用了一个4位数显的万用表.
又随便抽了2个芯片做比对,简单地做 LED 闪烁, 对批次为 0520A 0522A 的两个芯片的闪烁次数对比 45:44 ,即 2.2% 频率偏差