اطلاعیه

Collapse
No announcement yet.

چطور از تایمر های PIC استفاده کنم

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

    چطور از تایمر های PIC استفاده کنم

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

    #2
    پاسخ : چطور از تایمر های PIC استفاده کنم

    سلام.

    کار با تایمرهای PIC که خیلی راحته.
    اگه زمانهای کم و دقیق می خوای بهتره از تایمر 2 استفاده کنی و اگه زمانهای طولانی و دقیق می خوای بهتره از تایمر 1 به همراه مد compare از ماژول CCP استفاده کنی.

    از چه میکرویی و با چه فرکانس کلاکی استفاده میکنی و می خوای چه زمان سرریزی داشته باشی؟
    خویشتن را اصلاح کنید تا خداوند کارها را اصلاح کند. امیر المومنین علی (ع)

    دیدگاه


      #3
      پاسخ : چطور از تایمر های PIC استفاده کنم

      سلام.

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

      http://eng-serve.com/pic/pic_timer.html
      خویشتن را اصلاح کنید تا خداوند کارها را اصلاح کند. امیر المومنین علی (ع)

      دیدگاه


        #4
        پاسخ : چطور از تایمر های PIC استفاده کنم

        نوشته اصلی توسط hamed8419215
        سلام.

        کار با تایمرهای PIC که خیلی راحته.
        اگه زمانهای کم و دقیق می خوای بهتره از تایمر 2 استفاده کنی و اگه زمانهای طولانی و دقیق می خوای بهتره از تایمر 1 به همراه مد compare از ماژول CCP استفاده کنی.

        از چه میکرویی و با چه فرکانس کلاکی استفاده میکنی و می خوای چه زمان سرریزی داشته باشی؟
        PIC16F877 و میخوام زمان یک ثانیه رو بسازم و کریستالم 20M هرتزه

        دیدگاه


          #5
          پاسخ : چطور از تایمر های PIC استفاده کنم

          سلام.

          به طور کلی شما با کلاک 20 مگ هیچ وقت نمی تونی وقفه 1 ثانیه ای داشته باشی.
          ولی می تونی مثلا یک وقفه 0.1 ثانیه ای داشته باشی و توی ISR مربوطه یک دونه شمارنده بذاری و 10 بار بشماری تا یک ثانیه ایجاد شه.

          در ضمن استفاده از اون لینکی که گذاشتم رو فراموش نکن.

          الان با استفاده از همون لینک بالا یک وقفه 0.1 ثانیه ای میسازم (صرفا جهت آموزش)http://ifile.it/f0zvlak
          خویشتن را اصلاح کنید تا خداوند کارها را اصلاح کند. امیر المومنین علی (ع)

          دیدگاه


            #6
            پاسخ : پاسخ : چطور از تایمر های PIC استفاده کنم

            نوشته اصلی توسط hamed8419215
            سلام.

            به طور کلی شما با کلاک 20 مگ هیچ وقت نمی تونی وقفه 1 ثانیه ای داشته باشی.
            ولی می تونی مثلا یک وقفه 0.1 ثانیه ای داشته باشی و توی ISR مربوطه یک دونه شمارنده بذاری و 10 بار بشماری تا یک ثانیه ایجاد شه.

            در ضمن استفاده از اون لینکی که گذاشتم رو فراموش نکن.

            الان با استفاده از همون لینک بالا یک وقفه 0.1 ثانیه ای میسازم (صرفا جهت آموزش)http://ifile.it/f0zvlak
            lممنون از راهنماییتون فرمولی برای محاسبه دستی هم هست ؟ که هم.ن مقادیر نرم افزار رو بده

            دیدگاه


              #7
              پاسخ : چطور از تایمر های PIC استفاده کنم

              دوست عزیز بهترین کار اینه که به datasheet میکروکنترلر مربوطه مراجعه کنید وبخش مربوط به تایمرها رو مرور کنید چون استفاده از تایمرها یک سری ریزه کاری داره که با داشتن فرمول نمیتونید به کار باهاش مسلط بشید.

              دیدگاه


                #8
                پاسخ : چطور از تایمر های PIC استفاده کنم

                خوش بختانه میکرو های PIC دیتا شیت فوقالعادع دقیق و کاملی دارن بهتره از همون استفاده کنی.

                دیدگاه


                  #9
                  پاسخ : چطور از تایمر های PIC استفاده کنم

                  سلام به همگی
                  با تشکر از راهنمایی های همگی من موفق شدم با استفاده از تایمر 1 یک LED رو خاموش روشن کنم به این صورت که وقتی با یک میکرو سوئیچ پین سوم پورت C رو یک میکنم بعد از یک ثانیه LED ای که به پین هفتم پورت B وصل کردم روشن میشه و یک ثانیه بعد هم خاموش میشه . اینم کد های برنامه :
                  /*
                  * Source Code For PIC Timer1
                  *THis toggle LED on PORTB.F7 after 1 second to show interrupt rates after pressing push button
                  */


                  // Interrupt Function
                  char count=0;
                  void interrupt()
                  {
                  // Timer1 Interrupt - Freq = 10.00 Hz - Period = 0.1
                  if (PIR1.TMR1IF == 1) // timer 1 interrupt flag
                  {
                  count++;
                  PIR1.TMR1IF = 0; // interrupt must be cleared by software

                  TMR1H = 11; // preset for timer1 MSB register
                  TMR1L = 250; // preset for timer1 LSB register
                  if (count==10)
                  {
                  // PORTB.F7= ~PORTB.F7; // Toggle PORTB bit1 LED
                  PORTB.F7= 1; //
                  }
                  if (count==25)
                  {
                  PORTB.F7= 0;
                  count=0;

                  T1CON.TMR1ON = 0;

                  }

                  }
                  }
                  // code starts here...
                  void main()
                  {

                  // setup portb to show the interrupts by blibking LEDs
                  TRISB = 0x00; // PORT is all output...to show the interrupts
                  PORTB = 0; // start with all outputs low
                  TRISC=0xff;
                  PORTC=0;
                  //Timer1 Registers Prescaler= 8 - TMR1 Preset = 3066 - Freq = 10.00 Hz - Period = 0.1

                  T1CON.T1CKPS1 = 1; // bits 5-4 Prescaler Rate Select bits
                  T1CON.T1CKPS0 = 1; // bit 4






                  T1CON.TMR1CS = 0; // bit 1 Timer1 Clock Source Select bit...0 = Internal clock (FOSC/4)
                  T1CON.TMR1ON = 0; // bit 0 enables timer
                  TMR1H = 11; // preset for timer1 MSB register
                  TMR1L = 250; // preset for timer1 LSB register


                  PIR1.TMR1IF = 0; // clear timer1 interupt flag TMR1IF
                  PIE1.TMR1IE = 1; // enable Timer1 interrupts

                  INTCON.GIE = 1; // bit7 global interrupt enable
                  INTCON.PEIE = 1; // bit6 Peripheral Interrupt Enable bit...1 = Enables all unmasked peripheral interrupts


                  while(1) //endless loop
                  {
                  if (PORTC.F3==1) { T1CON.TMR1ON = 1;
                  count=0;
                  }
                  //if (PORTC.F3==1) PORTB.F6=1;
                  if (PORTC.F2==1) PORTB.F7=0;
                  // T1CON.TMR1ON = 1;

                  }
                  }
                  در ضمن توی این لینک یه فرمول برای محاسبه ی زمان مورد نیاز هست http://www.microcontrollerboard.com/...-tutorial.html

                  دیدگاه

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