曾经在反复研究 MEGA 48 的内部 RC 振荡器 和 能隙电压基准的稳定性后,选择了 MEGA 48, 用内部 RC 来驱动 做串口通信.一直都比较成功!
突然前些天, 发现上次能正常通信的软件, 通信不了了!
反复检查后, 很仔细才发现 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% 频率偏差
关键字:AVR单片机 内部RC振荡器 能隙电压基准
引用地址:
AVR单片机内部RC振荡器和能隙电压基准的稳定性研究
推荐阅读最新更新时间:2024-03-16 15:49
单片机成长之路(avr基础篇)- 003 AVR单片机的BOOT区
BOOT区的由来基于一个简单的道理,即单片机的程序是保存在FLASH中的,要运行程序就必须不停的访问FLASH存储器。对于一般的FLASH存储器,数据的写入需要一定的时间来完成,在数据写入完成之前,存储器中所有的数据都是不可读的,这就在运行旧程序和写入新程序之间造成了一个矛盾。 使用BOOT区是解决这个矛盾的方法之一,它将FLASH存储器从物理上分为两个独立的区域,对其中的一个区的数据写入不会影响到另一个区的数据读取操作。我们可以让单片机的程序在其中一个区(通常是BOOT区)运行,而运行着的程序代码写入另外一个区(通常为应用程序区)内。 AVR高档单片机ATmega系列中含有BOOT代码区,即程序引导区,也可称器件自身监控
[单片机]
AVR单片机SPI的应用(AT25256)
/************************************** 硬件:单片机mega162,EEPROM 25256,晶振3.6864MHZ 编译环境:ICC ****************************************/ #include iom162v.h #define BAUD 9600 //波特率4800 #define CRYSTAL 3686400 //晶振3M #define BAUD_set (unsigned int)( (unsigned long)CRYSTAL/ (16*(unsigned long)BAUD)-1 ) //波特率计算 #define BAUD
[单片机]
基于Atmega48单片机的电子镇流器设计
0 引言 电子镇流器是新型节能产品,不仅能带动一些照明灯具,还可以和一些紫外灯结合在一起,对于空气净化和水源净化都有着非常大的作用。当前,全世界都在大力提倡环境保护,电子镇流器间接地为环保提供了原动力。AVR单片机是一款性价比较高的单片机,用这种单片机来对电子镇流器进行调光和时间采样非常合适,首先是AVR单片机本身较稳定,抗干扰能力比较强,其次是其本身的Harvard结构使得运行速度比较快,数据回读时间较快,可以实现实时在线控制。 1 AVR单片机介绍 1.1 AVR单片机的特点 与以往的8位单片机相比,AVR单片机采用Harvard结构,也就是程序总线和数据总线分开,并采用两级流水线,具备1MIPS/MHz的高速运行处
[单片机]
AVR单片机微秒级和毫秒级延时函数
在用单片机IO口模拟总线时序时老是碰到问题,自己总结了一下大多数是因为我们的延时不准确造成的,所以自己调了两个延时函数,我板子上用的是AT Mega128的单片机和16MHz的晶振,用示波器看了这两个函数产生的波形还挺准确的,希望大家能用得上 ^_^ //16MHz晶振 时间范围:1-65535us void Delay_us(unsigned int us) { unsigned int i; i = us/2; i--; asm( nop ); asm( nop ); for(;i!=0;i--) { asm( nop );
[单片机]
基于AVR单片机的挖掘机器人控制系统设计
引言 挖掘机的出现使人类从繁重的体力劳动中解脱出来,然而传统的挖掘机操作复杂,对操作者的技能要求很高。人们一直谋求更省力、更高效率和更能实现精确轨迹的挖掘作业模式。随着微电子技术的进一步发展,集成电路的集成度和性能提高、价格下降,以微处理器为基础,实现挖掘机的机电一体化、机器人化、智能化进程,已经成为工程项目施工管理的一个重要研究课题与发展方向。本文以挖掘机器人为例,设计一种基于AVR单片机的挖掘机器人控制系统。 1 总体方案设计 挖掘机器人由挖掘机器人本体机械系统、红外传感器组成的传感器系统、直流电机驱动系统、以AVR单片机为核心的控制系统等四部分组成,其基本结构如图1所示。 图1 挖掘机器人的基本结构
[单片机]
AVR单片机uPD6121/AS6122等红外编码芯片的解码程序
#include #define uchar unsigned char #define ulong unsigned long /*------------------------------显示-----------------------------------*/ #define LED _DATA PORTB const uchar tab ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; /* 0 1 2 3 4 5 6 7 8 9 A B C
[单片机]
AVR单片机ATmega8工业总线项目的通信处理以及实现
这两天带博主的工程师给了一个小任务给我,使用7个小器件进行半双工的工业485总线通信,使用公司内部标准帧格式,采用主动上传方式每隔一定的定量时间进行数据上传。当然,实现一个器件的数据上传是十分简单的,但是使用大于两个器件进行485工业数据传输的时候就必须要考虑数据碰撞的问题了,因为由于485半双工的特性,同一时间数据只能上传或者下载,但是当多个数据进行数据通信的时候就要小心数据的交叉碰撞。 项目要求,在符合帧格式的前提下使用6台工作器件进行数据主动上传,因为前期设定每台设备的主动上传时间为2min,所以不可避免的遇到一个问题,就是如何进行数据的总线判“忙”检测,并且在其他的数据帧发送完毕后进行数据的发送? 经过博主的资料的查询和带
[单片机]
avr单片机的AD转换实验
AD转换实验。 1、AD转换实验。程序进行周期AD转换,在并转换值显示在数码管上。 2、使用内部1 M晶振。 3、进行此实验需要插上:JP1的所有8个短路块、JP9(A/D)。 4、此实验采用项目化管理,主要文件有ADC、DISP、主程序。 */ #include "iom16v.h" #include macros.h #include "iom16v.h" #include macros.h extern unsigned char get_ad(void);/*AD采样函数*/ extern void Disp_Init(void);/*显示初始化*/ extern unsigned char led_buf ;/*
[单片机]