搜索
bottom↓
回复: 88

以身试法:AVR内置RC在未校准的情况下不可以用于通信!!!

  [复制链接]

出0入4汤圆

发表于 2012-4-1 09:20:51 | 显示全部楼层 |阅读模式
以前看到有些网友说用AVR的内置RC振荡器不可以用于串行通信,考虑到AVR mega8的RC精度是3%,我试着用了一次。结果,我很受伤。
实验条件:AVR mega8 +内置RC@8MHZ+波特率@9600
实验结果:每发送一个字节后延时2ms,串口接收才正常,否则······

改为外部8M晶振,通信一切正常


注:经过大家的讨论,高手的指点。我们用AVR内置振荡器工作于非1MHZ情况下,由于内部校准字是1MHZ的,所以会有比较严重偏差。所以,不校准时用于通信,会有问题的。过两天等我把校准方法搞懂了更新此帖,省的误导新一代青年

补充内容 (2012-4-2 22:47):
我在40楼上传了ATmega32U4RC的RC校正手册。上边指出根据温度校正RC。
我个人认为:在没有片内温度传感器的情况下去校准RC,只要温度变化就会有温漂


--------------------------

后记(71楼)

经过这几天的讨论,我得出以下结论:
AVR的内置RC振荡器并非完全不可以用于串行通信,但是前提是要校准。
说到这个校准,单单去读取它的校准字去校准并非万无一失,毕竟我试验过后发现校准了精度还不够。
如果非要用内部RC,并切要求可靠性高,那就用示波器去测,去调整。
说了这么多,其实最简单的方法就是用外部晶振,花了2毛钱,解决很多问题。
我的新版板子今天收到了,焊了一套,发现用外部晶振屡试不爽,舒服得很!
凡是没有绝对,在此帖中我早到了许多前辈的鄙视,但我感觉最终的结论是对的。
修改了我主观推测的温度影响,呵呵
望高手赐教

出50入4汤圆

发表于 2012-4-1 09:31:10 | 显示全部楼层
还行吧,,用过很多,做485通信没什么问题

出0入0汤圆

发表于 2012-4-1 09:33:48 | 显示全部楼层
我用  ATMEGA48的内部8M RC  不做任何校准,出场默认值,波特率@9600,从未出错的路过

出0入0汤圆

发表于 2012-4-1 09:35:06 | 显示全部楼层
STM8S一直者是用内置的:)

出0入4汤圆

 楼主| 发表于 2012-4-1 09:35:29 | 显示全部楼层
我每次发送几百个数据,连续发就挂了,单个发没问题。
AVR官方说mega8的RC误差最大3%,估计我中奖了

出0入0汤圆

发表于 2012-4-1 09:38:18 | 显示全部楼层
没关系的,以前一直用。检查你的硬件吧。                                                                                         

出0入0汤圆

发表于 2012-4-1 09:39:42 | 显示全部楼层
这个还要看你接受方的232是否要求过高,系统是相互制约的。

出0入0汤圆

发表于 2012-4-1 09:42:41 | 显示全部楼层
串口的接收过程和红外解码有点像,不容易出错,一般发送几个到十几个字节应该问题不大,
你每次发送几百个数据有些长了,要求肯定要高些。

出0入4汤圆

 楼主| 发表于 2012-4-1 09:50:48 | 显示全部楼层
HYLG 发表于 2012-4-1 09:42
串口的接收过程和红外解码有点像,不容易出错,一般发送几个到十几个字节应该问题不大,
你每次发送几百个 ...

楼上有道理,跟我发的数据长有关系

出0入0汤圆

发表于 2012-4-1 09:58:38 | 显示全部楼层
影响SPI吗?

出0入4汤圆

 楼主| 发表于 2012-4-1 10:08:47 | 显示全部楼层
SPI的影响估计不大,毕竟SPI有条时钟线,晶振快了或慢了传输效率随之变化,这是我个人的理解

出0入0汤圆

发表于 2012-4-1 10:19:18 | 显示全部楼层
spi是clk同步的,应该没影响

出0入0汤圆

发表于 2012-4-1 10:30:58 | 显示全部楼层
还是用外部晶振的好

出0入24汤圆

