اطلاعیه

Collapse
No announcement yet.

مشکل با دستور read-adc

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

    مشکل با دستور read-adc

    آقا من یک مشکل دارم
    توی برنامه ای که نوشتم وقتی به دستور read_adc میرسه دیگه متوقف میشه
    یعنی میخونه ها ولی نمیدونم چرا ادامه نمیده-
    یعنی ممکنه مشکل از هدر adc.h باشه؟اگر هدر سالم تست شده دارید برام بزارید
    ممنونم میشم کمکم کنید

    #2
    پاسخ : مشکل با دستور read-adc

    سلام
    من از این استفاده می کنم:
    کد:
    /* ----------------------------------------------------------------------------
    library name :pio.h - by this library you can work with at91sam family ADC without
    any long statment .
    this library is provide by 1NAFAR (at91sam7x645@gmail.com) for at91sam series 
    you can edit , remove & change all parts af that .also you can download other 
    library for other atmel & nxp products (AT91-LPC series)from WWW.IRANMICRO.IR 
    you can access to descriptions ADC Resistors Control in PMM 3 magazine . for 
    more information please visit : www.iranmicro.ir/forum/forumdisplay.php?f=221
    */
    #ifndef adc_INCLUDED_
    #define adc_INCLUDED_
    
    void config_adc(char adc);
    	unsigned int adc_data;	
    void start_adc(void);
    void config_adc(char adc)
    {
    *AT91C_ADC_CR = AT91C_ADC_SWRST;                 
    *AT91C_ADC_CHER = (adc);          
    *AT91C_ADC_MR = 0x0f1f3f00;			
    *AT91C_ADC_IDR = 0xffffffff;	
    }
    void start_adc(void){
    *AT91C_ADC_CR = AT91C_ADC_START; 
    } 
    unsigned int read_adc(char channel)	
    {
    switch (channel)
    {
    	case 0:
    	
    		  while ((*AT91C_ADC_SR & AT91C_ADC_EOC0) == 0); 	
    	adc_data = (unsigned int) *AT91C_ADC_CDR0 & AT91C_ADC_DATA;
    		
    break;
    		
    	case 1:
    	
    		  while ((*AT91C_ADC_SR & AT91C_ADC_EOC1) == 0); 		 
    	adc_data = (unsigned int) *AT91C_ADC_CDR1 & AT91C_ADC_DATA;
    	break;
    		case 2:
    	
    		  while ((*AT91C_ADC_SR & AT91C_ADC_EOC2) == 0); 		 
    	adc_data = (unsigned int) *AT91C_ADC_CDR2 & AT91C_ADC_DATA;
    	
    	break;
    	
    	case 3:
    	
    		  while ((*AT91C_ADC_SR & AT91C_ADC_EOC3) == 0); 	 
    	adc_data = (unsigned int) *AT91C_ADC_CDR3 & AT91C_ADC_DATA;
    	
    	break;
    		case 4:
    	
    		  while ((*AT91C_ADC_SR & AT91C_ADC_EOC4) == 0); 	
    	adc_data = (unsigned int) *AT91C_ADC_CDR4 & AT91C_ADC_DATA;
    		
    	 break;
    
    	case 5:
    	
    		  while ((*AT91C_ADC_SR & AT91C_ADC_EOC5) == 0); 	 
    	adc_data = (unsigned int) *AT91C_ADC_CDR5 & AT91C_ADC_DATA;
    
    	break;
    		case 6:
    	
    		  while ((*AT91C_ADC_SR & AT91C_ADC_EOC6) == 0); 	
    	adc_data = (unsigned int) *AT91C_ADC_CDR6 & AT91C_ADC_DATA;
    	
    	break;
    
    	case 7:
    	
    		  while ((*AT91C_ADC_SR & AT91C_ADC_EOC7) == 0); 		 
    	adc_data = (unsigned int) *AT91C_ADC_CDR7 & AT91C_ADC_DATA;
    	break;
    
    }
    	return(adc_data);	
    } 
    
    
    
    #endif
    من ازش استفاده کردم به درستی کار می کرد.
    لطفا اگه میشه برنامه ات رو بذار ببینیم چی چی نوشتی. :biggrin:

    دیدگاه


      #3
      پاسخ : مشکل با دستور read-adc

      داداش من از این سر در نمیارم
      من با AT91SAM7X256 کار میکنم-
      با برنامه keil
      هدر مطمئن سراغ نداری؟؟؟
      ممنون

      دیدگاه


        #4
        پاسخ : مشکل با دستور read-adc

        برید به سایت www.armcenter.org یه سر بزنید تو قسمت آموزش ها هم آموزش هست هم تو قسمت پروژه ها چندتا پروژه خوب و باحال واسه adc داره.
        www. a r m c e n t e r. o r g

        دیدگاه


          #5
          پاسخ : مشکل با دستور read-adc

          اداش من از این سر در نمیارم
          من با AT91SAM7X256 کار میکنم-
          با برنامه keil
          هدر مطمئن سراغ نداری؟؟؟
          ممنون
          داداش مطمئنه.این هدر برای همه میکروهای سری at91sam7 کار میکنه.
          روش استفادشم اینطوریه:
          بعد ازinclude کردن هدر باید اول تو main اینجوری نویسی:
          config_adc(x);
          x هم آدرس کاناله مثلا برای کانال 3 باید بجای x عدد 0x4 قرار بدی.فقط هواست باشه قبلا پایه های ورودی adc رو به عنوان خروجی پیکر بندی نکرده باشی.
          قبل از استفاده از دستور read_adc باید دستور
          start_adc();
          را وارد کنید.
          یعنی برای هردفه خوندن adc باید start_adc رو اجرا کنید.
          من فقط همین کارا رو کردم جواب داد.داداشششششششششش.
          برای فراگیری اصولی arm بهتره به همون سایتی که حامد جان گفتن یه سری بزنید.خیلی مفیده! داداششششششششششش.
          تازه یه غلط املایی هم تو این پست دارم.اگه پیدا کردی!؟! :biggrin:

          موفق باش!داداش!

          دیدگاه

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