اطلاعیه

Collapse
No announcement yet.

کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

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

    کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

    سلام دوستان من میخام زمان یک فرایند رو اندازه گیری کنم که حدودا زمان این فرایند زیر 5 میلی ثانیه هست
    دقت هم برام خیلی مهم هست
    تنظیمات تایمر 0 هم به صورت زیر هست
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: 16000.000 kHz
    // Mode: CTC top=OCR0
    // OC0 output: Disconnected
    // Timer Period: 1 us
    TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (1<<WGM01) | (0<<CS02) | (0<<CS01) | (1<<CS00);
    TCNT0=0x00;
    OCR0=0x0F;

    ولی عملا 1 میکرو ثانیه رو برای من نمیشماره
    دوستان نظرتوون چیه؟
    هنگ کردم
    کمک کنید
    متشگر از لطفتون

    #2
    پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

    سلام به شما

    فکر کنم با نحوه ی کار کرد تایمر آشنا نیستید
    این کدی که نوشتید که اصلا کار نمیکنه
    شما باید از تایمر 1 که 16 بیتی هستش استفاده کنید
    آرزوی سرافرازی برای ایران عزیز . . .


    دیدگاه


      #3
      پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

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

      /************************************************** *****
      This program was created by the
      CodeWizardAVR V3.12 Advanced
      Automatic Program Generator
      © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
      CodeVisionAVR C Compiler for Atmel AVR microcontrollers


      Project :
      Version :
      Date : 2017-07-27
      Author :
      Company :
      Comments:


      Chip type : ATmega32A
      Program type : Application
      AVR Core Clock frequency: 8.000000 MHz
      Memory model : Small
      External RAM size : 0
      Data Stack size : 512
      ************************************************** *****/

      #include <mega32a.h>
      #include "stdlib.h"

      // Alphanumeric LCD functions
      #include <alcd.h>

      unsigned long int a,b,c;
      unsigned char h[];
      // External Interrupt 0 service routine
      interrupt [EXT_INT0] void ext_int0_isr(void)
      {
      b=a;
      }

      // External Interrupt 1 service routine
      interrupt [EXT_INT1] void ext_int1_isr(void)
      {
      c=a-b;
      ltoa(c,h);
      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_puts(h);
      }

      // Timer 0 output compare interrupt service routine
      interrupt [TIM0_COMP] void timer0_comp_isr(void)
      {
      a++;
      }

      void main(void)
      {
      // Declare your local variables here

      // Reset Source checking
      if (MCUCSR & (1<<PORF))
      {
      // Power-on Reset
      MCUCSR=0;
      // Place your code here

      }
      else if (MCUCSR & (1<<EXTRF))
      {
      // External Reset
      MCUCSR=0;
      // Place your code here

      }
      else if (MCUCSR & (1<<BORF))
      {
      // Brown-Out Reset
      MCUCSR=0;
      // Place your code here

      }
      else
      {
      // Watchdog Reset
      MCUCSR=0;
      // Place your code here

      }

      // Input/Output Ports initialization
      // Port A initialization
      // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
      DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
      // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
      PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

      // Port B initialization
      // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=Out Bit2=In Bit1=In Bit0=In
      DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (1<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
      // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=0 Bit2=T Bit1=T Bit0=T
      PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

      // Port C initialization
      // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
      DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
      // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
      PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

      // Port D initialization
      // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
      DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
      // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
      PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

      // Timer/Counter 0 initialization
      // Clock source: System Clock
      // Clock value: 8000.000 kHz
      // Mode: CTC top=OCR0
      // OC0 output: Toggle on compare match
      // Timer Period: 1 us
      // Output Pulse(s):
      // OC0 Period: 2 us Width: 1 us
      TCCR0=(0<<WGM00) | (0<<COM01) | (1<<COM00) | (1<<WGM01) | (0<<CS02) | (0<<CS01) | (1<<CS00);
      TCNT0=0x00;
      OCR0=0x07;

      // Timer/Counter 1 initialization
      // Clock source: System Clock
      // Clock value: Timer1 Stopped
      // Mode: Normal top=0xFFFF
      // OC1A output: Disconnected
      // OC1B output: Disconnected
      // Noise Canceler: Off
      // Input Capture on Falling Edge
      // Timer1 Overflow Interrupt: Off
      // Input Capture Interrupt: Off
      // Compare A Match Interrupt: Off
      // Compare B Match Interrupt: Off
      TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
      TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
      TCNT1H=0x00;
      TCNT1L=0x00;
      ICR1H=0x00;
      ICR1L=0x00;
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;

      // Timer/Counter 2 initialization
      // Clock source: System Clock
      // Clock value: Timer2 Stopped
      // Mode: Normal top=0xFF
      // OC2 output: Disconnected
      ASSR=0<<AS2;
      TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
      TCNT2=0x00;
      OCR2=0x00;

      // Timer(s)/Counter(s) Interrupt(s) initialization
      TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (1<<OCIE0) | (0<<TOIE0);

      // External Interrupt(s) initialization
      // INT0: On
      // INT0 Mode: Rising Edge
      // INT1: On
      // INT1 Mode: Falling Edge
      // INT2: Off
      GICR|=(1<<INT1) | (1<<INT0) | (0<<INT2);
      MCUCR=(1<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00);
      MCUCSR=(0<<ISC2);
      GIFR=(1<<INTF1) | (1<<INTF0) | (0<<INTF2);

      // USART initialization
      // USART disabled
      UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

      // Analog Comparator initialization
      // Analog Comparator: Off
      // The Analog Comparator's positive input is
      // connected to the AIN0 pin
      // The Analog Comparator's negative input is
      // connected to the AIN1 pin
      ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
      SFIOR=(0<<ACME);

      // ADC initialization
      // ADC disabled
      ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

      // SPI initialization
      // SPI disabled
      SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

      // TWI initialization
      // TWI disabled
      TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

      // Alphanumeric LCD initialization
      // Connections are specified in the
      // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
      // RS - PORTA Bit 0
      // RD - PORTA Bit 1
      // EN - PORTA Bit 2
      // D4 - PORTA Bit 4
      // D5 - PORTA Bit 5
      // D6 - PORTA Bit 6
      // D7 - PORTA Bit 7
      // Characters/line: 16
      lcd_init(16);

      // Global enable interrupts
      #asm ("sei")

      while (1)
      {
      // Place your code here

      }
      }

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      نوشته اصلی توسط rezamajdi نمایش پست ها
      سلام به شما

      فکر کنم با نحوه ی کار کرد تایمر آشنا نیستید
      این کدی که نوشتید که اصلا کار نمیکنه
      شما باید از تایمر 1 که 16 بیتی هستش استفاده کنید
      میشه کمکم کنی دوست عزیز

      دیدگاه


        #4
        پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

        به این کد توجه کن



        // Timer/Counter 1 initialization
        // Clock source: System Clock
        // Clock value: 16000.000 kHz <<<<<<<<<
        // Mode: Normal top=0xFFFF
        // OC1A output: Disconnected
        // OC1B output: Disconnected
        // Noise Canceler: Off
        // Input Capture on Falling Edge
        // Timer Period: 4.096 ms <<<<<<<<<
        // Timer1 Overflow Interrupt: Off
        // Input Capture Interrupt: Off
        // Compare A Match Interrupt: Off
        // Compare B Match Interrupt: Off
        TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
        TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
        TCNT1H=0x00;
        TCNT1L=0x00;
        ICR1H=0x00;
        ICR1L=0x00;
        OCR1AH=0x00;
        OCR1AL=0x00;
        OCR1BH=0x00;
        OCR1BL=0x00;


        به اون دو تا کدی که علامت زده شده توجه کن
        فرکانس تایمر رو بهتره بالاتر بگیری برای دقت بیشتر
        دوره تناوب تایمر رو نگاه کن حدود 4 میلی ثانیه هستش
        اما دوره تناوب در کدی که شما نوشتی 1 میکروثانیه هستش که اصلا بدرد نمیخوره خیــــــــــــــــــــــــــلی کمه . . .

        سوالی داشتید در خدمتم
        جدیدترین ویرایش توسط rezamajdi; ۱۲:۱۷ ۱۳۹۶/۰۵/۰۵.
        آرزوی سرافرازی برای ایران عزیز . . .


        دیدگاه


          #5
          پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

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

          دیدگاه


            #6
            پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

            با این کدی که من برات نوشتم میتونی هر 62.5 نانو ثانیه رو بشماری چه رصد به میکرو ثانیه . . .

            اگه هم میخوای هر میکروثانیه رو بشماری باید فرکانس تایمر رو روی 1 مگاهرتز قرار بدی همین
            آرزوی سرافرازی برای ایران عزیز . . .


            دیدگاه


              #7
              پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

              ممنون از لطفت
              عملی هم به نظرت جواب میده؟
              چه نکاتی رو رعایت کنم که خطا رو تقریبا صفر بشه

              دلیل: ادغام دو پست برای جلوگیری از اسپم

              نوشته اصلی توسط rezamajdi نمایش پست ها
              به این کد توجه کن



              // Timer/Counter 1 initialization
              // Clock source: System Clock
              // Clock value: 16000.000 kHz <<<<<<<<<
              // Mode: Normal top=0xFFFF
              // OC1A output: Disconnected
              // OC1B output: Disconnected
              // Noise Canceler: Off
              // Input Capture on Falling Edge
              // Timer Period: 4.096 ms <<<<<<<<<
              // Timer1 Overflow Interrupt: Off
              // Input Capture Interrupt: Off
              // Compare A Match Interrupt: Off
              // Compare B Match Interrupt: Off
              TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
              TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
              TCNT1H=0x00;
              TCNT1L=0x00;
              ICR1H=0x00;
              ICR1L=0x00;
              OCR1AH=0x00;
              OCR1AL=0x00;
              OCR1BH=0x00;
              OCR1BL=0x00;


              به اون دو تا کدی که علامت زده شده توجه کن
              فرکانس تایمر رو بهتره بالاتر بگیری برای دقت بیشتر
              دوره تناوب تایمر رو نگاه کن حدود 4 میلی ثانیه هستش
              اما دوره تناوب در کدی که شما نوشتی 1 میکروثانیه هستش که اصلا بدرد نمیخوره خیــــــــــــــــــــــــــلی کمه . . .

              سوالی داشتید در خدمتم
              منظور از دوره تناوب اینجا چیه؟
              شرمنده که این قدر سوال میپرسم

              دیدگاه


                #8
                پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

                شما کارایی که من بت گفتم رو انجام بده دقتت خیلی میره بالا
                1_از تایمر 1 که 16 بیتی هستش استفاده کن
                2_فرکانس تایمر رو در بالا ترین حد که همون 16 مگاهرتز هستش قرار بده برای این کار باید فرکانس میکرو 16 مگاهرتز باشه

                دوره تناوب همون آورفلو هستش یعنی زمانی که طول میکشه تا شمارنده تایمر از صفر تا ماکزیمم خودش ( برای تایمر 1 که 16 بیتی هستش میشه 2 به توان 16) که میشه 65535 بشماره
                پس هروقت که تایمر به ماکزیمم مقدار خودش رسید اگه یه واحد دیگه بخواد افزایش پیدا کنه اصطلاحا آور فلو میشه ( سرریز میشه ) یعنی میاد از 0 شروع به شمارش میکنه . . .
                آرزوی سرافرازی برای ایران عزیز . . .


                دیدگاه


                  #9
                  پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

                  باز هم کمک کیند
                  جدیدترین ویرایش توسط hsn4890; ۱۲:۴۵ ۱۳۹۶/۰۵/۰۵. دلیل: اشتباه

                  دیدگاه


                    #10
                    پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

                    نوشته اصلی توسط rezamajdi نمایش پست ها
                    شما کارایی که من بت گفتم رو انجام بده دقتت خیلی میره بالا
                    1_از تایمر 1 که 16 بیتی هستش استفاده کن
                    2_فرکانس تایمر رو در بالا ترین حد که همون 16 مگاهرتز هستش قرار بده برای این کار باید فرکانس میکرو 16 مگاهرتز باشه

                    دوره تناوب همون آورفلو هستش یعنی زمانی که طول میکشه تا شمارنده تایمر از صفر تا ماکزیمم خودش ( برای تایمر 1 که 16 بیتی هستش میشه 2 به توان 16) که میشه 65535 بشماره
                    پس هروقت که تایمر به ماکزیمم مقدار خودش رسید اگه یه واحد دیگه بخواد افزایش پیدا کنه اصطلاحا آور فلو میشه ( سرریز میشه ) یعنی میاد از 0 شروع به شمارش میکنه . . .
                    دوست عزیز کاری که گفتی انجام دادم از روی رجیستر TCNT1 مقدار تایمر رو میخونم
                    ولی باز هم دقیق نیست
                    چیکار کنم؟

                    دیدگاه


                      #11
                      پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

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

                      بدرود
                      آرزوی سرافرازی برای ایران عزیز . . .


                      دیدگاه


                        #12
                        پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

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

                        بدرود
                        سلام
                        ببین دوست عزیز من میخام زمان انجام طول کشیدن یک فرایند رو اندازه گیری کنم
                        مثلا زمان شروع فرایند را با اینتراپت صفر (لبه بالا رونده) اعلام کنم و تایمر شروع به کار کنه
                        و زمان به پایان رسیدن را با اینتراپت یک (لبه پایین رونده) اعلام کنم و تایمر متوقف بشه
                        و زمان اندازه گیری شده را به من ببینم( فک میکنم اصلا برنامه نوشتنش کاری نداره ولی ی جای کار من ایراد داره که زمان واقعی نشون نمیده)
                        من برای تست از یک سیگنال مربعی استفاده میکنم که با فرکانس مشخص، ولی متاسفانه اصلا دقت نداره

                        دیدگاه


                          #13
                          پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

                          نوشته اصلی توسط hsn4890 نمایش پست ها
                          من برای تست از یک سیگنال مربعی استفاده میکنم که با فرکانس مشخص، ولی متاسفانه اصلا دقت نداره
                          فرکانس سیگنال چقدره؟؟؟
                          ثابت هست؟؟
                          ! Life doesn't get easier , you just get stronger

                          دیدگاه


                            #14
                            پاسخ : کمک برای استفاده از تایمر برای اندازه گیری زمان های زیر 5 میلی ثانیه

                            نوشته اصلی توسط Amirlopez نمایش پست ها
                            فرکانس سیگنال چقدره؟؟؟
                            ثابت هست؟؟
                            برای هر بار تست آره یک سیگنال ثابت هست

                            دلیل: ادغام دو پست برای جلوگیری از اسپم

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

                            چرا اینجوری میشه؟
                            مگه نباید کمتر نشون بده

                            دیدگاه

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