打印

请教:NTC测温,查表法出问题

[复制链接]
7624|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ming666|  楼主 | 2011-7-28 16:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在用表中一个固定的数:ox2710,可是总是显示160度,请大家帮忙看下!



void  temptest()                //用二分查表法计算温度值 //25度时最大与最小差1000,相邻度数差500
//总计一度之间可以放的误差为1500
{
signed char tempmid,tempmin,tempmax;
unsigned int tempget ;
code unsigned int temptab[]=   //使用了25C 100KNTC,所以原RT表*100取整后制作的此表:0---160C DIV 1C   //0:32510[0x7efe]---------160:128[0x80]
{0x7efe,0x78ee,0x733b,0x6dd8,0x68bd,0x63e2,0x5f40,0x5ad4,0x5698,0x528c,       //0---9C
0x4eac,0x4ad3,0x4753,0x4417,0x410f,0x3e2f,0x3b6f,0x38ca,0x363e,0x33c8,       //10-19C
0x3168,0x2f20,0x2cf1,0x2add,0x28e7,0x2710,0x255b,0x23ca,0x225f,0x211b,       //20-29c
0x2002,0x1ec0,0x1d85,0x1c51,0x1b23,0x19fc,0x18dd,0x17c8,0x16be,0x15bf,       //30-39c
0x14ce,0x1392,0x1319,0x1258,0x11aa,0x110e,0x1061,0x0fbd,0x0f22,0x0e8f,       //40-49c
0x0e04,0x0d7f,0x0d01,0x0c88,0x0c13,0x0ba3,0x0b36,0x0acd,0x0a66,0x0a01,    //50-59c
0x099e,0x0945,0x08f1,0x089c,0x084c,0x07ff,0x07b5,0x076e,0x072a,0x06e9,
0x06aa,0x066f,0x0636,0x0600,0x05cc,0x059b,0x056e,0x0542,0x0517,0x04ef,
0x04c8,0x04a2,0x047d,0x0459,0x0436,0x0414,0x03f2,0x03d1,0x03b1,0x0391,
0x0371,0x0355,0x033a,0x0320,0x0308,0x02f0,0x02da,0x02c4,0x02af,0x029a,
0x0286,0x0272,0x025f,0x024b,0x0238,0x0225,0x0216,0x0207,0x01f8,0x01e9,
0x01da,0x01cc,0x01be,0x01b0,0x01a3,0x0197,0x018b,0x0180,0x0175,0x016b,
0x0162,0x0157,0x014d,0x0144,0x013c,0x0133,0x012b,0x0124,0x011d,0x0116,
0x010f,0x0108,0x0101,0x00fb,0x00f4,0x00ed,0x00e6,0x00e0,0x00d9,0x00d4,
0x00ce,0x00c9,0x00c3,0x00bf,0x00ba,0x00b6,0x00b1,0x00ae,0x00aa,0x00a6,
0x00a3,0x009e,0x009a,0x0096,0x0092,0x008f,0x008c,0x0089,0x0085,0x0082,0x007f};  //150-160 */   
tempget =0x2710;//sumtemp();
tempmin = 0;
tempmax = 160;
while(1)
{
  tempmid = (tempmin + tempmax)/2;
  if( tempget == temptab[tempmid]) break;
   else if (tempget >temptab[tempmid]) tempmax = tempmid;
  else tempmin = tempmid;
  if((tempmax-tempmin)<=2000)
   {
   if(temptab[tempmax]+temptab[tempmin]>2*tempget)  tempmid = tempmax;
    else tempmid = tempmin;
    break;
    }
   }
   ctemp = tempmid;
  //if(ctemp<=0) display[3]=0xc0;
   //else if(ctemp>=160) display[3] = 0xbf;
}

相关帖子

沙发
tiger5z| | 2011-7-28 16:41 | 只看该作者
算法有问题,其实很好查的牙!:lol

使用特权

评论回复
板凳
邪恶猛男| | 2011-7-28 17:50 | 只看该作者
LZ 你这写的是什么鬼程序 完全不会

使用特权

评论回复
地板
ming666|  楼主 | 2011-7-28 17:55 | 只看该作者
:L指点下哟

使用特权

评论回复
5
cauhorse| | 2011-7-28 18:48 | 只看该作者
二分法没有收敛,LZ请单步调试之。

使用特权

