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

موضوع: LCDN96 Problem with Runing ADC!!!

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Sep 2011
    نوشته ها
    24
    تشکر
    10
    تشکر شده 0 بار در 0 پست

    پیش فرض LCDN96 Problem with Runing ADC!!!

    با سلام بچه ها من عنوان رو انگلیسی میزنم تا این سایت در سرچ های گوگل بصورت انگلیسی هم بیاد . بگذریم
    آقا من یه مشکل کانفیلیکتی پیدا کردم
    ADC که روشن میشه داخل حلقه While دیگه عدد ADC رو نمایش نمیده
    کسی میدونه مشکل کجاست ؟
    با تشکر
    کد:
    #include <lpc17xx.h>
    #include "delay.h"
    #define family_lpc17xx
    #define TFTLCD_DATAPORT_1
    #define TFTLCD_DATAPORT_OFFSET 15
    #define TFTLCD_CONTROLPORT_0
    
    #define TFTLCD_RST    26
    #define TFTLCD_RS   23
    #define TFTLCD_CS    22        
    #define TFTLCD_RD     25
    #define TFTLCD_WR    24
    #define PORTRAIT
    #include "tftlcd_functions.h"
    //#include "Font_24x16.h"
    //#include "image.h"
    
    int x=0;
    int main(){
            int a;
            short s;
            SystemInit();
            LPC_PINCON->PINSEL3 |=  (3UL<<30);             /* P1.31 is AD0.5 */
            LPC_SC->PCONP       |=  (1<<12);               /* Enable power to ADC block 12bit */
            LPC_ADC->ADCR        =  (1<< 5) |              /* select AD0.5 pin */
                                                            (4<< 8) |              /* ADC clock is 25MHz/5 */
                                                            (1<<21);               /* enable ADC */
    
    SystemInit();
    tftlcd_init();
    tftlcd_clear();
    
            tftlcd_gotoxy(0,0);
          tftlcd_puts("Start ADC Convertor",Yellow,Red,0);
    delay_ms(500);    
    while(1)
    {
            unsigned char str[10];
             LPC_ADC->ADCR &= ~(7<<24);                     /* stop conversion  */
             LPC_ADC->ADCR |=  (1<<24);                     /* start conversion */
             while (!(LPC_ADC->ADGDR & (1UL<<31)));         /* Wait for Conversion end */
             a = (LPC_ADC->ADGDR>>4 & 0xfff);
             s=LPC_ADC->ADGDR/2;
        
           sprintf(str,"%d",s);
          tftlcd_gotoxy(0,1);
          tftlcd_puts(str,Yellow,Red,0);
        delay_us(5);
    }
    
        
                }
    خودم احساس میکنم مشکل از شیفت هایی است که خورده !!
    چون هم ADC رو پورت 1 هم LCD
    همانطور که میبینید ADC خورده به P1.31
    نمیخوام هم عوض کنم جاش رو یعنی نمیتونم
    با تشکر
    ویرایش توسط m.elexal : 27-03-2013 در ساعت 20:27

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

  3. #2
    کاربر علاقه مند
    تاریخ عضویت
    Sep 2011
    نوشته ها
    24
    تشکر
    10
    تشکر شده 0 بار در 0 پست

    پیش فرض LCDN96 Problem with Runing ADC!!!

    کلا کد رو عوض کردم که یه وقت شیفت نده رو پای های lcd
    در ضمن lcd رو هم کلا بردم رو پورت 1 و دیگه مساله کانفیلیکت نداره
    adc هم روی پورت 0 پین 23
    بازم نشون نمیده مقدار ADC رو
    دیباگ کردم میره اینجا میمونه
    کد:
    HardFault_Handler\
                    PROC
                    EXPORT  HardFault_Handler         [WEAK]
                    B       .
                    ENDP
    کد فعلی هم اینه
    کد:
    #include <lpc17xx.h>
    #include "delay.h"
    #define family_lpc17xx
    #define TFTLCD_DATAPORT_1
    #define TFTLCD_DATAPORT_OFFSET 15
    #define TFTLCD_CONTROLPORT_1
    
    #define TFTLCD_RST 1//    26
    #define TFTLCD_RS 9//  23
    #define TFTLCD_CS 10    //22        
    #define TFTLCD_RD 4//    25
    #define TFTLCD_WR    8//24
    #define PORTRAIT
    #include "tftlcd_functions.h"
    //#include "Font_24x16.h"
    //#include "image.h"
    
    int read_adc(void)
    {
        int i;
            
            LPC_ADC->ADCR |=0X01000000;//start conversation
            do
            {
                    i=LPC_ADC->ADDR0;//read AD data register
            }
            while((i&0x80000000)==0);//wait for end of AD conversation
            return (i>>6) & 0x03ff;//bit 6:15 are 10 bit ad value
    }    
    
    int main()
    {
            int value;
    
    
            LPC_SC->PCONP |=(1<<12);//return ADC on with set bit12
            LPC_PINCON->PINSEL1=0x4000;//set p0.23 as adc input
            LPC_ADC->ADCR=0x00200301;
            SystemInit();
            tftlcd_init();
            tftlcd_clear();
            tftlcd_gotoxy(0,0);
            tftlcd_puts("Start ADC",Yellow,Red,0);
            //delay_ms(500);
            while(1)
            {
                    unsigned char str[10];
    
                    sprintf(str,"%d",read_adc());
                    tftlcd_gotoxy(0,1);
                    tftlcd_puts(str,Yellow,Red,0);
                    tftlcd_gotoxy(0,2);
                    tftlcd_putchar(value,Yellow,Red,0);
                    //delay_us(5);
            }
    }
    خسته شدم دیگه از صبح سر یه adc که راه انداختم قبلا گیر کردم
    تو lcd کاراکتری راه انداختم مثل هلو اینجا نمیدونم چرا اصلا جواب نمیده
    از sprintf پایین تر نمیره اصلا که چاپ شه خود sprintf هم دیباگ زدم نمیرسه میره تو startup_lpc17xx گیر میکنه
    یکی بگه چیکار کنم
    ویرایش توسط m.elexal : 28-03-2013 در ساعت 04:20

  4. #3
    مدیر انجمن Aghaeifar آواتار ها
    تاریخ عضویت
    Feb 2010
    نام
    علی آقائی فر
    نوشته ها
    751
    تشکر
    552
    تشکر شده 975 بار در 440 پست

    پیش فرض

    سلام.
    1- اونجاکه نوشتی
    i>>6 نباید به جای 6 عدد 4 می ذاشتی؟ نتایج در بیتهای 4 تا 15 ذخیره می شن. (البته مشکل کارتون این نیست.)

    2- الان نوشته های که روی LCD می زنی بنویسه رو نشون می ده؟ ( قبل شروع while)

    3- برات اگر دردسر نداره در تابع read_adc بعد از خط

    while((i&0x80000000)==0);//wait for end of AD conversation
    مثلا یه LED یه هر چیزی روشن کن ببین این خط طی میشه یا نه. به ما هم بگو نتیجه چی شد.

    4- یک بار دیگه با رجیستر AD0GDR نتایج تبدیل رو بخون
    ویرایش توسط Aghaeifar : 28-03-2013 در ساعت 10:17
    ما در انتظار رویت خورشیدیم ...

    اللهم عجل لولیک الفرج

  5. کاربران : 2 تشکر کرده اند از شما Aghaeifar برای ارسال این پست سودمند:


  6. #4
    کاربر علاقه مند
    تاریخ عضویت
    Sep 2011
    نوشته ها
    24
    تشکر
    10
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط Aghaeifar نمایش پست ها
    سلام.
    1- اونجاکه نوشتی
    i>>6 نباید به جای 6 عدد 4 می ذاشتی؟ نتایج در بیتهای 4 تا 15 ذخیره می شن. (البته مشکل کارتون این نیست.)

    2- الان نوشته های که روی LCD می زنی بنویسه رو نشون می ده؟ ( قبل شروع while)

    3- برات اگر دردسر نداره در تابع read_adc بعد از خط

    while((i&0x80000000)==0);//wait for end of AD conversation
    مثلا یه LED یه هر چیزی روشن کن ببین این خط طی میشه یا نه. به ما هم بگو نتیجه چی شد.

    4- یک بار دیگه با رجیستر AD0GDR نتایج تبدیل رو بخون
    سلام مهندس جان بابت کمک ممنون
    بله قبل از while روی lcd مینویسه حتی تو while هم مینویسه چک کردم
    اما بعد از sprint f دیگه اجرا نمیشه نمیدونم چرا
    اینهم کدی که فرمودید یه led وصل کردم به p0.16
    اینهم روشن نمیشه
    خیلی جالبه برام Vref هم حتی وصل کردم بازهم فرقی نکرد
    اینهم تغییراتی که فرمودید
    کد:
    #include <lpc17xx.h>
    #include "delay.h"
    #define family_lpc17xx
    #define TFTLCD_DATAPORT_1
    #define TFTLCD_DATAPORT_OFFSET 15
    #define TFTLCD_CONTROLPORT_1
    
    #define TFTLCD_RST 1//    26
    #define TFTLCD_RS 9//  23
    #define TFTLCD_CS 10    //22        
    #define TFTLCD_RD 4//    25
    #define TFTLCD_WR    8//24
    #define PORTRAIT
    #include "tftlcd_functions.h"
    //#include "Font_24x16.h"
    //#include "image.h"
    
    int read_adc(void)
    {
        int i;
            
            LPC_ADC->ADCR |=0X01000000;//start conversation
            do
            {
                    i=LPC_ADC->ADDR0;//read AD data register
            }
            while((i&0x80000000)==0);//wait for end of AD conversation
            return (i>>4) & 0x03ff;//bit 6:15 are 10 bit ad value
    }    
    
    int main()
    {
            int value;
    
    
            LPC_SC->PCONP |=(1<<12);//return ADC on with set bit12
            LPC_PINCON->PINSEL1=0x4000;//set p0.23 as adc input
            LPC_ADC->ADCR=0x00200301;
            SystemInit();
            tftlcd_init();
            tftlcd_clear();
            tftlcd_gotoxy(0,0);
            tftlcd_puts("Start ADC",Yellow,Red,0);
            //delay_ms(500);
        LPC_GPIO0->FIODIR=0x00010000;
            while(1)
            {
                value=read_adc();
                if (value>450)
                {
                    LPC_GPIO0->FIOCLR=0x00010000;
                }
                else
                {
                    LPC_GPIO0->FIOSET=0x00010000;
                }
    //                 unsigned char str[10];
    
    //                 sprintf(str,"%d",read_adc());
    //                 tftlcd_gotoxy(0,1);
    //                 tftlcd_puts(str,Yellow,Red,0);
    //                 tftlcd_gotoxy(0,2);
    //                 tftlcd_putchar(value,Yellow,Red,0);
                    //delay_us(5);
            }
    }
    دیگه چی کار کنم ؟
    تو این کد هم تا value=read_adc(); میره بعدش دیگه نمیره و باز میره روی B تو کد پایین گیر میکنه


    کد:
    HardFault_Handler\
                    PROC
                    EXPORT  HardFault_Handler         [WEAK]
                    B       .
                    ENDP

  7. #5
    کاربر علاقه مند
    تاریخ عضویت
    Sep 2011
    نوشته ها
    24
    تشکر
    10
    تشکر شده 0 بار در 0 پست

    پیش فرض

    آقا این اصلا adc نمیخونه vref رو چه به گراند میزنم چه به 3.3 هیچ عکس العملی نداره
    چرااااااا آخههههههه ؟
    اصلا پین p0.23 که adc هست رو مستقیم زدم به 3.3 شرطمم زدم read_adc(); بزرگتر از 1 شد led رو روشن کن !!!!! دیگه از این ضایع تر ؟
    روشن نمیشه آقا جان
    ویرایش توسط m.elexal : 28-03-2013 در ساعت 15:02

  8. #6
    کاربر علاقه مند
    تاریخ عضویت
    Sep 2011
    نوشته ها
    24
    تشکر
    10
    تشکر شده 0 بار در 0 پست

    پیش فرض

    درست شد اما چراشو خودمم نفهمیدم کسی فهمید مارو هم خبر کنه !!!
    الان روی lcd چاپ میکنه
    هم Adc رو پورت 1 هم lcd !!!!!!!!!!!!!!!!!!!
    خیلی هم خوب کار میکنه
    اما میخوام دلیلش رو بدونم

    کد:
    #include <lpc17xx.h>
    #include "delay.h"
    #define family_lpc17xx
    #define TFTLCD_DATAPORT_1
    #define TFTLCD_DATAPORT_OFFSET 15
    #define TFTLCD_CONTROLPORT_1
    
    #define TFTLCD_RST 1//    26
    #define TFTLCD_RS 9//  23
    #define TFTLCD_CS 10    //22        
    #define TFTLCD_RD 4//    25
    #define TFTLCD_WR    8//24
    #define PORTRAIT
    #include "tftlcd_functions.h"
    //#include "Font_24x16.h"
    //#include "image.h"
    
    int main()
    {
            short a;
        unsigned char str[10];
            short s;
            SystemInit();
            tftlcd_init();
            LPC_PINCON->PINSEL3 |=  (3UL<<30);             /* P1.31 is AD0.5 */
            LPC_SC->PCONP       |=  (1<<12);               /* Enable power to ADC block 12bit */
            LPC_ADC->ADCR        =  (1<< 5) |              /* select AD0.5 pin */
                                                            (4<< 8) |              /* ADC clock is 25MHz/5 */
                                                            (1<<21);               /* enable ADC */
        
            tftlcd_gotoxy(0,0);
            tftlcd_puts("Start ADC",Yellow,Red,0);
            delay_ms(500);
        
            while(1)
            {
    
                    LPC_ADC->ADCR &= ~(7<<24);                     /* stop conversion  */
                    LPC_ADC->ADCR |=  (1<<24);                     /* start conversion */
                    while (!(LPC_ADC->ADGDR & (1UL<<31)));         /* Wait for Conversion end */
                    a = (LPC_ADC->ADGDR>>4 & 0xfff);
    
                    sprintf(str,"%d",a);
                    tftlcd_gotoxy(10,7);
    
                    tftlcd_puts(str,Yellow,Red,0);
                    delay_ms(2);
    
            }
    }

  9. #7
    مدیر انجمن Aghaeifar آواتار ها
    تاریخ عضویت
    Feb 2010
    نام
    علی آقائی فر
    نوشته ها
    751
    تشکر
    552
    تشکر شده 975 بار در 440 پست

    پیش فرض

    در کدی که نوشتی درست شد فقط اومدی به جای رجیستر addr0 از رجیستر جایگزین adgdr (بند چهارم چیزی که بالا گفتم ) استفاده کردی.
    برای اطمینان فقط یک بار بیا در همین کد (عوضش نکنید مثل بالایی بشه) جای این دوتا رجیستر رو مجدد عوض کنید ببینید نتیجه چطور میشه که بشه یه جمع بندی در موردش کرد.
    ما در انتظار رویت خورشیدیم ...

    اللهم عجل لولیک الفرج

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


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

  1. کی پد با lcdn96
    توسط chroo در انجمن میکرو کنترلر های 32 بیتی(arm)
    پاسخ: 0
    آخرين نوشته: 22-08-2012, 04:22
  2. نمایش lcdn96
    توسط micro-m در انجمن میکرو کنترلر های 32 بیتی(arm)
    پاسخ: 7
    آخرين نوشته: 16-08-2012, 12:51
  3. کمک lcdn96
    توسط micro-m در انجمن AT91 series (ATMEL)
    پاسخ: 0
    آخرين نوشته: 09-08-2012, 12:21
  4. MMC Problem
    توسط Caspian1361 در انجمن AVR
    پاسخ: 2
    آخرين نوشته: 13-01-2012, 19:01
  5. a BIG problem
    توسط emperor در انجمن AVR
    پاسخ: 2
    آخرين نوشته: 17-09-2007, 14:50

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

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