zoukankan      html  css  js  c++  java
  • ADC取样

    #include<ioavr.h>
    #include "adcproc.h"
    #include "utils.h"
    #include "globdefs.h"
    
    #define SKIP_SAMPLES 1//ADC采样时忽略样本数
    
    #define BYTE unsigned char
    
    #define ADC_MUX_I 0x00//MUX选择第0通道
    #define ADC_MUX_U 0x01
    #define ADC_MUX_T 0x02
    
    BYTE fADCFlag = 0;
    int iADCData = 0;
    
    void InitADCSystem(void)
    {
      PORTA_PORTA0 = PORTA_PORTA1 = PORTA_PORTA2 = 0; //内部上拉电阻无效,减少干扰
      DDRA_DDA0 = DDRA_DDA1 = DDRA_DDA2 = 0; //输入
      ADMUX_REFS1 = ADMUX_REFS0 = 1; //内部参考电压2.56V
      ADCSRA_ADATE = 0; //单次转换模式
      ADMUX_ADLAR = 0; //结果右对齐
    }
    
    void OpenADCSystem(void)
    {
      ADCSRA_ADEN = 1; //允许ADC转换
      ADCSRA_ADIE = 1; //中断使能
    }
    
    void CloseADCSystem(void)
    {
      ADCSRA_ADEN = 0;
      ADCSRA_ADIE = 0; //关闭ADC中断
    }
    
    void SetADCInput(TMEAS_CHAN channel)
    {
      switch(channel)
      {
      case TMEAS_I_SENSE:
        ADMUX = ADMUX & 0xF0 | ADC_MUX_I; //ADMUX_MUX3=ADMUX_2=ADMUX_1=ADMUX_0=0;
        break;
      case TMEAS_U_SENSE:
        ADMUX = ADMUX & 0xF0 | ADC_MUX_U; //ADMUX_MUX3=ADMUX_2=ADMUX_1=0;ADMUX_0=1;
        break;
      case TMEAS_T_SENSE:
        ADMUX = ADMUX & 0xF0 | ADC_MUX_T; //ADMUX_MUX3=ADMUX_2=ADMUX_0=0;ADMUX_1=1;
        break;
      }
    }
    
    int ADCGetData(BYTE aver)
    {
      int adccode = 0;
      BYTE repeats = (1 << aver) + SKIP_SAMPLES;
      BYTE i = 0;
      fADCFlag = 0;
      
      for(i = 0; i < repeats; i++)
      {
        ADCSRA_ADSC = 1; //开始转换
        while(!fADCFlag)//等待ADC中断
        {
          ;
        }
        if(i > (SKIP_SAMPLES - 1))
        {
          SREG_I = 0;//M8C_DisableGInt;
          adccode += iADCData;
          SREG_I = 1;//M8C_EnableGInt;
        }
        fADCFlag = 0;
      }
      
      adccode >>= aver;
      return (adccode);
    }
    
    #pragma vector=ADC_vect
    __interrupt void ADCConverted(void)
    {
      iADCData = ADC;
      fADCFlag = 1;
    }
  • 相关阅读:
    CCOrbitCamera卡牌翻转效果
    用CCRenderTexture和BlendFunc制作游戏教学时使用的黑色覆盖层
    cocos2d-x触摸分发器原理
    cocos2d-x动作原理
    c++之函数原型
    cocos2d-x调度器原理
    cocos2d-x之MoonWarriors用c++实现
    cocos2d-x回收池原理
    SQL*Net more data to client等待事件
    asynch descriptor resize等待事件
  • 原文地址:https://www.cnblogs.com/ppStudio/p/4209825.html
Copyright © 2011-2022 走看看