1. 硬件平臺: Arduino UNO(ATMega328P); 2. 編譯器(IDE): Arduino 1.88
3. 電路連接方式:+5V----10K上拉電阻----NTC(10K,B3950)----GND
單片機源程序如下:
- /************************************************************
- Copyright (C), 2019-2019, xxxx Co., Ltd.
- FileName:
- Description: // AD_NTC測試
- Version: // 版本信息:1.0
- Function List: //
-
- ************************************************************/
- // 硬件: Arduino UNO(ATMega328P); 編譯器(IDE): Arduino 1.88
- #include <avr/pgmspace.h>
- #include <MsTimer2.h>
- #define RS232_DUBEG //開啟/關閉 串口調試
- /* ATMega328(比如UNO)有三個計時器timer 0-2, 一些延時語句比如delay(), millis() micros() 用的是timer0,
- 6個PWM輸出腳當然也要用這些計時器,它們是這樣分配的:
- Pins 5 and 6: timer0
- Pins 9 and 10: timer1
- Pins 11 and 3: timer2
- */
- #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)
- #define NOP asm("nop")
- boolean _1msFlg = 0;
- boolean bBlinkSta = 0;
- unsigned int uiAD_Value;
- unsigned char ucPWM_Value;
- char cNTC_Temp = 0;
- struct NTC_TEMP
- {
- char cTemp;
- unsigned int uiAD;
- };
- 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 },
- };
- /*********************************************
- //NTC-溫度轉換
- *********************************************/
- char NTC2Temp(unsigned int NTC_AD_Value)
- {
- unsigned char i;
- 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[i].uiAD) <= NTC_AD_Value)
- {
- temp = pgm_read_byte(&NTC_Temp_Tab[i].cTemp);
- break;
- }
- }
- return(temp);
- }
- /*********************************************
- //TIMER2中斷任務
- *********************************************/
- void Timer2Task(void)
- {
- _1msFlg = 1;
- }
- /*********************************************
- //初始化
- *********************************************/
- void setup()
- {
- #ifdef RS232_DUBEG
- Serial.begin(9600);
- #endif
-
- pinMode(PWM1_PIN,OUTPUT);
- pinMode(PWM2_PIN,OUTPUT);
- pinMode(NANO_LED,OUTPUT);
- pinMode(AD_IN,INPUT);
-
- MsTimer2::set(1, Timer2Task); // 1ms
- MsTimer2::start();
-
-
- }
- /*********************************************
- //主程序
- *********************************************/
- void loop()
- {
- if ( _1msFlg)
- {
- #define _500MS_CNT 500
- #define _100MS_CNT 100
- static unsigned int ui500msCnt = _500MS_CNT;
- static unsigned char uc100msCnt = _100MS_CNT;
- unsigned char i;
-
- _1msFlg = 0;
-
-
- if (--ui500msCnt == 0)
- {
- ui500msCnt = _500MS_CNT;
-
- if (bBlinkSta)
- {
- bBlinkSta = 0;
- digitalWrite(NANO_LED,0);
- }
- else
- {
- bBlinkSta = 1;
- digitalWrite(NANO_LED,1);
- }
-
- uiAD_Value = analogRead(AD_IN);
- //ucPWM_Value = (unsigned char)(uiAD_Value >> 2);
- //analogWrite(PWM1_PIN,ucPWM_Value);
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
AD_NTC.rar
(2.2 KB, 下載次數: 125)
2019-4-12 08:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|