اطلاعیه

Collapse
No announcement yet.

تاپیک سوالات درباره ADC

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

    #76
    پاسخ : تاپیک سوالات درباره ADC

    متاسفانه در مدهای دیگر هم مشکلات خاصی دیده می شود . پیشنهاد شما برای دقت بیشتر چیست ؟
    مقدار AREFA=3.5V

    دیدگاه


      #77
      پاسخ : تاپیک سوالات درباره ADC

      نوشته اصلی توسط mehrdadkey2
      متاسفانه در مدهای دیگر هم مشکلات خاصی دیده می شود . پیشنهاد شما برای دقت بیشتر چیست ؟
      مقدار AREFA=3.5V
      ببینم avcc شما چقدره؟؟؟
      مقدار vref باید بین 1.1 ولت و avcc-0.6v باشه سریع مدار رو عوض کنید تا به adc آسیب نرسیده
      سعی کنید اون مدار پیشنهادی اتمل رو ببندید(همون فریت بید و خازن ها و سلف)
      از تغذیه مطمئن بشید که پایداره
      در مکان بدون نویز تستش کنید
      من هنوز تست نکردم انشاالله فرصتی بشه منم تست میکنم

      دیدگاه


        #78
        پاسخ : تاپیک سوالات درباره ADC

        عذر میخوام . اصلاح میکنم .
        مقدار AREFA=2.5
        مقدار analog vcc=3.3

        دیدگاه


          #79
          پاسخ : تاپیک سوالات درباره ADC

          برای اطمینان از صحت عملکرد مدار خود می توانید ولتاژی را به ورودی ADC اعمال کنید و همزمان بوسیله ولت متر اندازه گیری کنید و مقدار قرائت شده را بوسیله LCD یا 7segment یا سایر روش ها هم نمایش دهید.
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه


            #80
            پاسخ : تاپیک سوالات درباره ADC

            واقعا از شما متشکرم. قبلا این کار انجام داده ام .متاسفانه همانطور هم که قبلا اشاره کردم مشکل من در کمترین و بیشترین مقدار است

            دیدگاه


              #81
              پاسخ : تاپیک سوالات درباره ADC

              با این که کلاک ADC رو تا حد زیادی پایین اوردم باز هم مشکل پرش داشتم. اما وقتی 8 بیت میکردم مقدار پرش خیلی کم میشد. میکرو xm64a3 و تمام روش های کاهش خطا مثل signed خواندن و diff کردن ورودی و ولتاژ مرجع را VCC/1.6 را امتحاتن کردم ولی باز هم پرش وجود داشت.
              بگذارعشق خاصیت تو باشد نه رابطه خاص تو باکسی
              موفقیت پیش رفتن است نه به نقطه ی پایان رسیدن
              نلسون ماندلا

              دیدگاه


                #82
                پاسخ : تاپیک سوالات درباره ADC

                نوشته اصلی توسط mehrdadkey2
                واقعا از شما متشکرم. قبلا این کار انجام داده ام .متاسفانه همانطور هم که قبلا اشاره کردم مشکل من در کمترین و بیشترین مقدار است
                مقدار حداقل که همانطور که قبلا توضیح دادم در مد مورد استفاده شما صفر نمی شود و این یک مشکل نیست، بلکه خاصیت این مد است. اما در مورد مقدار حداکثر، بطور مشخص با اتصال ولتاژی برابر Vref به ورودی (یا درصدی بیشتر) چه عددی به عنوان خروجی adc قرائت می شود؟ اگر 4250 که قبلا ذکر کردید، حداکثر مقدار نمایش داده شده باشد، مشکلی به لحاظ سخت افزاری یا نرم افزاری وجود دارد که به این ترتیب نمی توان در مورد آن قضاوت کرد.

                نوشته اصلی توسط رضا بابایی
                با این که کلاک ADC رو تا حد زیادی پایین اوردم باز هم مشکل پرش داشتم. اما وقتی 8 بیت میکردم مقدار پرش خیلی کم میشد. میکرو xm64a3 و تمام روش های کاهش خطا مثل signed خواندن و diff کردن ورودی و ولتاژ مرجع را VCC/1.6 را امتحاتن کردم ولی باز هم پرش وجود داشت.
                دقت 4096 قسمت به ازای یک محدوده ورودی 2.5 ولت مقداری در حد 610 میکرو ولت می شود و اگر کوچکترین نویز و تغییراتی در ورودی وجود داشته باشد، منجر به ایجاد تغییر در خروجی adc خواهد شد.
                اوژن: به معنای افکننده و شکست دهنده است
                دانایی، توانایی است-Knowledge is POWER
                برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                دیدگاه


                  #83
                  پاسخ : تاپیک سوالات درباره ADC

                  استاد کی نژاد ، اگر مقدار ADC من بجای 4095 مقدار کمتر مثلا 3800 باشد ، مشکل سخت افزاری است یا نرم افزاری ؟ اگر نرم افزاری است ، لطفا پستهای قبلی منو چک کنید و در صورت امکان مشکل را بگویید. با سپاس فراوان

                  دیدگاه


                    #84
                    پاسخ : تاپیک سوالات درباره ADC

                    اگر ولتاژی برابر با ولتاژ متصل به AREFA به ورودی adc متصل باشد و امپدانس خروجی منبع ولتاژ هم بالا نباشد، مقدار قرائت شده 3800 می تواند نشان دهنده اشکال نرم افزاری باشد. با مراجعه به کدهای شما مشاهده می شود که یکسری عملیات ریاضی روی مقدار قرائت شده انجام داده اید که در مرحله اول توصیه می شود بدون هیچ عملات ریاضی و بصورت مستقیم این ولتاژ را نمایش دهید و نتیجه را اعلام کنید. ضمنا در هنگام نمایش ولتاژ، با ولتمتر و ترجیحا اسیلوسکوپ (برای اطمینان از عدم وجود نوسان روی پین ) ورودی را اندازه گیری کنید.
                    اوژن: به معنای افکننده و شکست دهنده است
                    دانایی، توانایی است-Knowledge is POWER
                    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                    دیدگاه


                      #85
                      پاسخ : تاپیک سوالات درباره ADC

                      با توجه به تصویر زیر ، اگر در خروجی ad620 (پایه 6)، بجای مقاومت 1k مقاومت 68K و یا 100K قرار دهم(یعنی توان را کم کنم) ، مقدار adc من در صورتی که بین پایه های ورودی ، یعنی ( x4-5 و x4-6) مقاومتی قرار ندهم ، مقدار 4095 را نشان خواهد داد. ولی با همان مقاومت 1k در خروجی ، مقدار 3850 را نشان می دهد. حتی با مقاومت 20اهم و دیود زنر در خروجی ، باز هم همین خطا وجود خواهد داشت.


                      کد:
                      Config Adca = Single , Convmode = Unsigned , Resolution = 12bit , Dma = Off , Reference = Arefa , Event_mode = None , Prescaler = 8 , _
                      Ch0_gain = 1 , Ch0_inp = Single_ended , Mux0 = 0 , Ch1_gain = 1 , Ch1_inp = Single_ended , Mux1 = 0 , Ch2_gain = 1 , Ch2_inp = Single_ended , Mux2 = 0 , _
                      Ch3_gain = 1 , Ch3_inp = Single_ended , Mux3 = 0
                      
                        start adca
                        X4_5a6 = Getadc(adca , 0 , 56 )
                        locate 10,10
                        lcd x4_5a6

                      دیدگاه


                        #86
                        پاسخ : تاپیک سوالات درباره ADC

                        این مسئله را در چند پست مختلف مطرح کرده ام و یکبار دیگر بصورت واضح تکرار می کنم. در زمان نمایش عدد 3850 و صرف نظر از ترکیب مدار AD620 و هر بخش دیگری از مدار:

                        1- با قرار دادن ولت متر روی پین PA0 چه ولتاژی قرائت می شود؟

                        2- با قرار دادن ولت متر روی پین PA7 چه ولتاژی قرائت می شود؟
                        اوژن: به معنای افکننده و شکست دهنده است
                        دانایی، توانایی است-Knowledge is POWER
                        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                        دیدگاه


                          #87
                          پاسخ : تاپیک سوالات درباره ADC

                          سلام من دنبال یه ADC هستم که تو رنج 10Mhz باشه ..

                          دیدگاه


                            #88
                            پاسخ : تاپیک سوالات درباره ADC

                            سلام خدمت دوستان
                            من میخام 16 تا ولتاژ رو بخونم و روی SD کارت ذخیره کنم. دو تا از کدهای آقای مهندس کی نژاد رو کمی تغییر دادم که بتونم جواب اولیه رو بگیرم برای 4 تا ولتاژ.
                            خلاصه ی برنامه به این صورته که 128 بار ch0 رو می خونم و هربار که وقفش اجرا میشه ch1 , 2 ,3 رو داخل وقفه می خونم. اعداد رو تو یه بافر ذخیره می کنم که 1024 بایت. هر بار که 128بار وقفه ایجاد شد، new_adc یک میشه و تو برنامه با یک شدنش، بافر رو sd ریخته می شه. این عمل 1000بار تکرار میشه که یه فایل 1مگا بایتی ایجاد بشه. (علت خاصی نداره اینکار، فقط برای چک کردن سرعته)
                            برای چک کردن برنامه از سون سگمنتها استفاده شده. ولتاژها رو می خواهم با رفرنس 3.0ولت خارجی بخونم. تنظیمات اون رو هم کمکم کنین.
                            مشکلی که دارم اینه که بعد از اینکه فایل رو از sd باز می کنم فقط اعداد مربوط به a_ch0 مقدار داره و بقیه کانلها صفر ذخیره شده.
                            لطفا راهنماییم کنید. :job:
                            (اگه کسی هست تو کارم کمکم کنه از خجالتش در میام چون از برنامه عقبم :read


                            کد:
                            // Written by Ozhan KD (www.knowledgeplus.ir)
                            
                            #include "avr_compiler.h"
                            #include "ff.h"
                            
                            #include "cpu_xm_v1.h"
                            #include "spi_xm_v1.h"
                            #include "timer_xm_v1.h"
                            #include "mmc_xm_v1.h"
                            
                            
                            #include "lcd_v1.h"
                            #include "KEY_7SEG.h"
                            #include "adc_driver.h"
                            
                            
                            
                            
                            
                            
                            
                            FRESULT res;
                            unsigned int nbytes;
                            unsigned int ii;
                            unsigned int iii;
                            FATFS fat;
                            FIL file;
                            //#define _MAX_SS=4096;
                            char path[]="0:/Hamed.txt";
                            char buffer[1024]="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
                            unsigned int adc_sample;//[255];
                            
                            unsigned int adc_sample1;
                            
                            unsigned int adc_sample2;
                            
                            unsigned int adc_sample3;
                            
                            volatile bool new_adc=false;
                            volatile unsigned int index=0;
                            //WORDREGISTER(adc_sample_t);
                            extern BYTE CardType;
                            
                            DWORD get_fattime (void)
                            {
                             return	 ((DWORD)(2012 - 1980) << 25)
                            			| ((DWORD)1 << 21)
                            			| ((DWORD)1 << 16)
                            			| ((DWORD)1 << 11)
                            			| ((DWORD)1 << 5)
                            			| ((DWORD)2 >> 1);
                            }
                            
                            
                            void ADC_Wait_32MHz(ADC_t * adc)
                            {
                             	/* Store old prescaler value. */
                             	uint8_t prescaler_val = adc->PRESCALER;
                            
                            	/* Set prescaler value to minimum value. */
                            	adc->PRESCALER = ADC_PRESCALER_DIV8_gc;
                            
                            	/* wait 8*COMMON_MODE_CYCLES for common mode to settle*/
                            	delay_us(8*COMMON_MODE_CYCLES);
                            
                            	/* Set prescaler to old value*/
                            	adc->PRESCALER = prescaler_val;
                            }
                            
                            void ADC_CalibrationValues_Load(ADC_t * adc)
                            {
                            	if(&ADCA == adc){
                            		 /* Get ADCACAL0 from production signature . */
                            		adc->CALL = SP_ReadCalibrationByte( PROD_SIGNATURES_START + ADCACAL0_offset );
                            		adc->CALH = SP_ReadCalibrationByte( PROD_SIGNATURES_START + ADCACAL1_offset );
                            	}else {
                            		/* Get ADCBCAL0 from production signature */
                            		adc->CALL = SP_ReadCalibrationByte( PROD_SIGNATURES_START + ADCBCAL0_offset );
                            		adc->CALH = SP_ReadCalibrationByte( PROD_SIGNATURES_START + ADCBCAL1_offset );
                            	}
                            }
                            
                            uint8_t SP_ReadCalibrationByte( uint8_t index )
                            {
                            	uint8_t result;
                            
                            	/* Load the NVM Command register to read the calibration row. */
                            	NVM_CMD = NVM_CMD_READ_CALIB_ROW_gc;
                             	result = pgm_read_byte(index);
                            
                            	/* Clean up NVM Command register. */
                             	NVM_CMD = NVM_CMD_NO_OPERATION_gc;
                            
                            	return result;
                            }
                            
                            uint16_t ADC_ResultCh_GetWord(ADC_CH_t * adc_ch)
                            {
                            	/* Clear interrupt flag.*/
                            	adc_ch->INTFLAGS = ADC_CH_CHIF_bm;
                            
                            	/* Return result register contents*/
                            	return adc_ch->RES;;
                            }
                            
                            void main()
                            {
                              
                             #define F_CPU 32000000UL
                             OSC.CTRL |= OSC_RC32MEN_bm;
                             while(!(OSC.STATUS & OSC_RC32MRDY_bm));
                             CCP=CCP_IOREG_gc;
                             CLK.CTRL=CLK_SCLKSEL_RC32M_gc;
                             
                             TCD1_INTCTRLA=TC_OVFINTLVL_LO_gc;
                             TCD1_PER=48000;  // overflow time = 1.5 ms
                             TCD1_CTRLA=TC_CLKSEL_DIV1_gc; // Prescaler = 1
                             PMIC_CTRL=PMIC_LOLVLEN_bm;
                             
                             bool valid_card_f=true;
                             PMIC_CTRL=PMIC_LOLVLEN_bm;
                             unsigned char DIGITS[6]={0,0,0,0,0,0};//hamed
                             unsigned char keycode=2;
                             
                            //unsigned long temp85; 
                             //unsigned char ii; 
                             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_SINGLEENDED_gc,
                            	                 ADC_CH_GAIN_1X_gc);
                             ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH1,
                            	                 ADC_CH_INPUTMODE_SINGLEENDED_gc,
                            	                 ADC_CH_GAIN_1X_gc);
                             ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH2,
                            	                 ADC_CH_INPUTMODE_SINGLEENDED_gc,
                            	                 ADC_CH_GAIN_1X_gc);
                             ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH3,
                            	                 ADC_CH_INPUTMODE_SINGLEENDED_gc,
                            	                 ADC_CH_GAIN_1X_gc);
                             
                             ADC_Ch_InputMux_Config(&ADCA.CH0,
                                         ADC_CH_MUXPOS_PIN0_gc, ADC_CH_MUXNEG_PIN0_gc);
                             ADC_Ch_InputMux_Config(&ADCA.CH1,
                                         ADC_CH_MUXPOS_PIN1_gc, ADC_CH_MUXNEG_PIN0_gc);
                             ADC_Ch_InputMux_Config(&ADCA.CH2,
                                         ADC_CH_MUXPOS_PIN2_gc, ADC_CH_MUXNEG_PIN0_gc);
                             ADC_Ch_InputMux_Config(&ADCA.CH3,
                                         ADC_CH_MUXPOS_PIN3_gc, ADC_CH_MUXNEG_PIN0_gc);
                                
                            //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_32MHz(&ADCA);
                             init_7seg();
                             __enable_interrupt();
                             show_7seg(DIGITS,0x00,0x00); 
                             
                            
                             sei();
                             init_7seg();//hamed
                             init_key();//hamed
                             
                             ADC_Ch_Conversion_Start(&ADCA.CH0);
                             ADC_Ch_Conversion_Start(&ADCA.CH1);
                             ADC_Ch_Conversion_Start(&ADCA.CH2);
                             ADC_Ch_Conversion_Start(&ADCA.CH3);
                            
                             while(1){
                              while(keycode!=3){
                               DIGITS[3]=0;
                               DIGITS[4]=0;
                               DIGITS[5]=0;
                              keycode=get_key();
                              DIGITS[4]=keycode;
                              }
                             
                            // LCDInit(); hamed
                             DIGITS[0]=1;
                            // LCDGotoXY(0,0); hamed
                            show_7seg(DIGITS,0x00,0x00);//hamed 
                            while(get_key()==0x03){
                             // initialize MMC interface
                             if(disk_initialize(0))
                             {
                             //hamed LCDStringRam("NoCARD");
                              DIGITS[0]=2;
                               show_7seg(DIGITS,0x00,0x00);
                             valid_card_f=false;
                             }
                             else
                             {
                             switch(CardType)
                             {
                              case(CT_MMC):
                              //hamed LCDStringRam("mmc-V3");
                               DIGITS[1]=3;
                               show_7seg(DIGITS,0x00,0x00);
                              break;
                            
                              case (CT_SD1):
                               DIGITS[1]=4;
                                 show_7seg(DIGITS,0x00,0x00);
                                 //hamed  LCDStringRam("SDC-V1");
                              break;
                            
                              case (CT_SD2):
                               DIGITS[1]=5;
                              show_7seg(DIGITS,0x00,0x00);
                                 //hamed LCDStringRam("SDC-V2");
                              break;
                            
                             case (CT_SDC):
                              DIGITS[1]=6;
                              show_7seg(DIGITS,0x00,0x00);
                                 //hamed LCDStringRam("SDC- ");
                              break;
                            
                             case (CT_BLOCK):
                              DIGITS[1]=7;
                              show_7seg(DIGITS,0x00,0x00);
                                 //hamed LCDStringRam("BLOCK ");
                              valid_card_f=false;
                              break;
                            
                             case (CT_SDHC):
                              DIGITS[1]=8;
                              show_7seg(DIGITS,0x00,0x00);
                                 //hamed LCDStringRam("SDHC ");
                              break;
                            
                             default:
                              DIGITS[1]=9;
                              show_7seg(DIGITS,0x00,0x00);
                                 //hamed LCDStringRam("BLOCK ");
                              valid_card_f=false; }
                             }
                            
                             if(valid_card_f)
                             {
                             //hamed LCDGotoXY(0,1);
                             if ((res=f_mount(0,&fat))==FR_OK)
                             {DIGITS[2]=1;
                              show_7seg(DIGITS,0x00,0x00);
                                 //hamed LCDStringRam("Mount OK");
                              if ((res=f_open(&file,path,FA_CREATE_ALWAYS|FA_WRITE|FA_READ))==FR_OK)
                              {DIGITS[2]=2;
                              show_7seg(DIGITS,0x00,0x00);
                                 //hamed LCDGotoXY(0,2);
                              //hamed  LCDStringRam("File Opened");
                              for(iii=0;iii<1000;iii++){
                             
                             new_adc=false; 
                              
                                  
                              if ((res=f_write(&file,buffer,sizeof(buffer)-1,&nbytes))==FR_OK)
                              {
                              
                              }
                              else{ DIGITS[2]=5; show_7seg(DIGITS,0x00,0x00);}// hamed LCDStringRam("Write Error");
                              }}
                              DIGITS[2]=5;
                               show_7seg(DIGITS,0x00,0x00);
                             f_close(&file);
                             f_mount(0, NULL);
                             }
                             else {DIGITS[2]=6;show_7seg(DIGITS,0x00,0x00);} //hamed LCDStringRam("Mount Error");
                             }
                            }
                             
                            }
                            }
                            
                            // TCD1 overflow interrupt routine
                            
                            #pragma vector= TCD1_OVF_vect  
                            __interrupt void TCD1_overflow(void)
                            {
                             adc_sample=ADC_ResultCh_GetWord(&ADCA.CH0);//adc_sample
                             adc_sample1=ADC_ResultCh_GetWord(&ADCA.CH1);//adc_sample
                             adc_sample2=ADC_ResultCh_GetWord(&ADCA.CH2);//adc_sample
                             adc_sample3=ADC_ResultCh_GetWord(&ADCA.CH3);//adc_sample
                             
                             buffer[8*index]=adc_sample<<8;
                             buffer[8*index+1]=adc_sample;
                             
                             buffer[8*index+2]=adc_sample1<<8;
                             buffer[8*index+3]=adc_sample1;
                             
                             buffer[8*index+4]=adc_sample2<<8;
                             buffer[8*index+5]=adc_sample2;
                             
                             buffer[8*index+6]=adc_sample3<<8;
                             buffer[8*index+7]=adc_sample3;
                             
                             if(++index==128){index=0;new_adc=true;};
                            ADC_Ch_Conversion_Start(&ADCA.CH0);
                            ADC_Ch_Conversion_Start(&ADCA.CH1);
                            ADC_Ch_Conversion_Start(&ADCA.CH2);
                            ADC_Ch_Conversion_Start(&ADCA.CH3);
                            
                             
                            }


                            دیدگاه


                              #89
                              پاسخ : تاپیک سوالات درباره ADC

                              کدهای مختلف که قبلا قرار داده شده در برنامه شما با هم ترکیب شده و بنابراین یکسری موارد اضافی و تا حدی نادرست در برنامه قابل مشاهده است. با فرض تنظیم صحیح برای CSTACK، یکی از موارد این است که عملیات خواندن اولیه وضعیت mmc/SDC را در یک while قرار داده اید. در حالی که این عملیات کافی است یک بار انجام شود. همچنین new_adc در برنامه نقش خاصی ندارد و نوشتن در SDC ربطی به این flag ندارد و بنابراین توضیحات شما با عملکرد آن منطبق نیست. در این رابطه پیشنهاد می شود کل عملیات را از داخل

                              کد:
                              while(get_key()==0x03){


                              بردارید و نوشتن در SDC را به true شدن flag مذکور وابسته کنید.
                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه


                                #90
                                پاسخ : تاپیک سوالات درباره ADC

                                با سلام بر همه اساتید
                                من چند سوال در مورد ADC دارم که با اجازتون همین جا مطرح میکنم:
                                در دیتاشیت سری A، عکس زیر برای حالت sigled ended و unsigned آورده شده است:



                                یعنی در این حالت تفاضل ولتاژ ورودی با Vref/2-DelataV در خروجی نشان داده میشه؟ اگر ولتاژ ورودی صفر اعمال کنیم، باید در خروجی -(Vref/2-DelataV ) ، (منفی عبارت Vref/2-DelataV ) نشون داده بشه،درسته ؟ یا من اشتباه میکنم؟ ولی در عمل وقتی ورودی صفر هست ولتاژ 0.14 رو میخونه. شکل زیر هم در این ارتباط نشان داده شده است:


                                و این شکل میگه وقتی ورودی صفر باشه، باید ولتاژ Vref/2-DelataV در خروجی باشه. اگر ولتاژ رفرنس 1 ولت باشه، DeltaV طبق گفته دیتاشیت حدودا برابر 0.05*Verf خواهد بود که میشه 0.05 ولت. پس خروجی باید حدود 0.45 باشه که نیست. مشکل کجاست دوستان؟

                                سوال دوم مربوط میشه به خوندن مقادیر کالیبراسیون ADC و ریختن اونها در رجیسترای کالیبراسیون ADC هست. مقادیر کالیبراسیون ADC طبق گفه دیتاشیت در رجیسترهای ADCACAL0 و ADCACAL1 قرار داره ولی نتونستم از این رجیسترها بخونم. میشه راهنماییم کنین؟

                                سوال آخرم در مورد آفست ADC هست. چطور میتونم مقدار آفست ADC رو بدست بیارم؟
                                با تشکر از همه اساتید.

                                دیدگاه

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