اطلاعیه

Collapse
No announcement yet.

lpc1768

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

    lpc1768

    سلام دوستان
    من یک lpc1768 خریدم
    برای تست اومدم برنامه ی روشن خاموش شدن ال ای دی رو بنویسم
    اما نمیدونم دستورات چطوریه
    استادمون فقط کار با میکرو 2368 رو بهمون یاد داده و هر چی گشتم با 1768 چیز خاصی پیدا نکردم
    بچه ها اصلاح شده این کد چی میشه؟
    #include "lpc17xx.h"


    int main()
    {
    IODIR0=0x1;

    while(1)
    { int i=0;
    IOSET0=0x1;
    for(i=0;i<1000000;i++);
    IOCLR0=0x1;
    for(i=0;i<1000000;i++);

    }

    }



    کسی میتونه کمکم کنه چطوری به رجیسترای 1768 دسترسی پیدا کنم؟

    #2
    پاسخ : lpc1768

    دوست عزیز دو تا راه هست که بتونی برای این میکرو کد بزنی یکی استفاده از کتابخانه هایی مثل CMSIS و دیگری مطالعه هدر فایل های خود کیل
    هر دوتاش دردسرهای خاص خودش رو داره. اگه برای کارهای ساده می خواهی خوندن هدر فایل ها کارت رو راه می اندازه اگه نه که باید سعی کنی بری روی یک کتابخانه کار کنی.
    کار کردن با CMSIS اصلا سخت نیست اتفاقا یه Help خیلی خوب هم داره فقط یه خورده اول هاش ممکنه سردرگم بشی.
    من خودمم نمی دونم گاهی از کدوم استفاده می کنم. فقط می دونم توی هر پروژه ای که انجام می دم به هر حال هردوتاش هست.
    آدمی از عالم خاکی نمی آید بدست

    عالمی دیگر بباید ساخت و از نو آدمی
    پردازش تصویر با FPGA از صفر تا انتها
    http://www.eca.ir/forum2/index.php?topic=74299.0

    دیدگاه


      #3
      پاسخ : lpc1768

      سلام، من یه نگاه به هدر فایل کیل برای این میکرو انداخنم، انگار برای حالت GPIO توی مد Normal دستوراتش فرف داره، حالا موقتاً از دستورات fast استفاده کنید تا بعد سر فرصت هدر فایل رو مطالعه کنید، اصلاح شده ی کد شما با دستورای fast این جوری میشه:
      کد:
       #include "lpc17xx.h"
      
      
       int main()
       {
       FIODIR0=0x1;
        
       while(1)
       { int i=0;
       FIOSET0=0x1;
       for(i=0;i<1000000;i++);
       FIOCLR0=0x1;
        for(i=0;i<1000000;i++);
       
       }
       
       }

      دیدگاه


        #4
        پاسخ : lpc1768

        ممنون دوستان خیلی لطف دارید
        کد اصلاح شده برام کار نکرد :cry:

        دیدگاه


          #5
          پاسخ : lpc1768

          من با سری cortex کار نکردم، ولی هدر رو کامل نگاه کردم . شما باید اول peripheral مد نظرتونو فعال کنید بعدش دستورات مربوط به GPIO باید به صورت اشاره گر structure صدا زده بشن، حاصل میشه این کد:
          کد:
          #include "LPC17xx.h"
          
          volatile uint32_t temp;
          
          void _delay(uint32_t del);
          
          int main (void) 
          {
            LPC_SC->PCONP |= ( 1 << 15 ); // power up GPIO
            LPC_GPIO1->FIODIR |= 1 << 29; // puts P1.29 into output mode.
            while(1)
            {
              LPC_GPIO1->FIOPIN |= 1 << 29; // make P1.29 high
              _delay( 1 << 24 );
              LPC_GPIO1->FIOPIN &= ~( 1 << 29 ); // make P1.29 low
              _delay( 1 << 24 );
            }
            return 0;
           
          }
          void _delay(uint32_t del)
          {
            uint32_t i;
            for(i=0;i<del;i++)
              temp = i;
          }
          توی شبیه سازی کیل که جواب داد ...

          دیدگاه


            #6
            پاسخ : lpc1768

            خیلـــــــــــــــــــــی ممنون
            منم امروز عصر یه برنامه شبیه به این یافتم
            میدونید الان میدونم چی چیکار میکنه ها
            ولی یه جورایی بعضی کاراکترا که برام میذاره یه جورین مث >> یا ~ &= یا |=
            میدونین مثلا میفهمم واس روشن کردن |= لازمه ولی درکش نمیکنم که یعنی چی؟ OR کنار مساوی چط.ری باعث این عمل میشه؟این فقط یه سینتکس از زبان برنامست یا نه این کاراکترها عملوندنو دارن یه کاری میکنن
            نمیدونم چجوری سوالمو توضیح بدم :sad: :angry:

            دیدگاه


              #7
              پاسخ : lpc1768

              ~ عمل not کردنو انجام میده نه؟
              >> هم عمل انتقال درسته؟
              پس برای روشن شدن 29>>1 یعنی پین 29 روشن بشه و (29>>1)~ یعنی پین 29 خاموش بشه نه؟
              ولی هنوز معنی |= رو درک نمیکنم و همچنین معنی =& رو

              دیدگاه


                #8
                پاسخ : lpc1768

                میشه گفت چون | که معادل OR هست وقتی 0xff میدیم باعث میشه خروجی یک بشه و ال ای دی روشن شه و & که AND هست وقتی چیزی با صفر AND بشه صفر میشه و این باعث خاموش شدن ال ای دی میشه؟
                ولی اینجا چی با یک و صفر AND یا OR میشه؟بیتن نه؟(فکر کنم این سوالم یه کم خنده داره نه؟)
                اخه من این ترم دفعه اولمه با میکرو کار میکنم زیاد از سخت افزارش سردرنمیارم.زیادی تازه کارم

                دیدگاه


                  #9
                  پاسخ : lpc1768

                  فرق
                  کد:
                  |= 1<<29
                  با
                  کد:
                  = 1<< 29
                  اینه که اولی برای مواقعی هست که بخواهی فقط و فقط پایه شماره 29 رو مقدار دهی کنی که در این جا مقدارش می شه یک
                  دومی هم برای زمانی هست که بخواهی همه پایه ها رو مقدار دهی کنی البته توی دومی همه پایه ها می شه صفر ولی پایه 29 می شه یک
                  توی آرم مثل ای وی آر چند تا پورت داریم اون جا بهش نام های A و B و غیره رو می دادیم توی آرم با عدد نام گذاری می کنیم. توی ای وی آر هر پورت هشت پایه داشت ولی توی آرم این طوری نیست. توی یه تراشه ممکنه پورت شماره صفر سی و یک پایه داشته باشه و پورت شماره یک بیست تا. مثال زدم البته.
                  حالا ممکنه توی یه نوع آرم مثلا پورت شماره صفر هم سریال داشته باشه هم مبدل آنالوگ به دیجیتال داشته باشه هم پایه های عمومی داشته باشه. هر موقع بخواهی مثلا از پورت صفر سریال و پایه های عمومی رو که یه سری ال ای دی روشن کرده راه اندازی کنی اگر از نمونه کد دومی استفاده کنی همه تنظیم هایی که کردی از بین می ره ولی اگه از اولی استفاده کنی می تونی تک تک پایه ها رو مقدار دهی کنی
                  چون نمونه کد اولی می گه که همه مقدار های قبلی پایه ها سرجاش باشه به علاوه این که پایه شماره 29 مقدارش یک باشه. منطق OR همین هست دبگه

                  پیروز و سربلند باشید
                  آدمی از عالم خاکی نمی آید بدست

                  عالمی دیگر بباید ساخت و از نو آدمی
                  پردازش تصویر با FPGA از صفر تا انتها
                  http://www.eca.ir/forum2/index.php?topic=74299.0

                  دیدگاه


                    #10
                    پاسخ : lpc1768

                    ممنون
                    خیلی جالب بود
                    چقدر ریز و با تدبیر بود

                    دیدگاه


                      #11
                      پاسخ : lpc1768

                      نوشته اصلی توسط پویا
                      دوست عزیز دو تا راه هست که بتونی برای این میکرو کد بزنی یکی استفاده از کتابخانه هایی مثل CMSIS و دیگری مطالعه هدر فایل های خود کیل
                      هر دوتاش دردسرهای خاص خودش رو داره. اگه برای کارهای ساده می خواهی خوندن هدر فایل ها کارت رو راه می اندازه اگه نه که باید سعی کنی بری روی یک کتابخانه کار کنی.
                      کار کردن با CMSIS اصلا سخت نیست اتفاقا یه Help خیلی خوب هم داره فقط یه خورده اول هاش ممکنه سردرگم بشی.
                      من خودمم نمی دونم گاهی از کدوم استفاده می کنم. فقط می دونم توی هر پروژه ای که انجام می دم به هر حال هردوتاش هست.
                      سلام خدمت شما دوستان گرامی من هم می خواهم کار با این میکرو شروع کنم کتاب خونه CMSIS هم گرفتم( با تشکر از اقای فاریابی) و اومدم برنامه هاشو دیدم گیج شدم این Help کجاست؟از این کتاب خونه فقط توی keil می شه استفاده کرد یا نه؟؟
                      دوستان کمک کنند ما یک led راه بندازیم فعلا :sad:
                      I'm Very Question and I have more Question,Please Answer All of my Questions


                      [img width=156 height=100]http://uploadtak.com/images/u3536_555_Timer_as_Astable.gif[/img]

                      دیدگاه


                        #12
                        پاسخ : lpc1768

                        نوشته اصلی توسط very question
                        سلام خدمت شما دوستان گرامی من هم می خواهم کار با این میکرو شروع کنم کتاب خونه CMSIS هم گرفتم( با تشکر از اقای فاریابی) و اومدم برنامه هاشو دیدم گیج شدم این Help کجاست؟از این کتاب خونه فقط توی keil می شه استفاده کرد یا نه؟؟
                        دوستان کمک کنند ما یک led راه بندازیم فعلا :sad:
                        هلپ با این نام ذخیره شده
                        LPC1700 Peripheral Driver Library Manual
                        و برای روشن کردن ال ای دی هم که یه برنامه اماده گذاشته با نام LedBlinky
                        در مسیر
                        Examples\GPIO\LedBlinky

                        کافیه کامپایل کنی و بریزی روی میکرو و روشن کنی!!!
                        توضیحات مختصری از برنامه هم توی فایل abstract هست
                        که برای این برنامه نوشته
                        After reset software all LED from P1.28 to P2.6 will be blinking one after another
                        خوتون استادین ولی باز من میگم ال ای دی ها رو باید بزنی روی پین های که بالا نوشته!!

                        در مورد استفاده هم
                        هم Keil و هم IAR و هم gcc
                        انجام پروژه هاي برنامه نويسي اندرويد
                        [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
                        http://cafebazaar.ir/app/?id=com.atxdroid

                        دیدگاه


                          #13
                          پاسخ : lpc1768

                          ممنون محسن جان دارم help می خونم ، خیلی باحاله :wow:
                          ولی هدف که فقط روشن شدن led نیست من از برنامه سر در نمیارم برم کجا را بخوانم تا از این توابع و این define ها سر در بیارم :eek:
                          I'm Very Question and I have more Question,Please Answer All of my Questions


                          [img width=156 height=100]http://uploadtak.com/images/u3536_555_Timer_as_Astable.gif[/img]

                          دیدگاه


                            #14
                            پاسخ : lpc1768

                            کامل ترین مرجه یوزر منوال هست بعد این کتاب خونه های cmsis شما خودت رو زیاد درگیر ریز ریز خطوط کد نکن هر جای رو که نیاز داری رو بدون بعد شروع کن پروژت رو گسترش بده و کم کم نیاز هات رو بر طرف کن!!!!

                            تنها چیزی میتونم بگم lpc1768 میکرو جالبی هست!!!!
                            انجام پروژه هاي برنامه نويسي اندرويد
                            [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
                            http://cafebazaar.ir/app/?id=com.atxdroid

                            دیدگاه


                              #15
                              پاسخ : lpc1768

                              خب من شروع کردم اولین برنامه که می خوام بریزم روی این میکرو ناز lpc1768 تحلیل کنم
                              برنامه می خواد پورت 1 پایه 28 تا پورت 2 پایه 6 روشن کنه ولی من سر در نمیارم این همه برنامه برای چی هستش من برنامه را اینجا قرار می دهم و امیدوارم با کمک هم تجزیه و تحلیلش کنیم بعد بریم برنامه بعدی
                              کد:
                              #include "lpc17xx_gpio.h"
                              #include "lpc17xx_libcfg.h"
                              
                              /************************** PRIVATE DEFINITIONS *************************/
                              #define MCB_LPC_1768
                              #ifdef MCB_LPC_1768
                               /* Number of user LEDs */
                              #define LED_NUM   8
                              const unsigned long led_mask[] = { 1<<28, 1<<29, 1UL<<31, 1<<2, 1<<3, 1<<4, 1<<5, 1<<6 };
                              #endif
                              
                              /************************** PRIVATE VARIABLES *************************/
                              /* SysTick Counter */
                              volatile unsigned long SysTickCnt;
                              
                              /************************** PRIVATE FUNCTIONS *************************/
                              void SysTick_Handler (void);
                              
                              void Delay (unsigned long tick);
                              
                              /*----------------- INTERRUPT SERVICE ROUTINES --------------------------*/
                              
                              void SysTick_Handler (void) {
                               SysTickCnt++;
                              }
                              
                              /*-------------------------PRIVATE FUNCTIONS------------------------------*/
                              
                              void Delay (unsigned long tick) {
                               unsigned long systickcnt;
                              
                               systickcnt = SysTickCnt;
                               while ((SysTickCnt - systickcnt) < tick);
                              }
                              
                              /*-------------------------MAIN FUNCTION------------------------------*/
                              
                              int c_entry (void) {            /* Main Program            */
                               int num = -1;
                               int dir = 1;
                              
                               SysTick_Config(SystemCoreClock/1000 - 1); /* Generate interrupt each 1 ms  */
                              
                              #ifdef MCB_LPC_1768
                               GPIO_SetDir(1, 0xB0000000, 1);      /* LEDs on PORT1 defined as Output  */
                               GPIO_SetDir(2, 0x0000007C, 1);      /* LEDs on PORT2 defined as Output  */
                              
                               GPIO_ClearValue(1, 0xB0000000);
                               GPIO_ClearValue(2, 0x0000007C);
                              #elif defined(IAR_LPC_1768)
                               GPIO_SetDir(1, (1<<25), 1);
                               GPIO_ClearValue(1, (1<<25));
                              #endif
                              
                              
                               for (;;) {              /* Loop forever            */
                              #ifdef MCB_LPC_1768
                                /* Calculate 'num': 0,1,...,LED_NUM-1,LED_NUM-1,...,1,0,0,...       */
                                num += dir;
                                if (num == LED_NUM) { dir = -1; num = LED_NUM-1; }
                                else if  (num < 0) { dir = 1; num = 0;     }
                              
                                if (num < 3){
                                  GPIO_SetValue(1, led_mask[num]);
                                  Delay(500);             /* Delay 500ms            */
                                  GPIO_ClearValue(1, led_mask[num]);
                                  Delay(500);             /* Delay 500ms            */
                                }
                                else {
                                  GPIO_SetValue(2, led_mask[num]);
                                  Delay(500);             /* Delay 500ms            */
                                  GPIO_ClearValue(2, led_mask[num]);
                                  Delay(500);             /* Delay 500ms            */
                                }
                              #elif defined(IAR_LPC_1768)
                               GPIO_SetValue(1,(1<<25));
                               Delay(500);
                               GPIO_ClearValue(1,(1<<25));
                               Delay(500);
                              #endif
                               }
                              
                              }
                              
                              
                              
                              int main(void)
                              {
                                return c_entry();
                              }
                              
                              #ifdef DEBUG
                              
                              void check_failed(uint8_t *file, uint32_t line)
                              {
                              	
                              	while(1);
                              }
                              #endif
                              I'm Very Question and I have more Question,Please Answer All of my Questions


                              [img width=156 height=100]http://uploadtak.com/images/u3536_555_Timer_as_Astable.gif[/img]

                              دیدگاه

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