评论回复
6
gx_huang| | 2011-7-28 20:07 | 只看该作者
我不喜欢复杂的算法,喜欢一个一个比较,绝对不会错。

使用特权

评论回复
7
邪恶猛男| | 2011-7-28 22:18 | 只看该作者
都没入门 好好去二姨家磨练下

使用特权

评论回复
8
cauhorse| | 2011-7-29 01:16 | 只看该作者
本帖最后由 cauhorse 于 2011-7-29 01:20 编辑

楼主啊,给你把代码写完了。用WIN-TC可以直接运行,改一下就能放单片机里使了。

下面是代码文本:
test.rar (957 Bytes)
我把自己都感动得哭了。。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
ming666 + 1 谢谢CAUHORSE真心的指点,我试下 ...
9
xiaotann| | 2011-7-29 08:18 | 只看该作者
25度时最大与最小差1000

使用特权

评论回复
10
ming666|  楼主 | 2011-7-29 09:51 | 只看该作者
楼主啊,给你把代码写完了。用WIN-TC可以直接运行,改一下就能放单片机里使了。

下面是代码文本:
71158
我把自己都感动得哭了。。 ...
cauhorse 发表于 2011-7-29 01:16


谢谢大家,我是还没水平,正在练习中,所谓林子大了什么鸟都有啊,更真诚感谢楼主指明问题及将其示范!

使用特权

评论回复
11
cauhorse| | 2011-7-29 13:17 | 只看该作者
本帖最后由 cauhorse 于 2011-7-29 13:20 编辑

10# ming666
LZ,其实这些代码不重要,关键是对“二分法”的理解。你先前贴出的代码中,至少这一行:
if((tempmax-tempmin)<=2000)
一定是有问题的,其中的两个变量都是数组索引,无论怎么减其差值都不会大于160,结果恒为true。
其他一些问题是编程的习惯,LZ也可以尝试做一些改进。

使用特权

评论回复
12
jack_shine| | 2011-7-29 14:35 | 只看该作者
谢谢大家,我是还没水平,正在练习中,所谓林子大了什么鸟都有啊,更真诚感谢楼主指明问题及将其示范!
ming666 发表于 2011-7-29 09:51
楼主,你就是楼主,怎么感谢起自己了

使用特权

评论回复
13
c126| | 2011-7-29 15:02 | 只看该作者
:dizzy:

使用特权

评论回复
14
邪恶猛男| | 2011-8-12 08:54 | 只看该作者
楼主都消失了,这种不用心 不上心的 就想拿来别人成果 完全就是扯淡

使用特权

评论回复
15
lei_ang| | 2012-6-19 09:46 | 只看该作者
顶八楼!
我一般建表的数据都是AD转后的值,不计数电阻值,直接用AD转后的值去查表,100度内,直接用顺序法查也没什么问题

使用特权

评论回复
16
coody| | 2012-6-19 10:05 | 只看该作者
二分法查找,一般7次就可以查到,确认到度,然后按线性插值计算小数点后一位。很简单的啊。
LZ的程序看不懂。

使用特权

评论回复
17
ailipingkl| | 2012-6-19 14:52 | 只看该作者
学习

使用特权

评论回复
18
xm_smallp| | 2012-8-13 15:42 | 只看该作者
学习啦。正要写此部分代码!!!

使用特权

评论回复
19
zy寻找| | 2014-11-24 21:20 | 只看该作者
coody 发表于 2012-6-19 10:05
二分法查找,一般7次就可以查到,确认到度,然后按线性插值计算小数点后一位。很简单的啊。
LZ的程序看不懂 ...

16楼的COODY前辈,把你的NTC测温程序给我发一份吧!zhangyiyou@126.com,十分感谢。

使用特权

评论回复
20
cnhjb_16| | 2014-11-26 11:27 | 只看该作者
本帖最后由 cnhjb_16 于 2014-11-26 11:42 编辑

我也是新手,做过一个NTC查表程序。没有师傅教,网上也找不到资料,自己琢磨着写的。新手可以参考下,前辈们有空指点一下我。方法可能有点笨,呵呵!温度显示范围0-99.5,最小分辨率0.5,做的表格里面放200个数,0-199(查表后除2,有余显示0.5,无余不显示),先计算好NTC传感器AD转换后,D值与存放在表格中的实际A值的地址的偏差值。程序中,判断D值的范围,补入相应的偏差值。查表,数据处理,LCD显示。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

93

帖子

0

粉丝