NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3748 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 8 از 8

موضوع: سوال در مورد راه اندازی 7 عدد ADC

  1. #1
    کاربر فعال soodi آواتار ها
    تاریخ عضویت
    Jun 2010
    نام
    مسعود محمدی
    نوشته ها
    264
    تشکر
    111
    تشکر شده 296 بار در 138 پست

    Gadid سوال در مورد راه اندازی 7 عدد ADC

    سلام

    ببخشید
    من میخام از 7 عدد ADC همزمان استفاده کنم
    باید چیکار کنم ؟
    این برنامم برای 4 تا کانال ولی فقط مقدار کانال 1 رو نشون میده و بقیه کانال ها 0 هست !!!

    کد:
    #include <LPC17xx.H>
    #include <stdio.H>
    #include <uart.c>
    
    unsigned short ADC_Read(unsigned char channel)
    {
     unsigned int i;
     //-----------------------------
     LPC_PINCON->PINSEL1 = 1<< 14; // p0.24 select as ADC0.0
     LPC_PINCON->PINSEL1 <<= (channel*2); //select AD0.0 to AD0.3 pin depend channel nomber
         
     LPC_SC->PCONP |= (1 << 12);  // Enable power to AD block 
     LPC_ADC->ADCR |= 1<<channel; //select AD0.0 TO AD0.3 depend adc channel nomber
     LPC_ADC->ADCR |= 0x0100;     //      ADCLK is 12.5 MHz
     //LPC_ADC->ADCR |= 0x10000;    // BURST bit   1 << 16
     LPC_ADC->ADCR |= 0x200000;   //Power up,    1 << 21
     //LPC_ADC->ADCR |= 0x08000000; //Start conversion on a falling edge on the selected CAP/MAT signal.
                                    // 1 << 27
     //-----------------------------
     LPC_ADC->ADCR |= 0x01000000; // Start A/D Conversion , When the BURST bit is 0  
      
     do  
         {
               switch (channel)
           {
              case 0:
                i = LPC_ADC->ADDR0; // Read A/D Data Register
                break;
              case 1:
                i = LPC_ADC->ADDR1; // Read A/D Data Register
                break;
              case 2:
                i = LPC_ADC->ADDR2; // Read A/D Data Register
                break;
              case 3:
                i = LPC_ADC->ADDR3; // Read A/D Data Register
                break;
           }
     } while ((LPC_ADC->ADGDR & 0x80000000) == 0); // Wait for end of A/D Conversion
     return (i >> 4) & 0x0FFF; // bit 4:15 is 10 bit AD value
    }
    
    void delay (uint32_t Time)
    {
        uint32_t i;
        
        i = 0;
        while (Time--) {
            for (i = 0; i < 5000; i++);
        }
    }
    
    #define family_lpc17xx
    #define TFTLCD_DATAPORT_1
    #define TFTLCD_DATAPORT_OFFSET 14
    #define TFTLCD_CONTROLPORT_2
    
    #define TFTLCD_RST    3
    #define TFTLCD_RS   5
    #define TFTLCD_CS      4        
    #define TFTLCD_RD     7
    #define TFTLCD_WR      6
    #define PORTRAIT
    #include <tftlcd_functions.h>
    
    int main()
    {
        
      char a0[100];
        char a1[100];
        char a2[100];
        char a3[100];
        
    SystemInit();    
    UART2_Init();    
    tftlcd_init();
    
    while (1) {
          UART2_SendString("ADC0 Read:");
        UART2_SendChar(ADC_Read(0));
            new_line();
            UART2_SendString("ADC1 Read:");
        UART2_SendChar(ADC_Read(1));
            new_line();
            UART2_SendString("ADC2 Read:");
        UART2_SendChar(ADC_Read(2));
            new_line();
            UART2_SendString("ADC3 Read:");
        UART2_SendChar(ADC_Read(3));
            new_line();
        tftlcd_clear();
          sprintf(a0," %i",ADC_Read(0));
        tftlcd_gotoxy(1,1);    
        tftlcd_putsf("ADC0 Number:",0,10000,0);
        tftlcd_gotoxy(13,1);    
        tftlcd_puts(a0,0,100000,0);
            sprintf(a1," %i",ADC_Read(1));
        tftlcd_gotoxy(1,2);    
        tftlcd_putsf("ADC1 Number:",0,10000,0);
        tftlcd_gotoxy(13,2);    
        tftlcd_puts(a1,0,100000,0);
        sprintf(a2," %i",ADC_Read(2));
        tftlcd_gotoxy(1,3);    
        tftlcd_putsf("ADC2 Number:",0,10000,0);
        tftlcd_gotoxy(13,3);    
        tftlcd_puts(a2,0,100000,0);
        sprintf(a3," %i",ADC_Read(3));
        tftlcd_gotoxy(1,4);    
        tftlcd_putsf("ADC3 Number:",0,10000,0);
        tftlcd_gotoxy(13,4);    
        tftlcd_puts(a3,0,100000,0);
      delay(200);
        }
    }

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    نقل قول نوشته اصلی توسط soodi نمایش پست ها
    سلام
    ببخشید
    من میخام از 7 عدد adc همزمان استفاده کنم
    باید چیکار کنم ؟
    این برنامم برای 4 تا کانال ولی فقط مقدار کانال 1 رو نشون میده و بقیه کانال ها 0 هست !!!
    سلام
    نمی شه که یه برنامه یه کانال را نشون بده مابقی کار نکنه
    شما برای تست برنامه را تک تک برای هر کانال جدا انجام بدید و ببنید ایراد از چیه. مثلا ممکنه این پایه وصل باشه جای دیگه برد. من موردش را داشتم که برای برد همسایه بود که یه پایه اینتراپت تعریف کرده بودم همین طوری اینتراپت میداد و میرفت در وقفه بدون اینکه کلیدشو بزنم!

  4. تشکرها از این نوشته :


  5. #3
    کاربر فعال soodi آواتار ها
    تاریخ عضویت
    Jun 2010
    نام
    مسعود محمدی
    نوشته ها
    264
    تشکر
    111
    تشکر شده 296 بار در 138 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    سلام
    نمی شه که یه برنامه یه کانال را نشون بده مابقی کار نکنه
    شما برای تست برنامه را تک تک برای هر کانال جدا انجام بدید و ببنید ایراد از چیه. مثلا ممکنه این پایه وصل باشه جای دیگه برد. من موردش را داشتم که برای برد همسایه بود که یه پایه اینتراپت تعریف کرده بودم همین طوری اینتراپت میداد و میرفت در وقفه بدون اینکه کلیدشو بزنم!
    سلام

    ممنون از پاسختون
    ولی الان همین برنامه رو وقتی برای تک تک کانال ها جدا از هم مینویسم ، درست هر 4 کانال نشون داده میشه ولی وقتی که هر 4 تا کانال رو پشت سر هم میخونم همشون 0 میشه !!!

  6. #4
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    نقل قول نوشته اصلی توسط soodi نمایش پست ها
    سلام

    ممنون از پاسختون
    ولی الان همین برنامه رو وقتی برای تک تک کانال ها جدا از هم مینویسم ، درست هر 4 کانال نشون داده میشه ولی وقتی که هر 4 تا کانال رو پشت سر هم میخونم همشون 0 میشه !!!
    یک کاری یکنید. از سمپل لند تایگر استفاده بکنید به این صورت که بعد Init کردن هر کانال با این تابع مقدار آن را بخوانید و این سمپل را برای4 کانال جداکانه تعمیم دهید
    [PHP]uint16_t ADC_Get (void) {
    uint16_t val;

    ADC_StartCnv(); /* start A/D conversion */
    val = ADC_GetCnv(); /* use upper 8 bits of 12 bit AD conversion */
    ADC_StopCnv(); /* stop A/D conversion */

    return (val);
    }[/PHP]

  7. تشکرها از این نوشته :


  8. #5
    کاربر فعال soodi آواتار ها
    تاریخ عضویت
    Jun 2010
    نام
    مسعود محمدی
    نوشته ها
    264
    تشکر
    111
    تشکر شده 296 بار در 138 پست

    پیش فرض

    سلام

    من این هدر رو برای خواندن 4 کانال ADC نوشتم
    ولی هیچی روی LCD نمایش داده نمیشه !!!

    راستی وقتی خط LPC_ADC->ADCR |= 0x7000000; رو از برنامه حذف میکنم ، فقط مقدار کانال 1 رو نشون میده !!!

    کد:
       
    *********************************************************************************************************/
    #include "lpc17xx.h"                              /* LPC17xx definitions    */
    #include "adc.h"
    
    /*----------------------------------------------------------------------------
      initialize ADC Pins
     *----------------------------------------------------------------------------*/
    void ADC_Init (void) {
    
      LPC_PINCON->PINSEL1 = 0x00154000;
        
      LPC_SC->PCONP|=(1<<12);               /* Enable power to ADC block */
    
      LPC_ADC->ADCR = 0x200F0F; /* enable ADC */  /* ADC clock is 25MHz/5 */ /* select AD0.0 To 4 pin */    
    }
    
    /*----------------------------------------------------------------------------
      get converted ADC0 value
     *----------------------------------------------------------------------------*/
    uint32_t ADC_GetCnv0 (void) {
      uint32_t adGdr;
    
      do {
        adGdr = LPC_ADC->ADDR0; // Read A/D Data Register
     }while ((LPC_ADC->ADGDR & 0x80000000)==0); // Wait for end of A/D Conversion
     return (adGdr >> 4) & ADC_VALUE_MAX; // bit 4:15 is 12 bit AD value
    }
    /*----------------------------------------------------------------------------
      get converted ADC1 value
     *----------------------------------------------------------------------------*/
    uint32_t ADC_GetCnv1 (void) {
      uint32_t adGdr;
    
      do {
        adGdr = LPC_ADC->ADDR1; // Read A/D Data Register
     }while ((LPC_ADC->ADGDR & 0x80000000)==0); // Wait for end of A/D Conversion
     return (adGdr >> 4) & ADC_VALUE_MAX; // bit 4:15 is 12 bit AD value
    }
    /*----------------------------------------------------------------------------
      get converted ADC2 value
     *----------------------------------------------------------------------------*/
    uint32_t ADC_GetCnv2 (void) {
      uint32_t adGdr;
    
      do {
        adGdr = LPC_ADC->ADDR2; // Read A/D Data Register
     }while ((LPC_ADC->ADGDR & 0x80000000)==0); // Wait for end of A/D Conversion
     return (adGdr >> 4) & ADC_VALUE_MAX; // bit 4:15 is 12 bit AD value
    }
    /*----------------------------------------------------------------------------
      get converted ADC3 value
     *----------------------------------------------------------------------------*/
    uint32_t ADC_GetCnv3 (void) {
      uint32_t adGdr;
    
      do {
        adGdr = LPC_ADC->ADDR3; // Read A/D Data Register
     }while ((LPC_ADC->ADGDR & 0x80000000)==0); // Wait for end of A/D Conversion
     return (adGdr >> 4) & ADC_VALUE_MAX; // bit 4:15 is 12 bit AD value
    }
    
    /*------------------------------------------------------------------------------
      read a converted value from the Analog/Digital0 converter
     *------------------------------------------------------------------------------*/
    uint16_t ADC_Get0 (void) {
      uint16_t val;
    /*----------------------------------------------------------------------------
      start ADC Conversion
     *----------------------------------------------------------------------------*/
      LPC_ADC->ADCR = 0x7000000;                     /* stop conversion  */
      LPC_ADC->ADCR |=  (1<<24);                     /* start conversion */
        
      val = ADC_GetCnv0();                             /* use upper 8 bits of 12 bit AD conversion */
        
    /*----------------------------------------------------------------------------
      stop ADC Conversion
     *----------------------------------------------------------------------------*/    
      LPC_ADC->ADCR = 0x7000000;                     /* stop conversion */
        
      return (val);
    }
    
    /*------------------------------------------------------------------------------
      read a converted value from the Analog/Digital1 converter
     *------------------------------------------------------------------------------*/
    uint16_t ADC_Get1 (void) {
      uint16_t val;
    /*----------------------------------------------------------------------------
      start ADC Conversion
     *----------------------------------------------------------------------------*/
      LPC_ADC->ADCR = 0x7000000;                     /* stop conversion  */
      LPC_ADC->ADCR |=  (1<<24);                     /* start conversion */
        
      val = ADC_GetCnv1();                             /* use upper 8 bits of 12 bit AD conversion */
        
    /*----------------------------------------------------------------------------
      stop ADC Conversion
     *----------------------------------------------------------------------------*/    
      LPC_ADC->ADCR = 0x7000000;                     /* stop conversion */
        
      return (val);
    }
    
    /*------------------------------------------------------------------------------
      read a converted value from the Analog/Digital2 converter
     *------------------------------------------------------------------------------*/
    uint16_t ADC_Get2 (void) {
      uint16_t val;
    /*----------------------------------------------------------------------------
      start ADC Conversion
     *----------------------------------------------------------------------------*/
      LPC_ADC->ADCR = 0x7000000;                     /* stop conversion  */
      LPC_ADC->ADCR |=  (1<<24);                     /* start conversion */
        
      val = ADC_GetCnv2();                             /* use upper 8 bits of 12 bit AD conversion */
        
    /*----------------------------------------------------------------------------
      stop ADC Conversion
     *----------------------------------------------------------------------------*/    
      LPC_ADC->ADCR = 0x7000000;                     /* stop conversion */
        
      return (val);
    }
    
    /*------------------------------------------------------------------------------
      read a converted value from the Analog/Digital3 converter
     *------------------------------------------------------------------------------*/
    uint16_t ADC_Get3 (void) {
      uint16_t val;
    /*----------------------------------------------------------------------------
      start ADC Conversion
     *----------------------------------------------------------------------------*/
      LPC_ADC->ADCR = 0x7000000;                     /* stop conversion  */
      LPC_ADC->ADCR |=  (1<<24);                     /* start conversion */
        
      val = ADC_GetCnv3();                             /* use upper 8 bits of 12 bit AD conversion */
        
    /*----------------------------------------------------------------------------
      stop ADC Conversion
     *----------------------------------------------------------------------------*/    
      LPC_ADC->ADCR = 0x7000000;                     /* stop conversion */
        
      return (val);
    }
    /*********************************************************************************
    **                            End Of File
    *********************************************************************************/
    ویرایش توسط soodi : 28-10-2013 در ساعت 18:55

  9. #6
    کاربر فعال soodi آواتار ها
    تاریخ عضویت
    Jun 2010
    نام
    مسعود محمدی
    نوشته ها
    264
    تشکر
    111
    تشکر شده 296 بار در 138 پست

    پیش فرض

    من هنوز نتونستم از چند کانال ADC به صورت همزمان استفاده کنم
    همیشه یا دیتای 1 کانال میفته روی 4 کانال یا دیتای کانال 1 درسته و بقیه کانال ها 0 میشه
    با بیشتر سمپل ها هم امتحان کردم
    این برنامه زیر هم جواب نمیده :

    ایـــــــــران میـــــــکرو ™ - مشاهده یک موضوع - فیلم آموزشی میکروکنترلر LPC17xx (بررسی رجیستری و توابع CMSIS ) بالاخره آماده شد!

    ممنون

  10. #7
    عضو جدید
    تاریخ عضویت
    Aug 2013
    نوشته ها
    13
    تشکر
    5
    تشکر شده 0 بار در 0 پست

    پیش فرض

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

  11. #8
    کاربر فعال soodi آواتار ها
    تاریخ عضویت
    Jun 2010
    نام
    مسعود محمدی
    نوشته ها
    264
    تشکر
    111
    تشکر شده 296 بار در 138 پست

    پیش فرض

    سلام

    یه برنامه نوشتم که از هر 7 کانال میتوند استفاده کنید
    این هم لینکش
    نمیدونم درسته یا نه ولی جواب میده یعنی نمیدونم استاندارد هست یا نه
    شاید راه های بهتر و سریعتری هم باشه که اگر دوستان بلدن دریغ نفرمایند
    استفاده از چند کانال adc در lpc1768 - ایـــــــــران میـــــــکرو ™

  12. تشکرها از این نوشته :


موضوعات مشابه

  1. پاسخ: 17
    آخرين نوشته: 29-03-2016, 20:54
  2. راه اندازی سنسور 9محوره gy-80
    توسط cpld در انجمن سنسور و ماژول های اندازه گیری
    پاسخ: 3
    آخرين نوشته: 17-01-2014, 13:06
  3. راه اندازی سنسور آلتراسونیک
    توسط wantedboy در انجمن stm32
    پاسخ: 4
    آخرين نوشته: 04-01-2014, 23:11
  4. معرفی انواع سنسور گازی
    توسط medadnoki در انجمن سنسور و ماژول های اندازه گیری
    پاسخ: 1
    آخرين نوشته: 12-01-2013, 21:29
  5. مشکل در راه اندازی سنسور فشار
    توسط msmut7020 در انجمن سنسور و ماژول های اندازه گیری
    پاسخ: 29
    آخرين نوشته: 19-09-2011, 21:09

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •