打印
[家电应用]

大家好,我是个新手,请问我采集NTC平均值后是怎样读表...

[复制链接]
1095|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
RS18942401471|  楼主 | 2017-3-13 10:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
NTC, AD, dc, TE, ADC
const uchar code TempValueTable[] = {                                        //NTC上拉电阻为20K,NTC接地,这个是转换过的ADC值

        0xe3,        // 0.00                           165.1000
        0xe2,        // 1.00                           156.8085
        0xe0,        // 2.00                           148.9771
        0xdf,        // 3.00                           141.5792
        0xde,        // 4.00                          134.5901
        0xdc,        // 5.00                           127.9859
        0xdb,        // 6.00                    121.7443
        0xd9,        // 7.00                     115.8441
        0xd7,        // 8.00                    110.2652
        0xd6,        // 9.00                     104.9888
        0xd4,        // 10.00                99.4589
        0xd2,        // 11.00                94.8197
        0xd0,        // 12.00                90.4228
        0xcf,        // 13.00                86.2542
        0xcd,        // 14.00                82.3008
        0xcb,        // 15.00                78.5505
        0xc9,        // 16.00                74.9916
        0xc7,        // 17.00                71.6135
        0xc5,        // 18.00                68.4060
        0xc3,        // 19.00                65.3595
        0xc1,        // 20.00                62.4653
        0xbf,        // 21.00                59.7148
        0xbc,        // 22.00                57.1002
        0xba,        // 23.00                54.6141
        0xb8,        // 24.00                52.2496
        0xb6,        // 25.00                50.0000
        0xb3,        // 26.00                47.8592
        0xb1,        // 27.00                45.8214
        0xaf,        // 28.00                43.8811
        0xac,        // 29.00                42.0331
        0xaa,        // 30.00                40.2726
        0xa7,        // 31.00                38.5950
        0xa5,        // 32.00                36.9961
        0xa3,        // 33.00                35.4716
        0xa0,        // 34.00                34.0179
        0x9e,        // 35.00                32.6312
        0x9b,        // 36.00                31.3081
        0x99,        // 37.00                30.0455
        0x96,        // 38.00                28.8402
        0x94,        // 39.00                27.6894
        0x91,        // 40.00                26.5903
        0x8f,        // 41.00                25.5404
        0x8c,        // 42.00                24.5372
        0x89,        // 43.00                23.5785
        0x87,        // 44.00                22.6620
        0x84,        // 45.00                21.7857
        0x82,        // 46.00                20.9476
        0x7f,        // 47.00                20.1459
        0x7d,        // 48.00                19.3788
        0x7b,        // 49.00                18.6448
        0x78,        // 50.00                17.9421
        0x76,        // 51.00                17.2693
        0x73,        // 52.00                16.6251
        0x71,        // 53.00                16.0080
        0x6f,        // 54.00                15.4167
        0x6c,        // 55.00                14.8502
        0x6a,        // 56.00                14.3072
        0x68,        // 57.00                13.7867
        0x65,        // 58.00                13.2876
        0x63,        // 59.00                12.8090
        0x61,        // 60.00                12.3498
        0x5f,        // 61.00                11.9093
        0x5d,        // 62.00                11.4866
        0x5a,        // 63.00                11.0809
        0x58,        // 64.00                10.6914
        0x56,        // 65.00                10.3174
        0x54,        // 66.00                9.9583
        0x52,        // 67.00                9.6133
        0x50,        // 68.00                9.2819
        0x4e,        // 69.00                8.9634
        0x4d,        // 70.00                8.6573
        0x4b,        // 71.00                8.3631
        0x49,        // 72.00                8.0802
        0x47,        // 73.00                7.8082
        0x45,        // 74.00                7.5466
        0x44,        // 75.00                7.2950
        0x42,        // 76.00                7.0528
        0x40,        // 77.00                6.8198
        0x3f,        // 78.00                6.5956
        0x3d,        // 79.00                6.3797
        0x3c,        // 80.00                6.1719
        0x3a,        // 81.00                5.9717
        0x39,        // 82.00                5.7790
        0x37,        // 83.00                5.5933
        0x36,        // 84.00                5.4144
        0x34,        // 85.00                5.2420
        0x33,        // 86.00                5.0759
        0x32,        // 87.00                4.9158
        0x31,        // 88.00                4.7614
        0x2f,        // 89.00                4.6125
        0x2e,        // 90.00                4.4689
        0x2d,        // 91.00                4.3305
        0x2c,        // 92.00                4.1969
        0x2b,        // 93.00                4.0680
        0x29,        // 94.00                3.9436
        0x28,        // 95.00                3.8236
        0x27,        // 96.00                3.7078
        0x26,        // 97.00                3.5959
        0x25,        // 98.00                3.4879
        0x24,        // 99.00                3.3836
        0x23        // 100.00                3.2828

};



void AD_filter(void)
{
        uchar i;
        if(AD_bit0 == 1)
        {
                for(i = 0;i < 10;i++)
                AD_sum = AD_sum + AD_DATA[i];       
                for(i = 1;i < 10; i++)                       
                if(AD_DATA[0] < AD_DATA[i])               
                AD_DATA[0] = AD_DATA[i];               
                for(i = 2;i < 8;i++)                       
                if(AD_DATA[1] > AD_DATA[i])       
                AD_DATA[1] = AD_DATA[i];       
                AD_max_min = AD_DATA[0]+AD_DATA[1];       
                AD_sum = AD_sum-AD_max_min;       
                AD_sum >>= 3;                        //求平均值       
                AD_Value = (uchar)(AD_sum); //取低字节数据
               
                AD_bit0 = 0;               
                AD_counter0 = 0;
                AD_sum = 0;  
                ADCON0 |=  ~ADC_Start; //         重新启动
        }
}
沙发
kmnl| | 2017-3-14 11:47 | 只看该作者
很多种做法,可以二分查找,可以直接比较等

使用特权

评论回复
板凳
Harvard| | 2017-3-19 16:39 | 只看该作者
adc值 让编译器去计算好了 .自己直接输入电阻值呢....

使用特权

评论回复
地板
Harvard| | 2017-3-19 16:41 | 只看该作者

#define _GETAD(Rt) ( (uint16)( (Rt *1024UL)/(20000UL + Rt)))

#if NTC_TYPE == NTC_NTSA0103F
static uint16 RtADVal[] PROGMEM =
{
        //-40
   _GETAD( 195650),  _GETAD( 148170),  _GETAD( 113340), _GETAD(87560),  _GETAD(68240),
   _GETAD( 53650),   _GETAD( 42510),   _GETAD( 33890),  _GETAD(27220),  _GETAD(22021),
   _GETAD( 17926),   _GETAD( 14674),   _GETAD( 12081),  _GETAD(10000),  _GETAD(8315),
   _GETAD( 6948),    _GETAD( 5834),    _GETAD( 4917),   _GETAD(4161),   _GETAD(3535),
   _GETAD( 3014),    _GETAD( 2586),    _GETAD( 2228),   _GETAD(1925),   _GETAD(1669),
   _GETAD( 1452),    _GETAD( 1268),    _GETAD( 1110),   _GETAD(974),    _GETAD(858),
   _GETAD( 758),     _GETAD( 671),     _GETAD( 596),    _GETAD(531)//125ceilsis
};
#elif NTC_TYPE == NTC_MF52
static uint16 RtADVal[] PROGMEM =
{
        //-40                         //-35                                //-30                        //-25                                  //-20
   _GETAD( 235830),  _GETAD( 173940),  _GETAD( 129916), _GETAD(98180),  _GETAD(75021),
   _GETAD( 57926),   _GETAD( 45168),   _GETAD( 35548),  _GETAD(28223),  _GETAD(22594),//5
   _GETAD( 18231),   _GETAD( 14820),   _GETAD( 12133),  _GETAD(10000),  _GETAD(8294), //30
   _GETAD( 6921),    _GETAD( 5809),    _GETAD( 4903),   _GETAD(4160),   _GETAD(3547), //55
   _GETAD( 3039),    _GETAD( 2615),    _GETAD( 2261),   _GETAD(1962),   _GETAD(1710), //80
   _GETAD( 1496),    _GETAD( 1314),    _GETAD( 1158),   _GETAD(1024),    _GETAD(908), //105
   _GETAD( 808),     _GETAD( 721),     _GETAD( 646),    _GETAD(580)//125ceilsis                  //130

};
#endif


#undef         _GETAD

使用特权

评论回复
5
RS18942401471|  楼主 | 2017-3-27 16:33 | 只看该作者
我想要直接读表的,就是从0-99读出来就可以了,不知道这样写对吗?
  uchar x;
if((AD_Value < 0x23)&&(AD_Value > 0xe3))    //
                                                {        for(x = 0; x < 100; x++)
                                                        {        if(AD_Value > TempValueTable[x])
                                                                        break;
                                                        }
                                                        NTC_Temp = x ;  //输出显示
                                                     }

                                                }
                                                else
                                                        NTC_Temp = 0;
                                                             }

使用特权

评论回复
6
Harvard| | 2017-3-27 23:50 | 只看该作者
看我的就可以了 5度一个表格 没必要每度一个表格

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