关于OSCCAL – RC 精调控制寄存器
我以前用的Tiny13需要使用这个寄存器校准时钟校准值是从芯片内读出的 看LGT的手册似乎不能读到这个数字 我应该怎么做呢
一个一个校准不太可能啊 校准的话,可以使用编程器来校准。
也可以使用程序自动校准。然后把OSCCAL写入eeprom保存。 编程器怎么校准呢LGT提供的工具有这个功能么? 本帖最后由 xwkm 于 2013-2-16 23:59 编辑
pupist 发表于 2013-2-16 23:47 static/image/common/back.gif
编程器怎么校准呢LGT提供的工具有这个功能么?
具体这个我就不清楚了。因为目前我用的还是山寨工具,非官方的。
至于OSCCAL可以自己找个有源晶振。输入捕获,自己校准就OK了。
顺带说一句,不要试图使用LGT目前自带的RC振荡器跑V-USB。
就算是使用了外部8M的有源晶振校准。但是还是在HUB上99%起不来。
在Intel的后USB接口还好。AMD和HUB的情况一样,完全认不出来。
总之内部目前LGT的内部RC振荡器跑115200波特率,校准过几乎没问题。
但是跑USB就省省吧。老老实实外接晶振吧。 那你的意思是一个一个校准了? 我一次要烧写千把个 不是死翘翘了... LGT省略了一个有成本的步骤啊 pupist 发表于 2013-2-17 00:12 static/image/common/back.gif
那你的意思是一个一个校准了? 我一次要烧写千把个 不是死翘翘了... LGT省略了一个有成本的步骤啊 ...
我放出了一部分的ISP时序。你可以试试自制脱机编程器。然后主控MCU自动校准LGT。
不过貌似脱机编程器可以联系官方获得。应该烧好了OSCCAL也校准好了。
还有我还是老话,V-USB不适合用内部RC,谁用谁知道。 工厂出厂之前是已经校准了的,如果认为有必要校准,就给OSCAL赋值就可以。
因为系统启动时先从FUSE处载入OSCAL的值,如果程序再次赋值那么就是使用最新的用户程序的值了。 写OSCAL时会自动存储OSCAL的值, 这个不知道以后会不会改一下. logicgreen 发表于 2013-2-17 13:27 static/image/common/back.gif
工厂出厂之前是已经校准了的,如果认为有必要校准,就给OSCAL赋值就可以。
因为系统启动时先从FUSE处载入O ...
这么说 LGT比AVR出厂前还多做了一些呢明白了 goodcode 发表于 2013-2-17 18:55 static/image/common/back.gif
写OSCAL时会自动存储OSCAL的值, 这个不知道以后会不会改一下.
给OSCCAL赋值的时候貌似没有存储动作。
只是在这个芯片这一次有效,下次加电没去赋值就还是FUSE的值。 记得之前的测试写OSCAL的值会被存储, 这样会带来一些麻烦. goodcode 发表于 2013-2-17 20:45 static/image/common/back.gif
记得之前的测试写OSCAL的值会被存储, 这样会带来一些麻烦.
不会的。你上电的时候试下绝对没存储。 又测了一下确实不会写熔丝位
uint8_t i, oldOSCCAL, oldCLKPR;
oldOSCCAL = OSCCAL;
oldCLKPR = CLKPR;
//LED初始化
DDRD = 1<<PD7;
ledRedOff();
_delay_ms(500);
//2分频 8M 19200
InitUART( 0x0067);
TransmitByte( 0xff);
TransmitByte( 0x00);
TransmitByte( OSCCAL);
TransmitByte( CLKPR);
TransmitByte( 0x00);
TransmitByte( 0xff);
//重设时钟校准值
OSCCAL = 7;
CLKPR = 0x80;
CLKPR = 0x80;
_delay_ms(100);
//1分频 16M 19200
InitUART( 0x0067);
TransmitByte( 0xff);
TransmitByte( 0x00);
TransmitByte( OSCCAL);
TransmitByte( CLKPR);
TransmitByte( oldOSCCAL);
TransmitByte( oldCLKPR);
TransmitByte( 0x00);
TransmitByte( 0xff);
for (i=0; i<20; i++)
{
ledRedToggle();
_delay_ms(100);
}
ledRedOff();
_delay_ms(1000);
while(1);
return 0;
软复位 FF 00 07 00 07 00 00 FF
上电 FF 00 07 00 40 00 00 FF
不知道为什么 芯片上电不是2分频
看返回的值 OSCCAL 在设置之前读取没意义 goodcode 发表于 2013-2-18 14:16 static/image/common/back.gif
又测了一下确实不会写熔丝位
uint8_t i, oldOSCCAL, oldCLKPR;
芯片上电的时候是二分频,设置分频后复位就不会变。但是如果是非SOP28的芯片复位后时钟源一定是IRC。你可以试试。 我这是工程片 看上面代码 InitUART( 0x0067); 按8m收到的是错位的
之前工程里
if (OSCCAL != 0x08)
OSCCAL = 0x08;
蛋疼了 logicgreen 发表于 2013-2-17 13:27 static/image/common/back.gif
工厂出厂之前是已经校准了的,如果认为有必要校准,就给OSCAL赋值就可以。
因为系统启动时先从FUSE处载入O ...
Hello LGT我看到官方例程里每个程序都给OSCAL赋值校准了能解释一下么 TC的例子赋值0x0a Uart例子赋值 0x05 我批量生产的时候到底应该怎么做呢
不赋值?还是挨个校准? pupist 发表于 2013-3-10 11:45 static/image/common/back.gif
Hello LGT我看到官方例程里每个程序都给OSCAL赋值校准了能解释一下么 TC的例子赋值0x0a Uart例子 ...
又试了一次默认8M是不用校准的 还是这个问题我如果使用默认8MHz 8分频 似乎就不准了哦 难道这个跟直接用8MHz是不同的么?
页:
[1]