اطلاعیه

Collapse
No announcement yet.

مشکل کد خواندن ADC در lpc17xx

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

    مشکل کد خواندن ADC در lpc17xx

    سلام.
    ببخشید چرا تو این کد هیچ وقت خوندن ADC تموم نمیشه ؟ یعنی هیچ وقت بیت DONE برابر 1 نمیشه ؟

    کد:
    #include <lpc17xx.h>
    
    int ReadADC();
    int adcVal;
    int main()
    {
    	LPC_PINCON->PINSEL1 |= (1<<14);
    
    	LPC_SC->PCONP |= (1<<12);
    	LPC_ADC->ADCR |= (0<<1);
    	LPC_ADC->ADCR |= (0<<8);
    	LPC_ADC->ADCR |= (0<<21);
    
    	//LPC_SC->PCLKSEL0 |= (1<<24);
    	while(1)
    	{
    		adcVal = ReadADC();
    	}
    	return 0;
    }
    
    int ReadADC()
    {
    	int result;
    	
    	LPC_ADC->ADCR |= (1<<24);
    	
    	while ((LPC_ADC->ADGDR & 0x80000000) == 0);
    	result = LPC_ADC->ADDR0;
    	return result;
    }
    هرچی چکش میکنم مشکلش رو پیدا نمیکنم. ممنون میشم اگه کسی راهنمایی کنه :redface:
    غفلت از يار, گرفتار شدن هم داد
    از شما دور شدن, زار شدن هم دارد
    هرکه از چشم بي افتاد, محلش ندهند
    عبد آلوده شدن, خوار شدن هم دارد
    عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...

    #2
    پاسخ : مشکل کد خواندن ADC در lpc17xx

    من از وقفه ADC استفاده کردم و برنامه من کار میکنه. از این استفاده کن بهتره

    کد:
    /******************************************************************
    mr.homsyon
    Voltmetr 0-3.3V
    ADC INT CH5
    ******************************************************************/
    #include <lpc17xx.h>
    #include <stdio.h>
    
    #define LCD_LPC1768    
    #define LCD_PORT_2
    #define LCD_RS   0
    #define LCD_RW   1
    #define LCD_E   2
    #define LCD_DB4  4
    #define LCD_DB5  5
    #define LCD_DB6  6
    #define LCD_DB7  7
    #include <lcd.H>
    
    delay(){
    	int d;
    	for(d=0;d<300000;d++);
    }
    
    void ADC_IRQHandler(){	
    	int a;
    	char buf[16];
    	float v;
    	a = (LPC_ADC->ADGDR >> 4 & 0xFFF);
    	v = (a * 3.3) / 4096;
    	sprintf(buf,"Voltage: %4.3f",v);
    	lcd_gotoxy(1,1);
    	lcd_putsf(buf);
    	LPC_ADC->ADCR |= (1 << 24);
    }	 
    
    main(){
    
    	SystemInit();
    	lcd_init();
    	lcd_clear();
    
    	LPC_PINCON->PINSEL3 |= (3UL<<30);       
    	LPC_SC->PCONP |= (1 << 12);
    	LPC_ADC->ADCR |= ((1 << 5) | 				 // channel number 
    					 (4 << 8) | 			 				 // ADC clock is 25MHz/5 
    					 (1 << 21));        // Enable ADC
    	LPC_ADC->ADINTEN |= 0x80;      // Enable ADC Interrupt 
    	NVIC_EnableIRQ(ADC_IRQn);
    	LPC_ADC->ADCR |= (1 << 24);
    	while(1){      
    		}
    }

    دیدگاه


      #3
      پاسخ : مشکل کد خواندن ADC در lpc17xx

      شما که دارید دائم ADC رو میخونید.اونم بدون قید و شرطی

      دیدگاه


        #4
        پاسخ : مشکل کد خواندن ADC در lpc17xx

        آره ولی این برنامه رو همین جوری واسه تست نوشته بودم
        من بیشتر از CMSIS استفاده می کنم زیاد با رجیستر های ADC خودتون رو خسته نکنید
        کد:
        #include <lpc17xx.h>
        #include "LPC17xx_pinsel.h"
        #include "LPC17xx_adc.h"
        #include <stdio.h>
        
        #define LCD_LPC1768
        #define LCD_PORT_2
        #define LCD_RS   0
        #define LCD_RW   1 
        #define LCD_E    2
        #define LCD_DB4   4  
        #define LCD_DB5   5 
        #define LCD_DB6   6
        #define LCD_DB7   7
        #include "lcd.h"
        
        void Delay(void){
        	int wait;
        	for(wait=0;wait<5000000;wait++);
        }
        
        int main(void){
        	PINSEL_CFG_Type	PinCfg;
        	int adc5;
        	float v;
        	char lcd1[1];
        	
        	PinCfg.Portnum=1;
        	PinCfg.OpenDrain=0;
        	PinCfg.Pinnum=31;
        	PinCfg.Funcnum=3;
        	PINSEL_ConfigPin(&PinCfg);
        	
        	
        	ADC_Init(LPC_ADC,180000);
        	ADC_ChannelCmd (LPC_ADC,ADC_CHANNEL_5,ENABLE);
        	Delay();
        	lcd_init();
        	lcd_init();
        	lcd_init();
        	lcd_clear();
        	while(1){
        		ADC_StartCmd(LPC_ADC,ADC_START_NOW);
        		while(!(ADC_ChannelGetStatus(LPC_ADC,ADC_CHANNEL_5,ADC_DATA_DONE)));
        		adc5=ADC_ChannelGetData(LPC_ADC,5);
        		
        		v=(adc5*3.3)/4095;
        		sprintf(lcd1,"Vin: %1.2f V  ",v);
        		
        		lcd_gotoxy(0,0);
        		lcd_putsf(lcd1);
        		
        	}
        }

        دیدگاه


          #5
          پاسخ : مشکل کد خواندن ADC در lpc17xx

          نوشته اصلی توسط Homayon
          آره ولی این برنامه رو همین جوری واسه تست نوشته بودم
          من بیشتر از CMSIS استفاده می کنم زیاد با رجیستر های ADC خودتون رو خسته نکنید
          کد:
          #include <lpc17xx.h>
          کد:
          
          
          نه با شما نبودم.مشکل برنامه اول را نوشتم که میگه هیچ وقت تمام نمیشه

          دیدگاه


            #6
            پاسخ : مشکل کد خواندن ADC در lpc17xx

            نوشته اصلی توسط arvin2009
            شما که دارید دائم ADC رو میخونید.اونم بدون قید و شرطی
            ببخشید میشه بیشتر توضیح بدید ؟ کانفیگش کردم رو سعی کرد از رو دیتاشیت انجام بدم دیگه :read:
            غفلت از يار, گرفتار شدن هم داد
            از شما دور شدن, زار شدن هم دارد
            هرکه از چشم بي افتاد, محلش ندهند
            عبد آلوده شدن, خوار شدن هم دارد
            عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...

            دیدگاه


              #7
              پاسخ : مشکل کد خواندن ADC در lpc17xx

              نوشته اصلی توسط Homayon
              من از وقفه ADC استفاده کردم و برنامه من کار میکنه. از این استفاده کن بهتره

              کد:
              /******************************************************************
              mr.homsyon
              Voltmetr 0-3.3V
              ADC INT CH5
              ******************************************************************/
              #include <lpc17xx.h>
              #include <stdio.h>
              
              #define LCD_LPC1768    
              #define LCD_PORT_2
              #define LCD_RS   0
              #define LCD_RW   1
              #define LCD_E   2
              #define LCD_DB4  4
              #define LCD_DB5  5
              #define LCD_DB6  6
              #define LCD_DB7  7
              #include <lcd.H>
              
              delay(){
              	int d;
              	for(d=0;d<300000;d++);
              }
              
              void ADC_IRQHandler(){	
              	int a;
              	char buf[16];
              	float v;
              	a = (LPC_ADC->ADGDR >> 4 & 0xFFF);
              	v = (a * 3.3) / 4096;
              	sprintf(buf,"Voltage: %4.3f",v);
              	lcd_gotoxy(1,1);
              	lcd_putsf(buf);
              	LPC_ADC->ADCR |= (1 << 24);
              }	 
              
              main(){
              
              	SystemInit();
              	lcd_init();
              	lcd_clear();
              
              	LPC_PINCON->PINSEL3 |= (3UL<<30);       
              	LPC_SC->PCONP |= (1 << 12);
              	LPC_ADC->ADCR |= ((1 << 5) | 				 // channel number 
              					 (4 << 8) | 			 				 // ADC clock is 25MHz/5 
              					 (1 << 21));        // Enable ADC
              	LPC_ADC->ADINTEN |= 0x80;      // Enable ADC Interrupt 
              	NVIC_EnableIRQ(ADC_IRQn);
              	LPC_ADC->ADCR |= (1 << 24);
              	while(1){      
              		}
              }
              ممنون. ولی چون تازه شروع کردم میخام با ریجستر ها بیشتر آشنا شم. :smile:
              غفلت از يار, گرفتار شدن هم داد
              از شما دور شدن, زار شدن هم دارد
              هرکه از چشم بي افتاد, محلش ندهند
              عبد آلوده شدن, خوار شدن هم دارد
              عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...

              دیدگاه


                #8
                پاسخ : مشکل کد خواندن ADC در lpc17xx

                عحب اشتباهی کردم . اصلا حواسم نبود دارم صفرو شیفت میدم :redface:
                غفلت از يار, گرفتار شدن هم داد
                از شما دور شدن, زار شدن هم دارد
                هرکه از چشم بي افتاد, محلش ندهند
                عبد آلوده شدن, خوار شدن هم دارد
                عيب از ماست, که هر سال نمي بينيمت چشم بيمار شده, تار شدن هم دارد ...

                دیدگاه

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