?? adc.c
字號(hào):
/**************** (c) 2005 佛山菱電 *****************************************
PROJECT : 簡(jiǎn)易風(fēng)盤控制器
COMPILER : AVR ICC for m48
MODULE : adc.c
VERSION : 1.0.0
DATE : 2005/12/08
AUTHOR : 朱坤
MODIFICATIONS :
DESCRIPTION : ADC routines
******************************************************************************/
#include "adc.h"
#define ADVALMAX 0x0AB
#define ADVALMIN 0x2A
/* 3470B 采樣值轉(zhuǎn)換表,溫度加 128 偏移 */
const u8 Temp_Tab[]={//98, 99, 100,101,102,103,104,105,106,107,108,109, /* 00-0B*/
//109,110,111,112,112,113,114,114,115,116,116,117, /* 0C-17*/
/*118,118,*/119,119,120,120,121,122,122,123,123,124, /* 18-23*/
124,125,125,126,126,127,127,128,128,129,129,130, /* 24-2F*/
130,131,131,132,132,133,133,133,134,134,135,135, /* 30-3B*/
136,136,137,137,137,138,138,139,139,139,140,140, /* 3C-47*/
141,141,142,142,142,143,143,144,144,144,145,145, /* 48-53*/
146,146,146,147,147,148,148,149,149,149,150,150, /* 54-5F*/
151,151,151,152,152,153,153,153,154,154,155,155, /* 60-6B*/
155,156,156,157,157,157,158,158,159,159,160,160, /* 6C-77*/
160,161,161,162,162,162,163,163,164,164,165,165, /* 78-83*/
166,166,166,167,167,168,168,169,169,170,170,171, /* 84-8F*/
171,171,172,172,173,173,174,174,175,175,176,176}; /* 90-9B*/
//177,178,178,179,179,180,180,181,181,182,183,183, /* 9C-A7*/
//184,184,185,186,186,187,187,188,189,189,190,191, /* A8-B3*/
//192,192,193,194,194,195,196,197,198,198,199,200, /* B4-BF*/
//201,202,203,204,205,206,207,208,209,210,211,212, /* C0-CB*/
//213,214,216,217,218,219,221,222,223,225,226,227,228};
const u8 BitMask[]= {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u8 AdvTemp[ADSMPMAX]; /* 采樣值緩存 */
u8 AdCntr; /* A/D 采樣計(jì)數(shù) */
u8 AdFailCnt; /* A/D 監(jiān)測(cè)計(jì)時(shí) 5S on 20mS */
u8 AmbientTp; /* 溫度 */
//u8 DefstCnt; /* 化霜期間及化霜后3分鐘內(nèi)不檢測(cè)溫度傳感器故障 */
/*-----------------------------------------------------------------------------
ROUTINE Name : ADC_Get
Description:
Comments:
每20mS 調(diào)用一次
-----------------------------------------------------------------------------*/
void ADC_Get(void)
{
u8 i;
u8 j;
ClrBit(PRR,PRADC); /* 啟動(dòng) ADC 電源 */
DIDR1 = (u8)0x00; /* */
DIDR0 = DIDR0SET; /* ADC0 Digital Input Disable */
ADCSRB = ADCSRBSET; /* 禁止自動(dòng)觸發(fā) */
ADCH;
ADMUX = ((u8)(ADMUXSET));
ADCSRA = ADCSRASET; // 8Mhz/32 sampling, ADC on
j = 50;
while (j--);
SetBit(ADCSRA,ADSC);
while (!ValBit(ADCSRA,ADSC)); // wait till end of conversion
AdvTemp[AdCntr] = j = ADCH;
//ClrBit(ADCSRA,ADEN); // shutdown ADC peripheral
//SetBit(PRR,PRADC); /* 關(guān) ADC 電源 */
//if ((AdCntr > 0) &&
// ((u8)((AdvTemp[AdCntr - 1] >= j) ? AdvTemp[AdCntr - 1] - j : j - AdvTemp[AdCntr - 1]) > 20)) {
// AdCntr = 0; /* 如果兩次采樣值差值超過(guò)20,則重行啟動(dòng)采樣*/
//} else {
i = AdCntr;
while ((i > 0) && (j < AdvTemp[i - 1])){ /* 按升序排列 */
AdvTemp[i] = AdvTemp[i - 1];
i--;
AdvTemp[i] = j;
}
/* 采樣五次 */
if (++AdCntr >= ADSMPMAX){ /* 同一個(gè)通道下一次采樣 */
AdCntr = 0;
i = AdvTemp[2];
if ((i < 0x05) || (i >= 0x0E8)){
/* 化霜期間及化霜后3分鐘內(nèi)不檢測(cè)溫度傳感器故障 */
//if (DefstCnt == 0){
if (AdFailCnt++ >= 200) Errorflg |= (u8)(1 << fAmbientErr);
//} else{
// AdFailCnt = 0;
//}
} else {
Errorflg &= (u8)~(1 << fAmbientErr);
AmbientTp = Temp_Tab[((i <= ADVALMIN)? 0 :
((i >= ADVALMAX)? ADVALMAX - ADVALMIN : i - ADVALMIN))];
AdFailCnt = 0;
}
}
//}
}
/*** (c) 2005 佛山菱電 **************************** END OF FILE *************/
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -