اطلاعیه

Collapse
No announcement yet.

ADC در ایکسمگا

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ADC در ایکسمگا

    سلام
    ممکنه به صورت مختصر توضیح بدید ADC در ایکمگا چطوری کار میکنه؟
    فایل های جناب کی نژاد رو دیدم اما نتونستم متوجه بشم.

    مثلا کانال چیه؟ MUX چیه؟ و....

    #2
    پاسخ : ADC در ایکسمگا

    وقت بخیر
    پیشنهاد میکنم مثال جناب کی نژاد رو با دقت همراه با منوال ایسکمگا مطالع کنید و سعی در تغییر پارامترها برا اساس نیازتون کنید !! با چند بار مطالعه بکار گیری آن برایتان اشکار میشود .

    کد:
        #include "avr_compiler.h"
        #include "adc_driver.h"
        #include "KEY_7SEG.h"
    
        volatile unsigned int adc_sample[64];
        volatile bool new_adc=false;
        volatile unsigned char index=0;
    
    
    
    int main( void )
    {
      
         unsigned char DIGITS[6]={0,0,0,0,blank_code,blank_code}; 
         unsigned long temp, temp85; 
         unsigned char i; 
         ADC_CalibrationValues_Load(&ADCA);
         temp85=(SP_ReadCalibrationByte( PROD_SIGNATURES_START + TEMPSENSE1_offset )<<8) 
         + SP_ReadCalibrationByte( PROD_SIGNATURES_START + TEMPSENSE0_offset ) ;
         ADC_ConvMode_and_Resolution_Config(&ADCA, ADC_ConvMode_Unsigned, ADC_RESOLUTION_12BIT_gc);
         ADC_Prescaler_Config(&ADCA, ADC_PRESCALER_DIV512_gc);
         ADC_Reference_Config(&ADCA, ADC_REFSEL_INT1V_gc);
         ADC_TempReference_Enable(&ADCA);
         ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH0,ADC_CH_INPUTMODE_INTERNAL_gc,ADC_DRIVER_CH_GAIN_NONE);
         ADC_Ch_InputMux_Config(&ADCA.CH0, ADC_CH_MUXINT_TEMP_gc, 0);
         ADC_Ch_Interrupts_Config(&ADCA.CH0, ADC_CH_INTMODE_COMPLETE_gc, ADC_CH_INTLVL_LO_gc);
         PMIC.CTRL |= PMIC_LOLVLEX_bm;
         ADC_Enable(&ADCA);
         ADC_Wait_8MHz(&ADCA);
         init_7seg();
         __enable_interrupt();
         show_7seg(DIGITS,0x00,0x00);  
         ADC_Ch_Conversion_Start(&ADCA.CH0);
    
         while(1)
         {  
          if(new_adc&&(index==0))
          {
           new_adc=false; 
           temp=0;
           for(i=0;i<64;i++) temp+=adc_sample[i]; // 64 Samples average
           temp>>=6;      
           temp=((3580U*(temp-200U))/(temp85-200U));
           if(temp<2730U)
           { 
            temp=2730U-temp;
            DIGITS[4]= minus_code;
           }
           else
           { 
            temp-=2730U;
            DIGITS[4]= blank_code;
           }
           for (i=0;i<4;i++)
           {  
            DIGITS[i]=temp%10;
            temp/=10;
           }   
           show_7seg(DIGITS,0x02,0x00);  
          }   
         }  
    //return 0; 
    }
    
        ISR(ADCA_CH0_vect)
        {
          adc_sample[index]=ADC_ResultCh_GetWord(&ADCA.CH0);
         new_adc=true;
         ADC_Ch_Conversion_Start(&ADCA.CH0);
         if(++index==64)index=0;
        }

    دیدگاه

    لطفا صبر کنید...
    X