اطلاعیه

Collapse
No announcement yet.

استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

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

    استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

    من می خوام که ی قسمتی از برنامه ام 2 ثانیه اجرا بشه و می خوام که با تایمر 1 این کار رو بکنم
    مثلا
    می خوام ی فرکانس PWM رو به مدت چند ثانیه روی خروجی بندازم
    اما وقتی با حلقه for این کار رو می کنم فرکانس میاد پایین
    چیکار کنم که فرکانس تغییر چندانی نداشته باشه و بتونم چند ثانیه چند ثانیه فرکانس رو توی خروجی عوض کنم
    بهترین راهکار چیه؟؟؟
    حالا استفاده از تایمر یا چیز دیگه
    فقط می خوام خیلی تاخیر توی برنامه ایجاد نشه
    ممنون
    جدیدترین ویرایش توسط cpup4000; ۱۰:۳۸ ۱۳۹۵/۰۹/۲۳.
    ميتوني واسه تشکر اون دکمه جيزه رو فشار بدي!
    D:

    #2
    پاسخ : استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

    استفاده از حلقه for در واقع استفاده از همون تابع delay هستش. با اینکار فرکانس برنامه تغییر نمیکنه بلکه شما پروگرم کانتر و cpu رو داخل یه حلقه میندازید و اجازه نمیدید به کارای دیگه برسه.
    راهش همونطور که خودتون گفتید استفاده از تایمر هست. حالا مشکلتون دقیقا کجاس؟
    www.gam-co.blogsky.com

    دیدگاه


      #3
      پاسخ : استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

      والا مشکلم این هست که با تایمر 1 این کارو بکنم
      یعنی نمی دونم یاید چیکار کنم!!!!!!
      ميتوني واسه تشکر اون دکمه جيزه رو فشار بدي!
      D:

      دیدگاه


        #4
        پاسخ : استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

        من کد های برنامه رو دارم فقط موندم باید چیکار کنم که بشه ی قسمت رو چند ثانیه تکرار کرد
        ميتوني واسه تشکر اون دکمه جيزه رو فشار بدي!
        D:

        دیدگاه


          #5
          پاسخ : استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

          وقت بخیر

          پری اسکالر یا همون مقسم فرکانس اولیه تایمر رو تنظیم کن و زمان هر پالس رو بدست بیار و اورفلو اینتراپت تایمر رو فعال کن و یک عدد به تایمر بده ( بر اساس نیاز زمانی که داری ) وقتی اور فلو رخ بذه وارد وقفه اون تایمر میشی و دوباره مقدار دهی تایمر رو انجام یده و کاری که لازم داری رو انجام بده !! تایمر دوباره تکرار میشه .

          دیدگاه


            #6
            پاسخ : استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

            نوشته اصلی توسط taktrashe نمایش پست ها
            پری اسکالر یا همون مقسم فرکانس اولیه تایمر رو تنظیم کن و زمان هر پالس رو بدست بیار و اورفلو اینتراپت تایمر رو فعال کن و یک عدد به تایمر بده ( بر اساس نیاز زمانی که داری ) وقتی اور فلو رخ بذه وارد وقفه اون تایمر میشی و دوباره مقدار دهی تایمر رو انجام یده و کاری که لازم داری رو انجام بده !! تایمر دوباره تکرار میشه .
            خیلی شرمنده
            متوجه نشدم چی گفتین!!!!
            کد های من اینه
            #include <mega8.h>
            #define xtal 8000000
            long int a=0;
            void delay1()
            {
            TCNT2=0xe8;
            TCCR2=0B00000001; // Timer Clock = CLK/8
            while(!TIFR&0x01); // Wait Until Overflow
            TIFR=TIFR|0B00000001; // Clear TOV0
            TCCR2=0x00; // Stop Timer0
            }
            //void delay2()
            //{
            //TCNT2=0x58;
            //TCCR2=0B00000001; // Timer Clock = CLK/8
            //while(!TIFR&0x01); // Wait Until Overflow
            //TIFR=TIFR|0B00000001; // Clear TOV0
            //TCCR2=0x00; // Stop Timer0
            //}
            void main()
            {
            DDRB=0xFF;
            PORTB=0x00;
            TCCR2=0x00;
            TCNT2=0x00;
            while(1){
            while(a<60000)
            {
            PORTB.3=1;
            delay1();
            PORTB.3=0;
            delay1();
            a++;
            }
            a=0;
            while(b<60000)
            {
            PORTB.3=1;
            delay2();
            PORTB.3=0;
            delay2();
            b++;
            }
            }
            }
            دو تا حلقه گذاشتم برا تکرار تایمر
            دقیق باید چیکارش کنم؟؟؟
            ميتوني واسه تشکر اون دکمه جيزه رو فشار بدي!
            D:

            دیدگاه


              #7
              پاسخ : استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

              کسی نظری نداره؟؟؟؟
              ميتوني واسه تشکر اون دکمه جيزه رو فشار بدي!
              D:

              دیدگاه


                #8
                پاسخ : استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

                بجای دوتا تابعی که تعریف کردید باید وقفه تایمر رو فعال کنید
                www.gam-co.blogsky.com

                دیدگاه


                  #9
                  پاسخ : استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

                  یعنی شرط حلقه رو وقفه تایمر تعریف کنم؟؟؟؟
                  ميتوني واسه تشکر اون دکمه جيزه رو فشار بدي!
                  D:

                  دیدگاه


                    #10
                    پاسخ : استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

                    کد:
                    TCCR1A=(0<<COM1A1)|(0<<COM1A0)|(0<<COM1B1)|(0<<COM1B0)|(0<<FOC1A)|(0<<FOC1B)|(0<<WGM11)|(0<<WGM10);
                    TCCR1B=(0<<ICNC1)|(0<<ICES1)        |(1<<WGM13)|(1<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10);
                    
                    TCNT1H=0x00;
                    TCNT1L=0x00;
                    ICR1=625;
                    
                    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (1<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
                    
                    //4 Mhz / 64 = 62500 hz T= 16 us ==> 16 x 625 = 10 ms
                    
                    #pragma vector=TIMER1_CAPT_vect
                    
                    __interrupt void timer1_capt_isr(void)//every 10 ms
                    {
                    //write your timer code here
                    }

                    دیدگاه


                      #11
                      پاسخ : استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

                      ی کم توضیح میدین باید چیکار کرد؟؟؟
                      ميتوني واسه تشکر اون دکمه جيزه رو فشار بدي!
                      D:

                      دیدگاه


                        #12
                        پاسخ : استفاده از تایمر 1 برای اجرا شدن قسمتی از برنامه در زمان مشخص

                        کسی نمیتونه دقیق تر بگه باید چیکار کنم؟؟؟؟
                        ميتوني واسه تشکر اون دکمه جيزه رو فشار بدي!
                        D:

                        دیدگاه

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