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

موضوع: انجام تنظیمات تایمر کانترlpc1768 با استفاده از توابع cmsis

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض انجام تنظیمات تایمر کانترlpc1768 با استفاده از توابع cmsis

    سلام دوستان . من آموزش میکروکنترلر 1768 رو از سایتتون خریدم . دستتون درد نکنه .خیلی خوب بود و کاربردی (شاید بهتر از این نمیشد دیگه). اما من یه مشکل توش دارم . تو قسمت cmsis چند مورد مهم توش گفته نشده و منم هر چی گشتم گیرم نیومد.
    اولین مشکل من اینه که وقتی از تایمر به عنوان شمارنده استفاده میشه ، نمی دونم که چطوری باید با دستورات cmsis تعیین کنم که کدوم یکی از پایه های capture به عنوان ورودی پالس میکرو انتخاب بشن . من برای این کار رجیستر ctcr رو دستی تنظیم می کنم (مشکلم حل میشه )اما من می خوام با استفاده از دستورات cmsis این کار رو انجام بدم.
    دومین مشکلم هم اینه که تو مد کانتر نمیشه با دستوراتی که برای تایمر دادید prescaler رو تنظیم کرد.
    سومیش هم اینه که مقدار تایمر رو بخوام دستی تغییر بدم یا مستقیم بخونم باید از چه دستوری استفاده کنم؟ من برای اینکار رجیستر tc رو میخونم و دست می زنم اما می خوام دستور cmsis اون رو بدونم .
    فعلا همین 3 مشکل رو حل کنید ممنون می شم.
    اینم نمونه کدمه
    کد:
    
    
    
    
    
    // created by neamatollah tahamtan
    
    
    
    
    
    #include "lpc17xx_gpio.h"
    #include "lpc17xx_adc.h"
    #include "lpc17xx_pinsel.h"
    #include "lpc17xx_libcfg_default.h"
    #include <stdio.h>
    #include "lpc17xx_timer.h"
    void delay (uint32_t Time)
    {
        uint32_t i;
        
        i = 0;
        while (Time--) {
            for (i = 0; i < 5000; i++);
        }
    }
    // ****************************************************
    int main (void)
    {
    PINSEL_CFG_Type PinCfg;    
    TIM_TIMERCFG_Type TIM_ConfigStruct;
        TIM_CAPTURECFG_Type TIM_CaptureConfigStruct;
        // ---------------- Configuration ---------------    
            //unsigned int s;
        unsigned char p[16];
        //uint32_t adc_value;    
        
        
     // set_PinFunc ( 0, 23, PINSEL_FUNC_1);
      //lcd_init();
        PinCfg.Funcnum = 3;
        PinCfg.OpenDrain = 0;
        PinCfg.Pinmode = 0;
        PinCfg.Portnum = 1;
        PinCfg.Pinnum = 27;
        PINSEL_ConfigPin(&PinCfg);
     
        // ---------------------------------------------------
        // Initialize timer 0, prescale count time of 100uS
    // TIM_ConfigStruct.PrescaleOption = TIM_PRESCALE_TICKVAL;
        TIM_ConfigStruct.PrescaleOption = TIM_PRESCALE_USVAL;
     TIM_ConfigStruct.PrescaleValue    = 2;
    
         TIM_Init(LPC_TIM0, TIM_COUNTER_RISING_MODE,&TIM_ConfigStruct);
      //---------------------------------------------------------------    
        // use channel 0, CAPn.0
        TIM_CaptureConfigStruct.CaptureChannel = 1;
        // Enable capture on CAPn.0 rising edge
        TIM_CaptureConfigStruct.RisingEdge = ENABLE;
        // Enable capture on CAPn.0 falling edge
        TIM_CaptureConfigStruct.FallingEdge = DISABLE;
        // Generate capture interrupt
        TIM_CaptureConfigStruct.IntOnCaption = DISABLE;
    
        // Set configuration for Tim_config and Tim_MatchConfig
        TIM_ConfigCapture(LPC_TIM0, &TIM_CaptureConfigStruct);
         TIM_ResetCounter(LPC_TIM0);
    //LPC_TIM0->TC=25;
        // To start timer 0
    
        TIM_Cmd(LPC_TIM0,ENABLE);
        
    LPC_TIM0->CTCR=5;
       lcd_init ();
        lcd_clear ();    
      set_cursor (0, 0); //( column,  line);
      lcd_print ("HAMED TAHAMTAN");
        delay(1000);
        while (1)
        {
        //    while (LPC_TIM0->TC <50);
    //LPC_TIM0->TC =0;
            sprintf(p," %i",LPC_TIM0->TC);    
            lcd_print(p);
            delay(3000);
            lcd_clear();
            
        }
    
    }
        
        
        //lcd_clear();
        //set_cursor(0,0);
        //lcd_print("hamed tahamtn");
        
    
     
            
            //sprintf(p," %i",s);    
            //lcd_print(p);
            //delay(3000);
            //lcd_clear();

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

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

    پیش فرض

    سلام
    مشکل اصلی اینه که اصلا وارد مد کانتر نمیشه و این بخاطر نقص دستورات cmsis هست و باید یا تو دستورات خودتون دست ببرید که این کار را بکنه یا رجیستر ییه تنظیم اول کار بزنید:
    کد:
    LPC_TIM0->CTCR = 0x1;

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


  5. #3
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض

    سلام جناب زرکوب . من قبلا رجیستری رو خونده ام (حدود 2 سال پیش )اگه نگاه کنید تو کد هم خودم با رجیستری این کار رو کردم
    LPC_TIM0->CTCR=5;
    و مشکلم حل شد . اما ..
    من می خواستم که با دستورات cmsis اون رو راه اندازی کنم اگه نمیشه که حرفی توش نیست؟
    فقط در حالت کانتر prescaler هم تنظیم نمیشه اون هم با cmsis نمیشه؟

  6. #4
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض

    دوست گرامی جناب زرکوب ،چالش من تو اینه که زبون c رو خوب بلد نیستم . نمیدونم این توابع درختیی که جود داره پارامترهاش رو چطوری باید بدونم چی هستن؟ الان توی خط 257 اگه نگاه کنید می بینید که یه تابع درختی معرفی کرده برای زمانی که از شمارنده می خوایم استفاده کنیم . اسمش هم اینه TIM_COUNTERCFG_Type اما پارامترهاش رو من نمی تونم پیدا کنم . اگه لطفی کنید و این رو توضیح بدید ممنون می شم.

    در صورتی هم که می فرمایید برای تایمر تو کتابخونه کاملی وجود نداره میشه لطف بفرمایید اعلام آمادگی کنید که با هم این کتابخونه رو کتملش کنیم . من خودم دستی تونستم کاری کنم که تو مد شمارنده هم پری اسکیلر تنظیم بشه (تابع رو دست کاری کردم). حالا تنها مونده که یه پارامتر به تابع تایمر اضافه کنیم که با اون پایه ی تایمر رو مشخص کنیم . مد تایمر رو هم خودم می تونم تو همون کتاب خونه جوری دست بزنک که درست شه . تنها مشکلم اضافه کردن یه پارامتر به تابع درختی تایمر هست که پایه مورد نظرم رو روی شمارنده ست کنه .
    باز هم از کمکتون ممنون.

  7. #5
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض

    باید ببخشید ک من همینطوری پشت سر هم جواب خودم رو می دم . دوست دارم این بحث به نتیجه برسه . خودم هم دارم مداوم توش گشت می زنم شاید چیزی دستگیرم بشه .

    در این مورد که شاید برای کانتر تابعی در نظر گرفته نشده باشه فکر کنم دارم اشتباه می کنم . چون تو تابع TIM_INIT اگه نگاهی بندازید وقتی که میره تو مد کانتر این برنامه رو نوشته
    کد:
    
            pCounterCfg = (TIM_COUNTERCFG_Type *)TIM_ConfigStruct;
            TIMx->CCR  &= ~TIM_CTCR_INPUT_MASK;
            if (pCounterCfg->CountInputSelect == TIM_COUNTER_INCAP1)
                TIMx->CCR |= _BIT(2);
    اول تا از همه اینکه تابع کانتر رو به این اسم معرفی کرده TIM_COUNTERCFG_Type
    و دوما هم اینکه از این خط pCounterCfg->CountInputSelect == TIM_COUNTER_INCAP1معلومه که پارامتری به عنوان INPUT SELECT تعریف شده که با استفاده از اون پایه ورودیمون رو می تونیم معرفی کنیم . که البته هم باید همینطور باشه .
    حالا باز اگه اساتید نظر دیگه ای دارن لطف کنن اینجا اعلام کنن که ما هم استفاده کنیم . با تشکر
    ویرایش توسط hamedtahamtan : 22-07-2015 در ساعت 22:08

  8. #6
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض

    باز هم ببخشید این چندمین باریه که دارم این پست رو آپدیت می کنم .
    من یه سری تغییرات توی تابع tim_init دادم . ولی هنوز نتونستم یه پارامتر دیگه به تابع اضافه کنم برا انتخاب پایه . اینم تغییرات تا اینجا تنها مشکل تابع انتخاب نشدن پایه است. از خط 367 (پایین تابع TIM_INIT) رو به این صورت تغییر دادم .
    کد:
        else
        {
            if (TimerCounterMode == TIM_COUNTER_FALLING_MODE )
            {
                TIMx->CTCR=2;
            }
            else
            {
                if (TimerCounterMode == TIM_COUNTER_ANY_MODE )
                TIMx->CTCR=3;
            }
        }
        
        
            pCounterCfg = (TIM_COUNTERCFG_Type *)TIM_ConfigStruct;
            TIMx->CCR  &= ~TIM_CTCR_INPUT_MASK;
            if (pCounterCfg->CountInputSelect == TIM_COUNTER_INCAP1)
                TIMx->CCR |= _BIT(2);
        }



    البته الان که داشتم فایل .h رو چک می کردم به این تابع رسیدم.
    کد:
    /* TIM configuration functions --------*/
    void TIM_ConfigStructInit(TIM_MODE_OPT TimerCounterMode, void *TIM_ConfigStruct);
    به نظر شما اگه این تابع رو مقدار بدیم درست نمیشه ؟منظورم مشکلمون باکانتره


    اساتید باز هم میگم اولویت من اینه که تابع اصلی کانتر که توی خود cmsis نوشته شده رو بنویسم . اما اگه نشد با دستکاری تابع این مشکل حل میشه خب .

    البته اگه این درخواستی که من اینجا دارم(کمک برای پیدا کردن تابع یا اصلاح اون ) در خواست غیر منطقیی هست لطف کنید همینجا بگید که من بیخود نیام اینجا هی پست بزارم و درخواست بدم. باز هم تشکر
    ویرایش توسط hamedtahamtan : 21-07-2015 در ساعت 17:12

  9. #7
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض


  10. #8
    کاربر فعال hamid69 آواتار ها
    تاریخ عضویت
    Apr 2010
    نام
    حمید لطفعلی زاده
    نوشته ها
    110
    تشکر
    21
    تشکر شده 266 بار در 49 پست

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

    پیش فرض

    مهندس یه چیزی را بگم . اگر بناست در این cmsis که هدف اینه که درگیر نکنیم خودمون را با رجیستر، یک چیزی به عنوان آپشن ورودی تغییر دهیم و ان کار نشود بعد بریم در تابعش ببینیم اصلا برای آن آپشن چیزی تعریف نکرده خوب این یعنی چی!؟
    من خیلی وقت نذاشتم ببینم این چطور میشه یا نه ولی در این مورد حتما باید در تابع مربوطه رجیستر LPC_TIM0->CTCR یه چیزی داخلش قرار بگیره تا بره در کانتر. وقتی نباشه به نظر شما میره!؟

  12. #10
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض

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

    ممنون ولی توی این پست هم جواب من رو نداده و مشکل هنوز پا بر جاست .




    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    سلام
    مشکل اصلی اینه که اصلا وارد مد کانتر نمیشه و این بخاطر نقص دستورات cmsis هست و باید یا تو دستورات خودتون دست ببرید که این کار را بکنه یا رجیستر ییه تنظیم اول کار بزنید:
    کد:
    LPC_TIM0->CTCR = 0x1;


    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    مهندس یه چیزی را بگم . اگر بناست در این cmsis که هدف اینه که درگیر نکنیم خودمون را با رجیستر، یک چیزی به عنوان آپشن ورودی تغییر دهیم و ان کار نشود بعد بریم در تابعش ببینیم اصلا برای آن آپشن چیزی تعریف نکرده خوب این یعنی چی!؟
    من خیلی وقت نذاشتم ببینم این چطور میشه یا نه ولی در این مورد حتما باید در تابع مربوطه رجیستر LPC_TIM0->CTCR یه چیزی داخلش قرار بگیره تا بره در کانتر. وقتی نباشه به نظر شما میره!؟

    جناب مهندس زرکوب من درست متوجه منظورتون نشدم. دقیقا منظورتون چیه؟
    دارین می گین حتما باید خودمون دستی ctcr رو دست بزنیم تا بره تو مد کانتر؟
    یا اینکه آپشنی توی cmsis وجود داره که اون رو ببریم تو این مد؟
    تا اینجا که اون اتفاقی که من می گم نمی افته . تقریبا اون بالا کامل توضیح دادم.
    مشکل اول این تابعی که برای کانتر معرفی شده اینه که پایه رو نمی بره تو مد کانتر
    و مشکل دوم هم اینه که اصلا prescaler رو تنظیم نمی کنه .
    احتمال می دم که تابع دیگه ای رو باید اضاف کنیم
    یا اینکه اپشن های دیگری باید داشته باشه که من نتونستم پیدا کنم؟
    البته من هم به زبون c مسلط نیستم .
    اگه راهی داره شماها جلوی پاهام بگذارید

  13. #11
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض

    الان تنها تابعی که برای کانتر گذاشتن اینه
    کد:
     TIM_TIMERCFG_Type;
    
    /** @brief Configuration structure in COUNTER mode */
    typedef struct {
    
        uint8_t CounterOption;        /**< Counter Option, should be:
                                    - TIM_COUNTER_INCAP0: CAPn.0 input pin for TIMERn
                                    - TIM_COUNTER_INCAP1: CAPn.1 input pin for TIMERn
                                    */
        uint8_t CountInputSelect;
        uint8_t Reserved[2];
    } TIM_COUNTERCFG_Type;
    2 تا پارامتر داره که پارامتر اول رو نوشته یکی از این 2 تا کد توش بگذارید
    کد:
                                    - TIM_COUNTER_INCAP0: CAPn.0 input pin for TIMERn
                                    - TIM_COUNTER_INCAP1: CAPn.1 input pin for TIMERn
                                    */
    ولی پارامتر دوم رو ننوشته چی توش بگذاریم . حالا . عدد؟ حروف؟
    فکر می کنم(البته فقط فکر میکنم و به احتمال 99 درصد فکرم اشتباهه ولی فکره دیگه چیکارش میشه کرد؟)که پارامتر ها رو اشتباه گفته . چون من پارامتر اول رو که تغییر می دم پری اسکیلر رو تغییر می ده. پارامتر دوم هم که هیچ کاری کلا نمی کنه فقط وقتی تغییرش میدم وقفه کپچر 0 رو فعال می کنه همین

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

    پیش فرض

    نقل قول نوشته اصلی توسط hamedtahamtan نمایش پست ها
    جناب مهندس زرکوب من درست متوجه منظورتون نشدم. دقیقا منظورتون چیه؟
    مهندس توضیحاتم واضح بود چیش را متوجه نشدید؟
    میگم این کتابخونه باید طوری باشه که وقتی آپشن هاش عوض می کنیم کار کنه و درست باشه . نه اینکه ناقص باشه و مجبور بشیم بریم توش دستکاری کنیم تا درست بشه ! اصلا دلیل استفاده از cmsis چیه ؟ اینکه درگیر رجیستری و این جور کارا نشویم. با این موارد و موارد دیگه که در مورد این کتابخونه هست یه کم زیر سوال میره استفاده از آن. چون استفاده می کنیم و کارمونم انجام میشه ولی یه جا به بن بست می خوریم اساسی

  15. #13
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض

    اوکی . به خاطر پست اولتون یه زره گیچ شدم .
    حالا
    اگه می شه کمک کنید این مورد رو حلش کنیم . من تقریبا همه ی راه هایی رو که می تونستم انجام دادم. دیگه راه دیگه ای رو بلد نیستم . اگه کار دیگه ای مونده بگید تا امتحان کنم .
    برنامه ها رو هم ر=توی پریفرال کیل و هم مستقیما با میکرو تست کردم که جوابش همونایی بود که بالا توضیح دادم.
    تو سایت ها ی انگلیسی هم تا اونجایی که تونستم سرچ کردم ولی چیزی به جز این چیزایی که بالا نوشتم دستگیرم نشد.
    اگه یه کم وقت بزارید کمک کنید و حلش کنید یا راهنمایی کنید که خودم حلش کنم ممنون می شم

  16. #14
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض

    کسی نبود ؟ من هنوز اینو می خوام ها
    مهمه به خدا اگه کسی می دونه بگه
    یعنی تا حالا هیچ کی نیازش نشده کانتر رو با cmsis راه بندازه؟
    عجبا

  17. #15
    کاربر علاقه مند
    تاریخ عضویت
    Jun 2013
    نوشته ها
    23
    تشکر
    5
    تشکر شده 1 بار در 1 پست

    پیش فرض

    یعنی کسی پیدا نشد اینو بلد باشه؟

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

  1. آموزش ساخت پروژه با توابع cmsis
    توسط Doloop در انجمن stm32
    پاسخ: 28
    آخرين نوشته: 19-07-2016, 19:17
  2. Dac در lpc1768(توابع cmsis)
    توسط ramin_kent در انجمن LPC series (NXP)
    پاسخ: 1
    آخرين نوشته: 25-02-2013, 00:27
  3. برنامه نویسی کرتکس ها بدون توابع cmsis
    توسط Aghaeifar در انجمن Cortex-a8-a9 arm9-11
    پاسخ: 31
    آخرين نوشته: 03-09-2012, 09:32
  4. توضیح دستورات cmsis
    توسط esi_52000 در انجمن LPC series (NXP)
    پاسخ: 8
    آخرين نوشته: 27-01-2012, 00:05

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

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