发表于 2012-4-1 11:23:48 | 显示全部楼层
我之前买过一批Mega32,用内部晶振8MHz,大概有30%的芯片是超频的,之后再也不敢用其内部的晶振了

出0入4汤圆

 楼主| 发表于 2012-4-1 12:04:00 | 显示全部楼层
晕啊,美国佬不厚道了···

出0入0汤圆

发表于 2012-4-1 12:08:38 | 显示全部楼层
兄弟,你加载校准字了吗?

出0入4汤圆

 楼主| 发表于 2012-4-1 12:20:50 | 显示全部楼层
没加,校准字加载上不需要调节吗?
我看了校准,我的理解:可以调节,但我得自己测量准确度,所以我没想就放弃了校准。不知我理解是否有误

出0入4汤圆

 楼主| 发表于 2012-4-1 14:04:42 | 显示全部楼层
fsclub 发表于 2012-4-1 12:08
兄弟,你加载校准字了吗?

faclub大哥,讲讲关于校准的感受吧,谢谢了

出0入42汤圆

发表于 2012-4-1 14:13:57 | 显示全部楼层
9600波特率,每2毫秒发送一个字节,8bit 停止位1 无校验。
内部RC无矫正。

数据是从零开始每次+1。也就是0x00~0xFF

测试近一个小时,无错误。

补充内容 (2012-4-3 12:27):
用的是mega48PA。仔细查了下,它内部只有一个8MRC,且会自动载入时钟校准值。所以不能说没有校正RC……

出0入4汤圆

 楼主| 发表于 2012-4-1 14:15:38 | 显示全部楼层
jimmy_xt 发表于 2012-4-1 14:13
9600波特率,每2毫秒发送一个字节,8bit 停止位1 无校验。
内部RC无矫正。

是啊,我测的就是必须间隔2ms,如果没有间隔,数据就出错

出0入0汤圆

发表于 2012-4-1 15:15:42 | 显示全部楼层
跟发的数据长有关系,时间误差会积累,你每次发送几百个数据,理应当用外部晶振,或许可以分成若干段发送

出0入0汤圆

发表于 2012-4-1 15:29:47 | 显示全部楼层
这么经不起考验,atmega?

出0入0汤圆

发表于 2012-4-1 15:50:53 | 显示全部楼层
ZL_electric 发表于 2012-4-1 12:20
没加,校准字加载上不需要调节吗?
我看了校准,我的理解:可以调节,但我得自己测量准确度,所以我没想就 ...

你最基本的校准字都没加载,好意思说你家的通信误码吗?
没加载校准字通信不误码,那是运气。

人家ATMEL给你提供了一个免费的,使时钟相对准确些的方法你不用,你不怪你自己还怪别人?

DIY的做法是用编程器读出校准字,编译程序时手动加载。
而批量的做法是在程序上读取固定位置的EEP数值加载,对器件写入程序时编程器批量将校准字读出写入到固定位置EEP中供系统启动时加载。

出0入0汤圆

发表于 2012-4-1 15:53:42 | 显示全部楼层
本帖最后由 fsclub 于 2012-4-1 15:59 编辑

或者更直接一点,你用示波器或者频率计看看你的时钟频率到底是多少?差了多少?

还有,使用1M/4M/8M作UART的时钟理论上就是0.2%的误差,连续发500个字的数据就会错上一位,这理论上就是这样的。你怪谁啊?

出0入0汤圆

发表于 2012-4-1 15:57:17 来自手机 | 显示全部楼层
之前用内部,一直不行,后来用外部,很稳,再后来用会内部,还是很稳,也就是程序或者硬件问题吧……

出0入0汤圆

发表于 2012-4-1 16:01:03 | 显示全部楼层
1%精度的rc才合适

出0入42汤圆

发表于 2012-4-1 16:13:03 | 显示全部楼层
ZL_electric 发表于 2012-4-1 14:15
是啊,我测的就是必须间隔2ms,如果没有间隔,数据就出错

根据Mega8的数据手册
9600波特率时
发送时钟txclk=Clk/(52×16)约为9.6K



使用8bit+0校验位+2停止位时,总共需要发送1个起始位+8个数据位+2个停止位,共计11bit。

在9.6K的发送时钟下,1ms只能发送9bit。所以需要2ms的延时。

