⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc.c

📁 简易风盘控器程序 AVR GCC MEGA8
💻 C
字号:
/**************** (c) 2005   佛山菱电 *****************************************
PROJECT  : 简易风盘控制器
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 采样值转换表,温度加 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 采样计数   */
u8 AdFailCnt;             /* A/D 监测计时 5S on 20mS */
u8 AmbientTp;             /* 温度 */
//u8 DefstCnt;              /* 化霜期间及化霜后3分钟内不检测温度传感器故障 */

/*-----------------------------------------------------------------------------
ROUTINE Name : ADC_Get
Description:
Comments:
  每20mS 调用一次
-----------------------------------------------------------------------------*/
void ADC_Get(void)
{
  u8 i;
  u8 j;

  ClrBit(PRR,PRADC);             /* 启动 ADC 电源 */
  DIDR1  = (u8)0x00;             /*  */
  DIDR0  = DIDR0SET;             /* ADC0 Digital Input Disable */

  ADCSRB = ADCSRBSET;            /* 禁止自动触发 */
  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);             /* 关 ADC 电源 */

  //if ((AdCntr > 0) &&
  //   ((u8)((AdvTemp[AdCntr - 1] >= j) ? AdvTemp[AdCntr - 1] - j : j - AdvTemp[AdCntr - 1]) > 20)) {
  //  AdCntr = 0;                  /* 如果两次采样值差值超过20,则重行启动采样*/
  //} else {
    i = AdCntr;
    while ((i > 0) && (j < AdvTemp[i - 1])){    /* 按升序排列 */
      AdvTemp[i] = AdvTemp[i - 1];
      i--;
      AdvTemp[i] = j;
    }

    /* 采样五次 */
    if (++AdCntr >= ADSMPMAX){   /* 同一个通道下一次采样 */
      AdCntr = 0;
      i = AdvTemp[2];

      if ((i < 0x05) || (i >= 0x0E8)){
        /* 化霜期间及化霜后3分钟内不检测温度传感器故障 */
        //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 *************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -