热敏电阻采样显示温度
#include <avr/pgmspace.h> #define RS232_DUBEG //开启/关闭 串口调试 /* ATMega328(比如UNO)有三个计时器timer 0-2, 一些延时语句比如delay(), millis() micros() 用的是timer0, 6个PWM输出脚当然也要用这些计时器,它们是这样分配的: #define PWM1_PIN 9 //3PIN PWMOUT #define PWM2_PIN 10 //5PIN PWMOUT #define AD_IN A0 //电路连接方式:+5V----10K上拉电阻----NTC(10K,B3950)----GND #define NANO_LED 13 //NANO板载LED连接13脚 //定义数据传输时间 (ATMega328P运行在16MHz下,一个时钟周期的时间为1/16,000,000s = 1/16,000m s= 1/16us = 62.5ns ,一个nop是62.5ns) unsigned char ucPWM_Value;
const struct NTC_TEMP NTC_Temp_Tab[] PROGMEM = //电路连接方式:+5V----10K上拉电阻----NTC(10K,B3950)----GND {-40,0x3E3},{-39,0x3E1},{-38,0x3DF},{-37,0x3DD},{-36,0x3DA},{-35,0x3D8},{-34,0x3D5},{-33,0x3D3},{-32,0x3D0},{-31,0x3CD}, {-30,0x3CA},{-29,0x3C6},{-28,0x3C3},{-27,0x3BF},{-26,0x3BB},{-25,0x3B8},{-24,0x3B3},{-23,0x3AF},{-22,0x3AA},{-21,0x3A6}, {-20,0x3A1},{-19,0x39C},{-18,0x396},{-17,0x391},{-16,0x38B},{-15,0x385},{-14,0x37F},{-13,0x378},{-12,0x372},{-11,0x36B}, {-10,0x364},{-9 ,0x35C},{-8 ,0x355},{-7 ,0x34D},{-6 ,0x345},{-5 ,0x33D},{-4 ,0x334},{-3 ,0x32C},{-2 ,0x323},{-1 ,0x31A}, {0 ,0x310},{1 ,0x307},{2 ,0x2FD},{3 ,0x2F3},{4 ,0x2E9},{5 ,0x2DF},{6 ,0x2D5},{7 ,0x2CA},{8 ,0x2C0},{9 ,0x2B5}, {10 ,0x2AA},{11 ,0x29F},{12 ,0x294},{13 ,0x289},{14 ,0x27D},{15 ,0x272},{16 ,0x267},{17 ,0x25B},{18 ,0x250},{19 ,0x244}, {20 ,0x239},{21 ,0x22D},{22 ,0x222},{23 ,0x217},{24 ,0x20B},{25 ,0x200},{26 ,0x1F5},{27 ,0x1EA},{28 ,0x1DF},{29 ,0x1D4}, {30 ,0x1C9},{31 ,0x1BE},{32 ,0x1B3},{33 ,0x1A9},{34 ,0x19E},{35 ,0x194},{36 ,0x18A},{37 ,0x180},{38 ,0x176},{39 ,0x16D}, {40 ,0x163},{41 ,0x15A},{42 ,0x151},{43 ,0x148},{44 ,0x13E},{45 ,0x137},{46 ,0x12E},{47 ,0x126},{48 ,0x11E},{49 ,0x116}, {50 ,0x10E},{51 ,0x107},{52 ,0x100},{53 ,0xF8 },{54 ,0xF1 },{55 ,0xEB },{56 ,0xE4 },{57 ,0xDE },{58 ,0xD7 },{59 ,0xD1 }, {60 ,0xCB },{61 ,0xC5 },{62 ,0xC0 },{63 ,0xBA },{64 ,0xB5 },{65 ,0xB0 },{66 ,0xAB },{67 ,0xA6 },{68 ,0xA1 },{69 ,0x9C }, {70 ,0x98 },{71 ,0x93 },{72 ,0x8F },{73 ,0x8B },{74 ,0x87 },{75 ,0x83 },{76 ,0x80 },{77 ,0x7C },{78 ,0x78 },{79 ,0x75 }, {80 ,0x72 },{81 ,0x6E },{82 ,0x6B },{83 ,0x68 },{84 ,0x65 },{85 ,0x62 },{86 ,0x60 },{87 ,0x5D },{88 ,0x5A },{89 ,0x58 }, {90 ,0x55 },{91 ,0x53 },{92 ,0x51 },{93 ,0x4E },{94 ,0x4C },{95 ,0x4A },{96 ,0x48 },{97 ,0x46 },{98 ,0x44 },{99 ,0x42 }, {100,0x41 },{101,0x3F },{102,0x3D },{103,0x3B },{104,0x3A },{105,0x38 },
/********************************************* *********************************************/ char NTC2Temp(unsigned int NTC_AD_Value){ char temp = 0; // -40 --- 105 C for(i = 0; i < sizeof(NTC_Temp_Tab) / (sizeof(NTC_Temp_Tab[0].cTemp) + sizeof(NTC_Temp_Tab[0].uiAD)); i++){ if(pgm_read_word(&NTC_Temp_Tab.uiAD) <= NTC_AD_Value){ temp = pgm_read_byte(&NTC_Temp_Tab.cTemp); /********************************************* *********************************************/ /********************************************* *********************************************/ pinMode(PWM1_PIN,OUTPUT); pinMode(PWM2_PIN,OUTPUT); pinMode(NANO_LED,OUTPUT); MsTimer2::set(1, Timer2Task); // 1ms /********************************************* *********************************************/ static unsigned int ui500msCnt = _500MS_CNT; static unsigned char uc100msCnt = _100MS_CNT; digitalWrite(NANO_LED,0); digitalWrite(NANO_LED,1); uiAD_Value = analogRead(AD_IN); cNTC_Temp = NTC2Temp(uiAD_Value); Serial.print("采样AD值 = 0x"); Serial.print(uiAD_Value,HEX); Serial.print("H; 温度 = "); Serial.print(cNTC_Temp,DEC);
|