你把延时变为1.5ms应该也可以。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入4汤圆

 楼主| 发表于 2012-4-1 16:24:28 | 显示全部楼层
fsclub 发表于 2012-4-1 15:53
或者更直接一点,你用示波器或者频率计看看你的时钟频率到底是多少?差了多少?

还有,使用1M/4M/8M作UART ...

RC振荡器的误差按道理来说每个单片机都不会完全相同的,那么在这种情况下去加载一个固定的校正值,效果应该不好吧?
我到现在也不明白ATMEL公司出厂时是怎么个校正方法,
他总不会用一段测试程序,然后连接频率计吧?

出0入4汤圆

发表于 2012-4-1 16:34:04 | 显示全部楼层
UART有启始位同步功能,所以应该不存在接收累计误差这样的现像。即使作为发送方存在累计误差,接收方也可以通过同步调整过来。除非波特率误差达到了无法同步,那么即使是发送或接收几个字节,都有可能出错。

出0入42汤圆

发表于 2012-4-1 16:39:09 | 显示全部楼层
fsclub 发表于 2012-4-1 15:53
或者更直接一点,你用示波器或者频率计看看你的时钟频率到底是多少?差了多少?

还有,使用1M/4M/8M作UART ...

AVR内部的接收器使用的是16倍频读取(快速模式下是8倍)
而且每个起始位都会进行时钟恢复。
那0.2%几乎不会造成任何错误。

出0入0汤圆

发表于 2012-4-1 16:47:03 | 显示全部楼层
暂时还没遇到过。

出0入4汤圆

 楼主| 发表于 2012-4-1 16:50:52 | 显示全部楼层
jimmy_xt 发表于 2012-4-1 16:39
AVR内部的接收器使用的是16倍频读取(快速模式下是8倍)
而且每个起始位都会进行时钟恢复。
那0.2%几乎不 ...

有道理,我每次发将近五百字节,连续多次发,都没问题

出0入0汤圆

发表于 2012-4-1 22:34:52 | 显示全部楼层
请问1楼:以你看,若采用mega16的单片机采用内部8M,不进行校准,收发会怎样呢?

出0入0汤圆

发表于 2012-4-1 22:52:02 | 显示全部楼层
在向各位请教一个问题:我用AVR studio4.19进行串口模拟仿真时,发现先给UCSRC赋初值时,UBRRH的第一位和第二位跟随UCSRC的第一位和第二位,再对波特率单元赋初值时,又将UCSRC单元清零,不知为何?出现这种情况对下载程序到实际芯片有影响吗?我现在是一无开发器,二无实际应用电路,仅是在进行studio 仿真。

出0入0汤圆

发表于 2012-4-1 22:56:56 | 显示全部楼层
lz,你应该听听fsclub的建议。不想看到更多的人被误导,忍不住说两句。
你再好好看看文档,±3%的时钟精度,那是1MHz的自动标定结果。8MHz的熔丝配置用1MHz的标定值,频率一般都会偏低不少。所以,能正常通讯是你的运气。如果你要上产品,保证超高的不良率。

“RC振荡器的误差按道理来说每个单片机都不会完全相同的,那么在这种情况下去加载一个固定的校正值,效果应该不好吧?”
fsclub和你说得很明白了:
"而批量的做法是在程序上读取固定位置的EEP数值加载,对器件写入程序时编程器批量将校准字读出写入到固定位置EEP中供系统启动时加载。"

“我到现在也不明白ATMEL公司出厂时是怎么个校正方法,
他总不会用一段测试程序,然后连接频率计吧?”

芯片的出厂测试,比你想象的要复杂得多。

出0入0汤圆

发表于 2012-4-1 22:59:57 | 显示全部楼层
“AVR mega8的RC精度是3%”

没这么高吧,我也是9600,偶尔会出现数据错乱。
在同等情况下,STM8 RC跑9600毫无压力,在内部测试时一直跑115200,从没发现错误,实在是NB

出0入0汤圆

发表于 2012-4-1 23:12:44 | 显示全部楼层
本帖最后由 mitchell 于 2012-4-1 23:17 编辑

文档是这么说的:



lz的试验条件是:
实验条件:AVR mega8 +内置RC@8MHZ+波特率@9600


有什么证据证明可以保证3%的精度??

