اطلاعیه

Collapse
No announcement yet.

مورد در رابطه با تایمر

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

    مورد در رابطه با تایمر

    سلام دوستان . چند تا سوال در مورد تعاریف تایمر ها داشتم
    1- اگه میشه یه تعریف دقیق و کامل در مورد کار mat و capture بدید.
    تا اونجایی که می دونم پایه کپچر برای اینه که هر وقت یه پالس روی اون اومد باید مقدار تایمر یه جا ثبت بشه (و حالا یه استفاده ای ازش بشه )ولی دقیقا نمی دونم کجا .
    بعد اینکه با تعریف وقفه کپچر مشکل دارم . اگه میشه توضیح کاملی در مورد کارایی اون بدید.
    و اینکه چطور میشه از اون به عنوان کانتر استفاده کرد؟اگه میشه با توابع cmsis توضیح بدید.


    #2
    پاسخ : مورد در رابطه با تایمر

    سلام به شما،
    کاربرد match تایمر در مقایسه مقدار تایمر با یک سطح است. که وقتی مقدار تایمر به سطح مورد تنظیم رسید یک فعالیت نظیر اینتراپت، ریست تایمر یا استپ تایمر بر اساس تنظیمات رخ میده. مثلاً ما میتونیم تایمر رو جوری تنظیم کنیم که هر شمارشش (1 به 2 ، 2 به 3) یک میلی ثانیه طول بکشه و یک سطح روی مثلا 20 مشخص کنیم. پس تایمر قاعدتاً وقتی 20 تا بشمورد، 20 میلی ثانیه زمان گذشته است. پس ما میتونیم در زمانی دقیق یک عملیات مثل اینتراپت داشته باشیم (هر 20 میلی ثانیه وقفه تولید شود)

    کاربرد Capture نیز برای اندازه گیری یک عرض پالس است. مثلا سنسورهای دیجیتال مقدار خروجی را بر حسب عرض پالس میدهند.
    رجیستر مربوط به مقدار capture هم بسته به میکروکنترلر متفاوت است.

    دیدگاه


      #3
      پاسخ : مورد در رابطه با تایمر

      با match مشکلی ندارم . اما در مورد کپچر هنوز نگرفتم استفاده دقیقش چیه . اگه میشه با مثال میکرو توضیح بدید .
      در ضمن من می خوام کانتر داشته باشم اما نمی دونم از کدوم پایه برای کانتر استفاده کنم . دارم با cmsis کد می زنم. تنظیماتش رو بلدم که تایمر رو کانتر تنظیم کنم . اما نمی دونم از کدوم پایه و چطوری باید استفاده کنم . خوندم که باید از پایه کپچر استفاده کنم ولی نمی دونم چطوری؟

      دیدگاه


        #4
        پاسخ : مورد در رابطه با تایمر

        سلام،
        مد کپچر برای اندازه گیری عرض پالس به این صورت است که مثلا شما روی لبه بالا رونده تنظیم می کنید پایه کپچر رو بعد زمانی که لبه بالا رونده بیاید مقدار عدد شمرده شده را روی رجیستر کپچر می ریزد. یعنی هر بار لبه را ببیند مقدار شمرده شده تا آن زمان را روی رجیستر کپچر می ریزد.
        البته شما می توانید حساسیت پایه را روی لبه بالا رونده و پایین رونده تنظیم کنید و در خلال برنامه عوض کنیدو هر زمان که خواستین مقدار تایمر را ریست کنید.

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

        دیدگاه


          #5
          پاسخ : مورد در رابطه با تایمر

          ممنون دوست گرامی . با رجیسترهاش مشکلی ندارم و می دونم چطوری تنظیم کنم که کدوم پایه کانتر بشه . اما من دارم با CMSIS کد می زنم . هر چی تو کتابخونه تایمر می گردم چیزی گیرم نمیاد
          اینم نمونه کدمه .
          کد:
          
          
          
          
          
          
          // 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_COUNTERCFG_Type TIM_ConfigStruct;
          	TIM_CAPTURECFG_Type TIM_CaptureConfigStruct;
          	// ---------------- Configuration ---------------	
          		//unsigned int s;
          	//unsigned char p[100];
          	//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 = 26;
          	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 = 0;
          	// 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);
          
            GPIO_SetDir(2, 1 , 1);
          	while (1)
          	{
          		while (LPC_TIM0->TC <50);
          LPC_TIM0->TC =0;
          	}
          
          }
          	
          	
          	//lcd_clear();
          	//set_cursor(0,0);
          	//lcd_print("hamed tahamtn");
          	
          
           
          		
          		//sprintf(p," %i",s);	
          		//lcd_print(p);
          		//delay(3000);
          		//lcd_clear();
          الان مشکلم اینه که کلاک تایمر نمیره روی کپچر و همینطوری روی کلاک CPUهست.
          تازه دستور پری اسکیل هم کار نمی کنه

          دیدگاه


            #6
            پاسخ : مورد در رابطه با تایمر

            البته بعضی کداش ربطی به کار نداشت . با رجیستر ها اگه رجیستر ctcr رومقدارشو 5 قرار بدم(البته برای مثال ) اونوقت کپچر 0.1 در حالت کانتر و مد raising قرار می گیره . تست هم کردم درست شد. اما با کد های cmsis هرکاری کردم نتونستم این کار رو کنم. البته بقیه تنظیمات مشکلی نداشتن. حالا اگه کسی هست که با cmsis کانتر رو راه انداخته لطف کنه و راهشو بگه. ممنون می شم.
            باز هم میگم فقط مشکلم تنظیم کردن پایه کپچر روی مد کانتر هستش اونم با cmsis. با رجیستری خودم بلدم

            دیدگاه


              #7
              پاسخ : مورد در رابطه با تایمر

              باز هم میگم فقط مشکلم تنظیم کردن پایه کپچر روی مد کانتر هستش اونم با cmsis. با رجیستری خودم بلدم
              ای بابا!!!!!یعنی کسی نیست که این کار رو با cmsis انجام داده باشه . ما که سخت درگیر شدیم اینجا. من هر چی گشتم تابعش رو توی کتابخونه پیدا نکردم . مجبور شدم دارم کتابخونه رو دست کاری می کنم . البته زبان c رو هم خیلی ابتدای بلدم واسه همین کارم ضعیف پیش میره . تا ابنجا با تغییر کتابخونه cmsis تونستم 2 تا مشکل رو حل کنم . مشکل اول این بود که توی مد کانتر دیگه پری اسکیل تنظیم نمی شد که اون رو حلش کردم.
              مورد دوم هم این که تونستم تایمر رو توی مد کانتر با لبه دلخواهم ببرم
              ولی هنوز مورد سوم رو نتونستم حل کنم(البته تو کتابخونه نتونستم . )برای این مورد باید یه پارامتر به تابع tim_init اضافه کنم که با استفاده از اون پایه مورد نظرم رو توی مد کانتر قرار بدم . اما بلد نیستم به این تابع درختی پارامتر اضافه کنم .


              دوستان اگه کسی میدونه توی cmsis چطوری باید کانتر رو ست کرد بگه
              در غیر اینصورت هم لطف کنید بگید چطوری می تونم به این تابعی که الا گفتم یه پارامتر درست کنم و توی کتابخونه ازش استفاده کنم؟
              تشکر

              دیدگاه


                #8
                پاسخ : مورد در رابطه با تایمر

                اینجا دوتا تابعی که نیاز دارین گفته شده:
                http://**************/showthread.php?689-%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D8%AA%D8%A7%DB%8C%D9%85%D8%B1-%DA%A9%D8%A7%D9%86%D8%AA%D8%B1-lpc1788-%D8%AF%D8%B1-%D9%85%D8%AF-%DA%A9%D8%A7%D9%86%D8%AA%D8%B1
                هر انسانی که احساس بی نیازی کند سرکش و طغیان گر می شود...

                دیدگاه


                  #9
                  پاسخ : مورد در رابطه با تایمر

                  اون اطلاعاتی که تو این پست هست جوابگو نیستند. من قبلا همشون رو امتحان کردم .
                  2 تا مشکل اساسی داره .
                  مشکل اوب اینه که pre scale تو این مد تنظیم نمیشه (وقتی تو حالت کانتره )
                  مشکل دومم هم اینه که اصلا پایه کپچر رو در حالت شمارنده قرار نمیده و نمیشه تنظیمش کرد.
                  تو تابع tim_init که جایی نیست که مشخص کنیم کدوم پایه کپچر رو می خوایم استفاده کنیم .
                  توی تابع کپچر هم تنظیمات فقط برای مد کپچر استفاده می شه نه مد کانتر یعنی پایه رو تنها می بره تو حالت کپچر

                  دیدگاه


                    #10
                    پاسخ : مورد در رابطه با تایمر

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

                    دیدگاه


                      #11
                      پاسخ : مورد در رابطه با تایمر

                      یعنی هیچکی نیست؟

                      دیدگاه

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