【楼主位】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 近日对M8L进行了一些演练,感觉比51---味道好极了...虽然PIC也... 但是由于系统的要求及M8L的特点,我在用RTC后,也只好用内部RC振荡器了. 当然内部RC振荡器确实对系统的稳定有一定的帮助,但频率漂移确实是件头痛的大事!!! 首害者就数串口了!!! 在5V系统下波特率为19200时,可以说不错,UBRR基本稳定在25.OSCCAL由SLISP校准. 但在3.3V系统下,保持OSCCAL不变时,随着外部条件的变化,UBRR从24(比5V的小)可以飘到21. 请大家探讨有关AVR的内部RC振荡器校准及补偿问题,能否找出一个简单可行之方法??? 我琢磨了一个方法,正在验证中,先请各位发表高见... -----此内容被hotpower于2005-01-09,00:42:34编辑过 | ||
2005-01-08,23:45:33 |
|
【1楼】 machao 积分:1427 派别: 等级:------ 来自: | 请做点好事,把官方提供的资料先整理告诉大家。 点击此处打开armok0127582.pdf 点击此处打开armok0127583.pdf 点击此处下载armok0127584.zip 点击此处下载armok0127585.zip | ||
2005-01-09,00:47:33 |
|
【2楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 谢谢马老师... 今天大概看了一下,思路应该与波特率自动校准技术雷同吧... -----此内容被hotpower于2005-01-10,00:11:56编辑过 | ||
2005-01-09,02:52:21 |
|
【3楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 马老师: 学生我已实现AVR的内部RC振荡器自动校准及补偿... 实际上,在我第1次为RC郁闷时,就立即将INT0接RXD,...因为我搞过几年仪表计量... 我现在也只看了"一眼"您给的ATMEL官方提供的资料...因为我要自己从郁闷中走出来... 您自称是"另类",学生我肯定是"异类"了... 现在我不需要"外部激励RXD"来校准AVR的内部RC振荡器... 正在"烤机"和优化"算法"..."误人子弟"我也是做不出来的... | ||
2005-01-09,19:44:23 |
|
【4楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 这是串口的"调节记录",准备优化算法,使其迅速逼近正确点... 从下面可以看出调节用了00:01:05.... 软件测试设定: /* UART初始化 */ void uart_init(void) { // OSCCAL = pgm_read_byte(osc_address); // OSCCAL = 0xb1;//双龙校准值 OSCCAL = 0xf0;//瞎写值 UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送和接收 // UBRR=fosc/16/(baud+1); // UBRRL=(fosc/16/(baud+1))%256; // UBRRH=(fosc/16/(baud+1))/256; // UBRRL = 21;//3.3V的漂移测定值 UBRRL = 25;//标准值 UBRRH = 0; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位 } ?庺幚膹?巰庺幚?幤尷庼幚?幥尷庼梧D幦汤庼凄F庨睦析青f晤睦悟G?物睦悟G`"勿睦乞gp????乞gp?凄胬乞cp????F?F?DF俐?GzFzdG@FzG{凣@?G{G{ @?G{G{ 腉@?GyG{ 鬐@?gyGy 睦gyGy 4睦g=?g=G`?#=?'=?' ?#忇DDg1??#忇DDg寑#忇DDg2??D'8?? ?D'8?? ?D#8?? ?d#8?忄d#8?忄d#?#?d#?#?d#?d#?ddtt忄ddt?蜞d$t?蜞$$4?蜞$$4?蜞&$4蜞&$6筻$$?骮?骮?&骮仸6馺仸F馺仸V馺仸f馺仸v馺仸?鵣仸?鵣仸鵣仸鵣仮"鵣立2鵣立B鵣立R鵣`r?b`z``reg@``z``zex@``z``zey@``zpazp`@ppzpqzpq@ppzpqzpr`ppzpqzps`00zp1:0t`00:01:05 00:01:06 00:01:07 00:01:08 00:01:09 00:01:10 00:01:11 00:01:12 00:01:13 00:01:14 00:01:15 00:01:16 00:01:17 00:01:18 00:01:19 00:01:20 00:01:21 | ||
2005-01-09,20:07:49 |
|
【5楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 再给一组测试值,可以看出5V和3.3V的差异... 软件测试设定: /* UART初始化 */ void uart_init(void) { // OSCCAL = pgm_read_byte(osc_address); OSCCAL = 0xb1;//双龙校准值 // OSCCAL = 0xf0;//瞎写值 UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送和接收 // UBRR=fosc/16/(baud+1); // UBRRL=(fosc/16/(baud+1))%256; // UBRRH=(fosc/16/(baud+1))/256; // UBRRL = 21;//3.3V的漂移测定值 UBRRL = 25;//标准值 UBRRH = 0; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位 } ?庺幚膹?巰庺幚膹滥巰庼幚D幥尷庼梧D幦汤析凄F伍睦析青f晤睦悟G?物睦悟G`"勿睦乞gp????乞gp?凄胬F?cp????F?F?DF俐?GzFzdF@G{Gz凣@G{G{ 碐@?G{G{ 腉@?GyG{ 鬐@?gyG{ 睦gyGy 4睦g=?g=g`?g=?#=?' ?#忇DDg1??#忇DDg寑#忇DDg2??D'8?? ?D'8?? ?D#8?? ?d#8?忄d#8?忄d#?#?d#?#?d#?d#?ddt@?ddt?蜞d$t?蜞$$4?蜞$$4?蜞$$4蜞&$4筻$$?筻?骮儰$骮仸6馺仸F馺仸V馺仸f馺仸v馺仸?鵣仸?鵣仸鵣仮鵣仮&鵣立2鵣立B鵣立R鵣敛b鵣`r``zmg@``z``zex@``z``zey@p`zpqz`p@ppzpqzpq@ppzpqzpr`ppzpqzps`pp:01zp4 00:01:05 00:01:06 00:01:07 00:01:08 00:01:09 00:01:10 00:01:11 00:01:12 00:01:13 00:01:14 00:01:15 00:01:16 00:01:17 00:01:18 -----此内容被hotpower于2005-01-09,20:13:46编辑过 | ||
__________________________ | |||
2005-01-09,20:13:16 |
|
【6楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 再给一组测试值,可以看出好像都要经过1分零5秒后才能调节到正确值... 马老师: 从实验结果来看,中途调节OSCCAL是需要一定的时间才行??? 软件测试设定: /* UART初始化 */ void uart_init(void) { // OSCCAL = pgm_read_byte(osc_address); // OSCCAL = 0xb1;//双龙校准值 OSCCAL = 0x80;//瞎写值 UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送和接收 // UBRR=fosc/16/(baud+1); // UBRRL=(fosc/16/(baud+1))%256; // UBRRH=(fosc/16/(baud+1))/256; // UBRRL = 21;//3.3V的漂移测定值 UBRRL = 25;//标准值 UBRRH = 0; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位 } 徖$巰庺幚膹滥巰庼幚?幥尷庼卫D幦汤庼凄F庨睦析青f晤睦悟G?物睦悟G`"勿睦乞gp????乞gp?凄胬乞cp????F?F?DF俐?GzFzdG@G{Gz凣@G{G{ @?G{G{ 腉@?GyG{ 鬐@?GyGy 睦gyGy 4睦g=gyg`?'=?'=?' ?#忇DDg1??#忇DDg寑#忇DDg2??D'8?? ?D#8?? ?D#8?? ?d#8?忄d#8?忄d#?#?d#?#?d#?d#?ddtt忄ddt?蜞d$t?蜞$$4?蜞$$4?蜞$$4蜞&$4筻$&?骮?骮儲&骮仸6馺仸F馺仸V馺仸f馺仸v馺仸?馺仸?鵣仸鵣仮鵣仮&鵣立2鵣立B鵣立R鵣敛b鵣`z``zeg@``z``zex@``z``zey@``zpazp`@ppzpqzpq@ppzpqzpr@ppzpqzps`p0:0qz04 00:01:05 00:01:06 00:01:07 00:01:08 00:01:09 00:01:10 00:01:11 00:01:12 00:01:13 00:01:14 00:01:15 00:01:16 00:01:17 00:01:18 00:01:19 00:01:20 00:01:21 | ||
2005-01-09,20:23:22 |
|
【7楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 再给一组测试值,可以看出如果在写入时就写OSCCAL = 0xc8该多好呀... 但本程序是"全天候自动调节",无须再为内部RC振荡器"忧愁烦恼"了... 哈哈...我该做个"美梦"了... 软件测试设定: /* UART初始化 */ void uart_init(void) { OSCCAL = 0xc8;//本程序测出的自动校准值(真正的漂移值) // OSCCAL = pgm_read_byte(osc_address); // OSCCAL = 0xb1;//双龙校准值 // OSCCAL = 0x80;//瞎写值 UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送和接收 // UBRR=fosc/16/(baud+1); // UBRRL=(fosc/16/(baud+1))%256; // UBRRH=(fosc/16/(baud+1))/256; // UBRRL = 21;//3.3V的漂移测定值 UBRRL = 25;//标准值 UBRRH = 0; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位 } 00:00:01 00:00:02 00:00:03 00:00:04 00:00:05 00:00:06 00:00:07 00:00:08 00:00:09 00:00:10 00:00:11 00:00:12 00:00:13 00:00:14 00:00:15 00:00:16 00:00:17 00:00:18 00:00:19 00:00:20 00:00:21 00:00:22 00:00:23 00:00:24 00:00:25 00:00:26 00:00:27 00:00:28 00:00:29 00:00:30 00:00:31 00:00:32 00:00:33 00:00:34 00:00:35 00:00:36 00:00:37 00:00:38 00:00:39 00:00:40 00:00:41 00:00:42 00:00:43 00:00:44 00:00:45 00:00:46 00:00:47 00:00:48 00:00:49 00:00:50 00:00:51 00:00:52 00:00:53 00:00:54 00:00:55 00:00:56 00:00:57 00:00:58 | ||
2005-01-09,20:38:45 |
|
【8楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 实际的OSCCAL逼近"曲线"...可以看出波特率不对时的"情况"... 软件测试设定: /* UART初始化 */ void uart_init(void) { // OSCCAL = 0xc7;//本程序测出的自动校准值(真正的漂移值) // OSCCAL = pgm_read_byte(osc_address); // OSCCAL = 0xb1;//双龙校准值 OSCCAL = 0x80;//瞎写值 UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送和接收 // UBRR=fosc/16/(baud+1); // UBRRL=(fosc/16/(baud+1))%256; // UBRRH=(fosc/16/(baud+1))/256; // UBRRL = 21;//3.3V的漂移测定值 UBRRL = 25;//标准值 UBRRH = 0; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位 } OSCCAL逼近"曲线": 00 00 02 FE 04 FE 06 FE 18 FE 1B FE 1C FE 1F FE 20 FE 23 FE 24 FE 27 FF 38 FF 3B FF 3C FF 3F FF 40 FF 43 FF 44 FF 47 FF 48 FF 4B FF 4C FF 4F FF 70 FF 73 FF 74 FF 77 FF 78 FF 7B FF 7C FF 7F 80 C3 C4 C7 C8 CB CE CF 50 51 56 57 58 59 5E 5F 60 61 62 63 6C 6D 6E 6F 78 79 7A 7B 7C 7D 7E BF C0 C1 C2 C3 C4 C5 C6 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 由于初始化OSCCAL = 0x80即内部RC振荡器设置的发生频率很低,故头2个数据0x00实际为 OSCCAL = 0x80的启始位+0x80的低位...到倒数第3行的0xBF时,即OSCCAL = 0xbf时,串口刚能接收到正确 的数据,所以,OSCCAL = 0xbf是临界值(在UBRRL = 25时)... 但本程序还是要继续逼近真值OSCCAL = 0xc7!!!!!!!! -----此内容被hotpower于2005-01-09,21:12:58编辑过 | ||
__________________________ | |||
2005-01-09,21:08:27 |
|
【9楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 再给出测试报告的最后一页...等马老师给AVR菜鸟批改"作业"... 软件测试设定: /* UART初始化 */ void uart_init(void) { // OSCCAL = 0xc7;//本程序测出的自动校准值(真正的漂移值) // OSCCAL = pgm_read_byte(osc_address); // OSCCAL = 0xb1;//双龙校准值 OSCCAL = 0xff;//瞎写值 UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送和接收 // UBRR=fosc/16/(baud+1); // UBRRL=(fosc/16/(baud+1))%256; // UBRRH=(fosc/16/(baud+1))/256; // UBRRL = 21;//3.3V的漂移测定值 UBRRL = 25;//标准值 UBRRH = 0; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位 } OSCCAL逼近"曲线": FF FF FF FE FE FD FD FC FC FB FB FA FA F9 F8 F9 F8 F7 F6 F7 F6 F5 F4 F5 F4 F3 F2 F3 F0 F3 F2 F1 F0 EF EE ED EC EB EA E9 E8 E7 F6 F5 D4 D3 D2 D1 D0 CF CE CD CC CB CA C9 C8 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 | ||
__________________________ | |||
2005-01-09,21:16:27 |
|
【10楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 快速逼近算法"曲线"... 测试值: OSCCAL = 0x00; 00 00 00 00 00 81 C8 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 测试值: OSCCAL = 0x80; 00 00 00 00 80 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 测试值: OSCCAL = 0xb1; 61 B1 CF C4 C8 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 测试值: OSCCAL = 0xc7; C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 测试值: OSCCAL = 0xff; FF FF 7F C8 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 C7 | ||
2005-01-09,22:50:42 |
|
【11楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 恭喜自己用了近5个小时攻克了AVR的内部RC振荡器校准及补偿问题... 郁闷的hs12232-9...明天吧... 真累呀...只休息了4个小时...下辈子打死我也再不干了... | ||
2005-01-09,23:13:54 |
|
【12楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 看到马老师上线,现在交"作业"--实验原始记录报告... | ||
__________________________ | |||
2005-01-10,00:39:44 |
|
【13楼】 machao 积分:1427 派别: 等级:------ 来自: | 应先讲清楚原理吗,让大家了解的思路和算法。给个UART初始化和一串232的输出结果是不是买关子? | ||
2005-01-10,02:35:48 |
|
【14楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 关键是没什么原理和道理。。。 我想先探讨后论述主要是害怕有人说:“我早已。。。” 所以,正因为太简单,故。。。但确实很实用。。。 | ||
2005-01-10,08:32:43 |
|
【15楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 马老师: 学生俺并非"卖关子"...只是不想误人子弟了...先让大家自己想想看,这样会提高"功力"的... | ||
2005-01-10,13:12:25 |
|
【16楼】 dfgeoff 嗜血蜗牛 积分:689 派别: 等级:------ 来自:江苏南京 | 咦?这也会下去?帮up上去。 自动RC校正对于使用内部RC振荡器的工程来说是必须的,不然,那么多的(比如1K)芯片,都要读RC校正值,再改程序,未免太累人。 因为自己没什么水平,一直不敢随便跟着叫好,以免影响hotpower DX和马老师的交流。现在帮个忙,冲前面去。 并期待后续! | ||
__________________________ 抗日联盟!在不影响生活的前提下,不买日货! 欢迎交流51单片机、AVR、CPLD/FPGA。江苏南京。 MSN:dfgeoff@hotmail.com QQ: 4997129 E-mail:dfgeoff@163.com | |||
2005-01-10,22:21:28 |
|
【17楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 哈哈...实际学生我在20年前搞仪表计量了6年时间... 我知道这是学生交的一篇"水文"... 我肯定会将原理及源程序公开发表的,现在主要等花农先做完这篇作业...让他动动大脑... 以免"花心太重"... 及早发表肯定会误人子弟的!!!!!!!!! | ||
__________________________ | |||
2005-01-11,00:22:41 |
|
【18楼】 mucode 牧 积分:79 派别: 等级:------ 来自: | 我的设想实现自动校准,占用0空间 串口下载线(特制的,必须由mcu控制) 写入测试程序,和下载线配合精确测量频率误差 得到校准值,重复测试 写入新程序,写入校准值 | ||
__________________________ 这里是代码的牧场 http://www.mucode.com/bbs 欢迎访问牧码软件工作室 http://www.mucode.com | |||
2005-01-12,09:23:38 |
|
【19楼】 crazyeda 积分:167 派别: 等级:------ 来自: | 是否是对OSCCAL连续赋值(作为激励),检测输出信号周期来判断此时主频率.HOTPOWER的办法是不是这个意思啊 | ||
2005-01-12,09:33:02 |
|
【20楼】 MZMMZMMZM 积分:110 派别: 等级:------ 来自: | 期待 | ||
__________________________ 难得糊涂 zhimou-mei@163.com | |||
2005-01-12,09:52:56 |
|
【21楼】 HIGHWAY 器件替换网 积分:50 派别: 等级:------ 来自:南京 | 呵呵,前辈就是不一样啊,我是懒人,是不会这么做的 等前辈给答案了 | ||
__________________________ | |||
2005-01-12,16:55:40 |
|
【22楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 正在研究各种校准方法... 目前的方法是"频率漂移放火墙",只要频率漂移立即纠正... 可以应用在M8L和M16L中...正在整理文档... | ||
2005-01-12,18:57:02 |
|
【23楼】 crazyeda 积分:167 派别: 等级:------ 来自: | hotpower大叔,我一直在期待您的频率漂移防火墙,不晓得是否可以早点看到您的美文。因为发现您最近迷上了C++玩AVR,好象有点乐不思归,特提醒一下。嘿嘿 | ||
2005-02-01,23:53:16 |
|
【24楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 哈哈,“频率漂移防火墙”确实已通过本人的“验收”,并在5V和3.3V下进行烤机实验。 今天电波表程序刚刚完成,明天开始用电波表检验“频率漂移防火墙”的实战能力. GCCAVR C++菜鸟玩MCU C++“乐不思归”--确实在自我陶醉...没想到代码效率不错... | ||
2005-02-02,00:14:51 |
|
【25楼】 crazyeda 积分:167 派别: 等级:------ 来自: | 年前能见到实战之文吗,希望描述一下原理,我的GCC还在摸索阶段,可能看不太明白你程序中的“颜如玉”,呵呵 | ||
2005-02-05,00:01:00 |
|
【26楼】 hotpower 菜农 积分:1404 派别: 等级:------ 来自:西安大雁塔村 | 今天终于找到和我思路雷同的好文,供大家参考!!! 内部RC振荡器校准 | ||
2005-02-07,12:37:14 |
|
【27楼】 crazyeda 积分:167 派别: 等级:------ 来自: | 前辈依然尤抱琵琶。。。。。。。。 | ||
2005-02-08,02:04:57 |
|
【28楼】 zrkj 积分:13 派别: 等级:------ 来自: | 当用于精确定时或串行通讯时最好不要采取“内部RC振荡器”方式,特别是批量生产时更不好办,温漂和电压波动都是大问题。 | ||
2005-02-08,08:36:50 |
|
【29楼】 crazyeda 积分:167 派别: 等级:------ 来自: | HOTPOWER老大硬是不肯带我这菜菜,只好昨晚3:00自力更生啃了啃ATMEL的那篇关于OSCCAL校正的文档,基本上的思路还是不停的对OSCCAL赋值,然后检测和外部标准频率的相位差,一个反馈--重新赋值的过程,其中提到一个办法就是逼近法赋值,这样经过若干个比较过程最终得到精确的赋值,每次更改过OSCCAL以后要等待时钟重新稳定才可以进行频率比较. 另外不同代的AVR的RC振荡器挺不同的,MEGA8,16内部有四个独立的振荡器对应1,2,4,8M,所以有4个校准值,属于AVR的第4代片内振荡器.MEGAx8系列内部只有一个8M的振荡器,是AVR的第5代片内振荡器 HOTPOWER老前辈逼着我外语长进啊,可您好歹也说点什么啊 |
文章评论(0条评论)
登录后参与讨论