lz,连RC的标定过程都不清楚,就不要再误导别人了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-4-2 08:35:52 | 显示全部楼层
同楼主感受,曾用atmega64 + 内置RC@8MHZ + 9600b,开始正常,但过两天就不行了

出0入4汤圆

 楼主| 发表于 2012-4-2 08:52:07 | 显示全部楼层
mitchell 发表于 2012-4-1 23:12
文档是这么说的:

楼上说的对,在没有校准的情况下让单片机工作于8MHZ,频率无法保证。但是,我在前边也提到,怎么个校准方法,我对手册所说的校准比较费解.
既然RC振荡并非完全不能用于通信,希望大家能讨论一下校准的方法,怎么个校准更方便,我刚从官网上找到了一个mega32的内置RC的校准手册,分享给大家[attach]4489

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-4-2 12:14:39 | 显示全部楼层
ZL_electric 发表于 2012-4-2 08:52
楼上说的对,在没有校准的情况下让单片机工作于8MHZ,频率无法保证。但是,我在前边也提到,怎么个校准方 ...

所以,让你好好理解fsclub说的,他说的就是正确方法,毕竟人家是有批量经验的。

如果你还没明白,我详细跟你解释一下吧:
(1)DIY小批量的方法。
    编程器读取校准字节:

    写入到代码中,重新编译,下载:


(2)批量方法。
    从EEPROM固定位置加载校准字节:

    从MAP文件中,找到该EEPROM变量的确切地址:

    下载程序时,先“Read Cal. Byte”,再"Write to Memory":

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-4-2 12:36:33 | 显示全部楼层
在向各位请教一个问题:我用AVR studio4.19进行串口模拟仿真时,发现先给UCSRC赋初值时,UBRRH的第一位和第二位跟随UCSRC的第一位和第二位(即:UCSRC设定为:0x86时;UBRRH立即变为:0x06),下一条语句再对波特率单元赋初值时,又将UCSRC单元清零,不知为何?出现这种情况对下载程序到实际芯片有影响吗?我现在是一无开发器,二无实际应用电路,仅是在进行studio 仿真。

出0入0汤圆

发表于 2012-4-2 13:27:07 | 显示全部楼层
学习中

出0入0汤圆

发表于 2012-4-2 13:56:18 | 显示全部楼层
很容易的校准的啊
我用过mega8的内置RC振荡器
通过编程器可以读出内置的1MHz,2MHz,4MHz,8MHz校正字节
假设要使用4Mhz的频率,而4MHZ校正字节为0x90
则在你的main函数中,第一句放上OSCCAL=0x90, 就OK了
我使用9600的波特率,一直正常没发现问题

出0入4汤圆

 楼主| 发表于 2012-4-2 14:28:05 | 显示全部楼层
