以前就有这个疑问,我的那块EZ430 Chronos手表首次打开温度显示差很多。
是普遍现象还是就是我的那块的个别故障?
看CC430F6137数据手册好像是有温度校准数据的呀
但是看EZ430 Chronos的源程序V1.6 (21.11.2010),好像校准数据却是从INFO D memory读取的,而6137数据手册中温度校准数据好像却是在叫什么Device
Descriptor区域中的,而手表程序中好像没有看到使用这个区域中的温度校准数据。请问是不是这样?如果不是,在别的地方我没有看到?(我只能看部分程序呀,好像有说法看程序比写程序还烦人,当然我是菜鸟,可能正好相反,看程序也是种学习,但是看程序那也是比专家难吧)
前天我更新了手表程序(自己改的,删除了配件所需的显示和相关程序,因为自己没有配件,以后要使有兴趣自己做再加上自己的。增加了气压计功能显示,呵呵,钓鱼用,穷讲究),发现以前对比其它温度计手动校准就失效了,扫了一眼源程序,好像是没有进行FLASH保存吧?就存在变量中的,掉电就没了。
请问CC430芯片使用芯片中的校准数据应该是很准的吧?一般误差多少?手册英文的,我还没有仔细看。是不是应该比那个压力传感器的温度绝对误差要小吧?为什么不使用Device Descriptor中的数据呢?其它地方有拷贝里面数据到info D?
// *************************************************************************************************
// @fn read_calibration_values
// @brief Read calibration values for temperature measurement, voltage measurement
// and radio from INFO memory.
// @param none
// @return none
// *************************************************************************************************
void read_calibration_values(void)
{
u8 cal_data[CALIBRATION_DATA_LENGTH]; // Temporary storage for constants
u8 i;
u8 *flash_mem; // Memory pointer
// Read calibration data from Info D memory
flash_mem = (u8 *) 0x1800;
for (i = 0; i < CALIBRATION_DATA_LENGTH; i++)
{
cal_data[i] = *flash_mem++;
}
if (cal_data[0] == 0xFF)
{
// If no values are available (i.e. INFO D memory has been erased by user), assign
// experimentally derived values
rf_frequoffset = 4;
sTemp.offset = -250;
sBatt.offset = -10;
simpliciti_ed_address[0] = 0x79;
simpliciti_ed_address[1] = 0x56;
simpliciti_ed_address[2] = 0x34;
simpliciti_ed_address[3] = 0x12;
sAlt.altitude_offset = 0;
} else
{
// Assign calibration data to global variables
rf_frequoffset = cal_data[1];
// Range check for calibrated FREQEST value (-20 .. + 20 is ok, else use default value)
if ((rf_frequoffset > 20) && (rf_frequoffset < (256 – 20)))
{
rf_frequoffset = 0;
}
sTemp.offset = (s16) ((cal_data[2] << 8) + cal_data[3]);
sBatt.offset = (s16) ((cal_data[4] << 8) + cal_data[5]);
simpliciti_ed_address[0] = cal_data[6];
simpliciti_ed_address[1] = cal_data[7];
simpliciti_ed_address[2] = cal_data[8];
simpliciti_ed_address[3] = cal_data[9];
// S/W version byte set during calibration?
if (cal_data[12] != 0xFF)
{
sAlt.altitude_offset = (s16) ((cal_data[10] << 8) + cal_data[11]);
} else
{
sAlt.altitude_offset = 0;
}
}
}
下次我打开手表的时候读一下INFO D看看有没有数据,貌似应该有,因为这一句sTemp.offset = -250;那显示应该就是-200左右了吧
Fuchong Wang:
还没人指点一下呀
请教一下,到底CC430内部的温度传感器和压力传感器本身带的温度测量那个准确度高一点呢?
另外,哪位能提供一下那种50,80度校准数据的校准程序代码例子?还是抄代码省事呀
谢谢
Fuchong Wang:
回复 Fuchong Wang:
晕
那个infoD里倒是有内容,不过我的电池电压显示不准呀,大了0.1x伏,手表也没校准菜单呀。
程序中校准基准电压数据在哪里使用的呀?
温度和直接从压力传感器中读出来的温度相差5度,人家压力传感器的绝对误差好像手册上写的好像是2度呀
我现在弄两个温度都显示了
哪位专家高手或者使用过的吱一声呀,如果有网友也不能确定自己说的是否正确不好意思发帖可以麻烦邮件指点我一下呀。我的邮箱:wangfuchong@hotmail.com wangfuchong@wangfuchong.com chongfuwang@gmail.com
直接知道原因或者事实可以免的我自己花时间确定或者省掉一些查资料的时间直接改程序呀
Fuchong Wang:
回复 Fuchong Wang:
唉,哪位大侠费一丁点时间指点一下呀。
现在出去逛逛钓鱼,等待回来希望能看到回复吆。早晨未出去钓鱼,一者也不想天天去钓了,二者想着今天很可能阴天,不想出去那么早,不想后来还出来太阳了。现在天气阴下来了,不过气压也有所降低(鬼知道对钓鱼有什么样的实际影响),不过还是想出去逛逛。
靠,还想着什么时候钓多点鱼的时候拍点视频吹嘘一下德州仪器的产品功用呢
专家也不一定就对具体的应用产品软件熟悉,那是自然的,也不能确定可以在论坛对话中给点参考呀。再说专家即使没看过程序快速扫一眼也肯定比我这样的菜鸟容易太多了吧。我的温度显示不准就算了,电压显示也不准,误差也大了一点吧?不解决一下,用起来心里不别扭么?
eZ430-Chronos User Guide (SLAU292) 流程图在第17页
源程序:Download Now for Windows (SLAC341)