int main(void)
{
   unsigned int k=0;
   OSCCAL=0xa8;
   init_devices();

这样加校准字对吧?但还不行

出0入4汤圆

 楼主| 发表于 2012-4-2 18:52:51 | 显示全部楼层
有可能,我这次做的板子把MEGA8的硬件用的差不多了,除了AD,其他全在工作。待机电流就很大

出90入0汤圆

发表于 2012-4-2 19:33:59 | 显示全部楼层
我们用频率计校正。
不是为了省一个晶振,而是晶振容易坏。
用了>100k了。
ATMEGA有的芯片偏差10%啊

出0入0汤圆

发表于 2012-4-2 22:03:07 | 显示全部楼层
AVR RC确实无法保证UART可靠通讯。做产品需要加晶振,或者使用外部比较稳定的信号(比如市电)来调谐内部RC。

出0入0汤圆

发表于 2012-4-3 08:55:23 | 显示全部楼层
ZL_electric 发表于 2012-4-2 14:28
int main(void)
{
   unsigned int k=0;

兄弟,每一片读出的校准字都是不同的。
不是固定的,我说了,你需要编程器读出校准字,每片不同。

出10入10汤圆

发表于 2012-4-3 09:48:15 | 显示全部楼层
曾经在PIC16F628A芯片上用内置振荡做过,没有问题。
但是还是建议外置晶振,内置振荡会受到温度电压等影响

出0入4汤圆

 楼主| 发表于 2012-4-3 10:08:15 | 显示全部楼层
fsclub 发表于 2012-4-3 08:55
兄弟,每一片读出的校准字都是不同的。
不是固定的,我说了,你需要编程器读出校准字,每片不同。 ...

这问题我发现了,我就是吧那个板子上的M8的8M校准字写进去的,结果仍然不行.我新版PCB已经做成,两天后用外部晶振测试

出0入0汤圆

发表于 2012-4-3 10:19:55 | 显示全部楼层
ZL_electric 发表于 2012-4-3 10:08
这问题我发现了,我就是吧那个板子上的M8的8M校准字写进去的,结果仍然不行.我新版PCB已经做成,两天后用 ...

“仍然不行”,是有改善,还是一点改善都没有?和lz位的现象是否相同?

另外,能不能贴个单个字节发送的示波器截图?

出0入0汤圆

发表于 2012-4-3 10:38:12 | 显示全部楼层
示波器测量起始位的宽度,计算下波特率误差。
手动微调叫准字,波特率偏低就调大,反之调小。直到波特率达到最高的精度,再进行通讯测试。

一来检验了M8出厂校准字的精度。二来也可以测试下接收方对波特率误差的接受范围。最重要的,把波特率手动微调到最高精度以后,可以检验是不是系统其它地方的问题。

半个小时就可以做完的事情,没有必要拖上三天。

出0入4汤圆

 楼主| 发表于 2012-4-3 10:50:12 | 显示全部楼层
本帖最后由 ZL_electric 于 2012-4-3 10:54 编辑

校准字0xA8校正过的
示波器截图:
波特率9600,一停止位,无奇偶校验
每间隔大约5ms发送一次0x08

uart0_transmit(0x08);
Delay_nms(5);
波形如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入4汤圆

 楼主| 发表于 2012-4-3 10:53:02 | 显示全部楼层
mitchell 发表于 2012-4-3 10:38
示波器测量起始位的宽度,计算下波特率误差。
手动微调叫准字,波特率偏低就调大,反之调小。直到波特率达 ...

我以前没测过串口的脉宽,大哥看看我的波形,指点一下。同样的程序,在我的独立晶振的M8板上效果很好

出0入0汤圆

发表于 2012-4-3 10:58:44 | 显示全部楼层
ZL_electric 发表于 2012-4-3 10:53
我以前没测过串口的脉宽,大哥看看我的波形,指点一下。同样的程序,在我的独立晶振的M8板上效果很好 ...

别发0x08,发个0xAF,放大一点,测量起始位的脉宽

出0入4汤圆

 楼主| 发表于 2012-4-3 11:11:08 | 显示全部楼层
发送0xaf

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-4-3 11:14:15 | 显示全部楼层
放大了看啊,兄弟。
放到10us/div看看。

出0入4汤圆

 楼主| 发表于 2012-4-3 11:20:46 | 显示全部楼层
MAP005.JPG (88.37 KB, 下载次数: 0)
这图的第一个脉宽:112US
第二个:450US
第三个:110US
50US/DIV

出0入0汤圆

发表于 2012-4-3 11:39:12 | 显示全部楼层
用内部振荡器的温飘太大,尤其低温环境下,温飘严重,导致btl不匹配,用外部晶振会改善很多,但是外部晶振明显抗干扰性上不如内部振荡器。

出0入4汤圆

 楼主| 发表于 2012-4-3 12:08:40 | 显示全部楼层
本帖最后由 ZL_electric 于 2012-4-3 12:09 编辑
mitchell 发表于 2012-4-3 11:14
放大了看啊,兄弟。
放到10us/div看看。


刚才大致算了一下:
波特率9600.一个起始位,一个停止位,8位数据,总共十位
每发送一位的时间:1000 000/9600=104.16666666666666666666666666667us
那么起始位时间是104us,实测112us
发送了高四位耗时440us,实际应该是416us
在这样,每发送一字节,偏差就很大了,连续发送是不是就必死无疑了。

在这么说,AVR的内置RC,如果不手工校正,还是不很准确的

以上纯属个人理解,望高手纠正

出0入0汤圆

发表于 2012-4-3 12:12:25 | 显示全部楼层
TRIM 还是必要的

出0入162汤圆

发表于 2012-4-3 12:16:36 | 显示全部楼层
不校准没问题的
M8用内部RC,用出厂的校准值串口通讯从来没出过问题

出0入4汤圆

 楼主| 发表于 2012-4-3 12:17:50 | 显示全部楼层
AWEN2000 发表于 2012-4-3 12:16
不校准没问题的
M8用内部RC,用出厂的校准值串口通讯从来没出过问题

只能说我点背吧,我手头的这一片校准后就是上述波形····

出0入42汤圆

发表于 2012-4-3 12:42:07 | 显示全部楼层
AVR应用文档里关于RC校正文件如下

校正方法真不少啊。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-4-3 13:23:18 | 显示全部楼层
如果有市电的话,可以用市电来调谐内部RC。

出0入0汤圆

发表于 2012-4-3 19:46:40 | 显示全部楼层
ZL_electric 发表于 2012-4-3 10:08
这问题我发现了,我就是吧那个板子上的M8的8M校准字写进去的,结果仍然不行.我新版PCB已经做成,两天后用 ...

这个不是“问题”,而是人家本身就是那样设计的。
你直接用频率计或者有硬件频率计的示波器测下主时钟的频率不就清楚的,哪用你那么麻烦。

还有,不知道你怎么加载的校准字?

出0入4汤圆

 楼主| 发表于 2012-4-4 08:46:13 | 显示全部楼层
fsclub 发表于 2012-4-3 19:46
这个不是“问题”,而是人家本身就是那样设计的。
你直接用频率计或者有硬件频率计的示波器测下主时钟的 ...

我先用编程器读出8M的校准字是0XA8,然后如下:
int main(void)
{
   unsigned int k=0;
   OSCCAL=0xa8;
   init_devices();

内置RC怎么才能直接测到它的频率呢?(mega8)

出0入0汤圆

发表于 2012-4-4 11:52:56 | 显示全部楼层
ZL_electric 发表于 2012-4-4 08:46
我先用编程器读出8M的校准字是0XA8,然后如下:
int main(void)
{

有个引脚有时钟输出的。
麻烦你看下手册行不?

最恼火的就是自己有问题不看手册的人。

出0入4汤圆

 楼主| 发表于 2012-4-4 15:02:03 | 显示全部楼层
fsclub 发表于 2012-4-4 11:52
有个引脚有时钟输出的。
麻烦你看下手册行不?

谢谢老大。手册我的确是用什么功能找什么功能,没有完全翻个遍

出0入4汤圆

 楼主| 发表于 2012-4-4 16:51:58 | 显示全部楼层
本帖最后由 ZL_electric 于 2012-4-4 17:41 编辑

经过这几天的讨论,我得出以下结论:
AVR的内置RC振荡器并非完全不可以用于串行通信,但是前提是要校准。
说到这个校准,单单去读取它的校准字去校准并非万无一失,毕竟我试验过后发现校准了精度还不够。
如果非要用内部RC,并切要求可靠性高,那就用示波器去测,去调整。
说了这么多,其实最简单的方法就是用外部晶振,花了2毛钱,解决很多问题。
我的新版板子今天收到了,焊了一套,发现用外部晶振屡试不爽,舒服得很!
凡是没有绝对,在此帖中我早到了许多前辈的鄙视,但我感觉最终的结论是对的。
修改了我主观推测的温度影响,呵呵
望高手赐教

出0入0汤圆

发表于 2012-4-4 16:57:40 | 显示全部楼层
ZL_electric 发表于 2012-4-4 16:51
经过这几天的讨论,我得出以下结论:
AVR的内置RC振荡器并非完全不可以用于串行通信,但是前提是要校准。
...

lz,忍不住再说一句,你的思维方式有问题。

反复听你说到温度温度,温度影响是推测,不要当做结论来说。到底根据出厂校准字得到的误差是多少,到现在没看到你测出个数据来,彻底无语了。

出0入4汤圆

 楼主| 发表于 2012-4-4 17:24:52 | 显示全部楼层
本帖最后由 ZL_electric 于 2012-4-4 17:27 编辑
mitchell 发表于 2012-4-4 16:57
lz,忍不住再说一句,你的思维方式有问题。

反复听你说到温度温度,温度影响是推测,不要当做结论来说。 ...


也许温度影响很小,但内置RC我的板子就是不行,读出校准字校准了还不行,外置晶振就行,这算做结论可以吧?
估计照fsclub说的那样,用时钟输出去校准可行,但我实在不想去测了,呵呵

出0入0汤圆

发表于 2012-4-5 11:20:52 | 显示全部楼层
我也想知道你校准后在25度时的时钟频率误差到底有多大?

出0入0汤圆

发表于 2012-4-5 11:26:41 | 显示全部楼层
现在不校正是不是误差变成10%,上次好像哪个帖子看到的,后来又去翻了数据手册

出0入0汤圆

发表于 2012-4-5 13:15:12 | 显示全部楼层
can总线会有问题,串口没出现过

出0入618汤圆

发表于 2012-4-6 00:12:01 | 显示全部楼层
ZL_electric 发表于 2012-4-3 10:50
校准字0xA8校正过的
示波器截图:
波特率9600,一停止位,无奇偶校验
发送了高四位耗时440us,实际应该是416us

看你的波形,VCC是3.6V左右,人家校准字是5V下标定的,这个大概会有5%的误差,跟你测的这个误差很吻合呀……

出0入0汤圆

发表于 2012-4-6 02:27:36 | 显示全部楼层
ZL_electric 发表于 2012-4-1 16:24
RC振荡器的误差按道理来说每个单片机都不会完全相同的,那么在这种情况下去加载一个固定的校正值,效果应 ...

...就是因为第个单片机的误差都不一样,所以才有效正字啊,而且每个单片机的效正字都不同,而不是固定的,如果是固定的还有你写进去干麻?

出0入0汤圆

发表于 2012-4-6 10:27:09 | 显示全部楼层
8M 频率本身就不太合适啊。
可以直接用示波器量一下,看RC到底有多不准。%3也不至于是串口通讯出错吧

出0入0汤圆

发表于 2012-4-6 10:51:41 | 显示全部楼层
学习了~~

出0入0汤圆

发表于 2012-4-8 14:01:35 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2012-4-8 14:11:35 | 显示全部楼层
可以考虑使用LGT的单片机,可以实现用USART来校准再用!

出0入4汤圆

 楼主| 发表于 2012-4-8 16:58:50 | 显示全部楼层
其实我发现自己出问题的地方很多:
最初没加载校准字
后来校准了,但始终没考虑自己的系统是3.3V供电,人家提供的精度是在5V,25度下的精度,我的3.3V系统用5V的校准字要想准恐怕要等到下辈子了····

出0入0汤圆

发表于 2012-4-9 16:16:04 | 显示全部楼层
我用  ATMEGA88PA的内部8M RC  不做任何校准,出场默认值,波特率@57600和指纹头模块通信,从未出错的路过

出0入0汤圆

发表于 2012-4-9 16:23:54 | 显示全部楼层
MARK学习一下

出0入0汤圆

发表于 2012-4-9 16:57:34 | 显示全部楼层
那么多前辈给楼主支招了,你就测试一下,用内部RC能否调好,到底误差有多大,也不枉大家跟帖

出0入228汤圆

发表于 2012-4-9 18:40:37 | 显示全部楼层
本帖最后由 wxws 于 2012-4-9 18:44 编辑

用电吹风,吹吹试试

出0入0汤圆

发表于 2017-8-1 04:46:25 | 显示全部楼层
这个好贴啊,虽然楼主还是没结尾

出0入0汤圆

发表于 2017-8-1 10:18:57 | 显示全部楼层
82楼已经有答案了啊

出0入0汤圆

发表于 2017-8-1 10:43:23 | 显示全部楼层
内部RC无校准肯定偏差很大的。
比如我一个客户用PIC12F629,不知道是用啥第三方烧录器,把放校准值的地方给改成了NOP指令,官方的烧录器是绝对不会操作到这个地址的。程序烧了不会跑,因为用内RC,程序一开始是跑去放校准值的地方取校准值,而本来有返回指令,现在变成NOP回不去了,所以MCU就不跑了。然后我将程序一开始----跑去拿校准值的指令删了,程序就正常跑起来,但时钟真的是相当不准的,1ms的计时变成了大概700us,哈哈哈~所以内部RC一定要校准呀,要不然用于通讯绝对行不通~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 19:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表