اطلاعیه

Collapse
No announcement yet.

رفع مشکل شمارنده دور موتور

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

    رفع مشکل شمارنده دور موتور

    سلام دوستان من یک شمارنده دور برای ماشین درست کردم که تو پروتئوس تو دور های پایین سرعتو نشون میده اما تو دورهای بالا سرعتو نشون نمیده
    سیستم به این صورته که تو هر یک دهم ثانیه مقدار کانتر یکو میخونه بعد از اعمال ریاضی اونو با سون سگمنت نشون میده اینم برنامش
    لطفا بگین کجای کارم ایراد داره
    [#include <mega32.h>
    char c1,c2,c3,c4;
    int a,c,b;
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    TCNT0=0x3D;
    c=a*600/58;
    TCNT1L=0;
    TCNT1H=0;
    }
    void main(void)
    {
    PORTC=0x00;
    DDRC=0xFF;
    PORTD=0x00;
    DDRD=0xFF;
    TCCR0=0x05;
    TCNT0=0x3D;
    OCR0=0x00;
    TCCR1A=0x00;
    TCCR1B=0x07;
    TCNT1H=0x00;
    TCNT1L=0x00;
    TIMSK=0x01;
    ACSR=0x80;
    #asm("sei&quot
    while (1)
    {
    a=TCNT1H<<8|TCNT1L;
    b=c;
    c1=b%10;
    b=b/10;
    c2=b%10;
    b=b/10;
    c3=b%10;
    b=b/10;
    c4=b;
    PORTC=c2<<4|c1;
    PORTD=c4<<4|c3;
    }
    }

    #2
    پاسخ : رفع مشکل شمارنده دور موتور

    نوشته اصلی توسط naeimian
    سلام دوستان من یک شمارنده دور برای ماشین درست کردم که تو پروتئوس تو دور های پایین سرعتو نشون میده اما تو دورهای بالا سرعتو نشون نمیده
    سیستم به این صورته که تو هر یک دهم ثانیه مقدار کانتر یکو میخونه بعد از اعمال ریاضی اونو با سون سگمنت نشون میده اینم برنامش
    لطفا بگین کجای کارم ایراد داره
    [#include <mega32.h>
    char c1,c2,c3,c4;
    int a,c,b;
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    TCNT0=0x3D;
    c=a*600/58;
    TCNT1L=0;
    TCNT1H=0;
    }
    void main(void)
    {
    PORTC=0x00;
    DDRC=0xFF;
    PORTD=0x00;
    DDRD=0xFF;
    TCCR0=0x05;
    TCNT0=0x3D;
    OCR0=0x00;
    TCCR1A=0x00;
    TCCR1B=0x07;
    TCNT1H=0x00;
    TCNT1L=0x00;
    TIMSK=0x01;
    ACSR=0x80;
    #asm("sei&quot
    while (1)
    {
    a=TCNT1H<<8|TCNT1L;
    b=c;
    c1=b%10;
    b=b/10;
    c2=b%10;
    b=b/10;
    c3=b%10;
    b=b/10;
    c4=b;
    PORTC=c2<<4|c1;
    PORTD=c4<<4|c3;
    }
    }
    سلام
    چرا تایمر صفر رو نبردی توی مد CTC ؟
    فرکانست چقدره ؟؟؟
    یه کریستال ساعت بگذار خیلی بهتره{با تایمر 2 کار کن (RTC)}
    فرکانس داخلی میکرو بگذار روی 8 مگا
    موفق باشید
    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
    معرفی نرم افزار Codewizard PWM
    با من بیشتر آشنا شوید

    دیدگاه


      #3
      پاسخ : رفع مشکل شمارنده دور موتور

      فرکانسم 2 مگاهرتز هستش
      خب اگه رو 8 بزارم نمیتونم 100 میلی ثانیه داشته باشم
      فکر کنم مد ctc برای تولید پالس باشه من فقط میخوام هر 0.1 ثانیه مقدار کانترو چک کنه بعد صفرش کنه تا بتونم دور بر دقیقه رو بدست بیارم
      میشه بیشتر توضیح بدین
      خیلی ممنونم

      دیدگاه


        #4
        پاسخ : رفع مشکل شمارنده دور موتور

        اینم نسخه کامل با فایل پروتئوس
        http://forum.techno-electro.com/attachment.php?aid=1856

        دیدگاه


          #5
          پاسخ : رفع مشکل شمارنده دور موتور

          نوشته اصلی توسط naeimian
          فرکانسم 2 مگاهرتز هستش
          خب اگه رو 8 بزارم نمیتونم 100 میلی ثانیه داشته باشم
          اجباری نیست که حتما از فرکانس داخلی به عنوان تایمر استفاده کنی ...
          ولی اگر کریستال ساعت بگذاری دیگه زمانتون مجزا هست و هم دقیقتر
          نوشته اصلی توسط naeimian
          فکر کنم مد ctc برای تولید پالس باشه من فقط میخوام هر 0.1 ثانیه مقدار کانترو چک کنه بعد صفرش کنه تا بتونم دور بر دقیقه رو بدست بیارم
          هم با خروجی میشه هم بدون خروجی
          اگر قسمت خروجی رو غیر فعال کنید و Compare Match Interrupt را فعال کنید میتوانید در روتین مقایسه کننده اون کارهاتون رو بکنید ....
          -----------------------------------------------------------
          کریستال ساعت رو روی پایه های TOSC1 و TOSC2 بگذارید و منبع کلاک تایمر دو رو بگذارید از پایه های TOSC1
          بعد تقسیمات تایمر 2 دیگه خیلی دقیقتر صورت میگیره ...
          در حقیقت شما با این کار یک ساعت درست میکنید و از زمان دقیق آن برای کارهایتان استفاده میکنید ...
          موفق باشید
          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
          معرفی نرم افزار Codewizard PWM
          با من بیشتر آشنا شوید

          دیدگاه


            #6
            پاسخ : رفع مشکل شمارنده دور موتور

            یک روش دیگر هم هست
            تایمر صفر رو بگذارید روی کانتر و بعد توی روتین OVF یک متغیر رو ++ کنید و تایمر یک هم به عنوان تایمر استفاده کنید ...
            بعد که وقتش رسید داخل روتین تایمر یک ، کانتر صفر رو غیر فعال کن و اون تعداد OVF رو ضرب در 256 کنید و به علاوه مقدار کانتر صفر کنید ... :nice:
            موفق باشید ....
            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
            معرفی نرم افزار Codewizard PWM
            با من بیشتر آشنا شوید

            دیدگاه


              #7
              پاسخ : رفع مشکل شمارنده دور موتور

              این هم نمونه کد
              کد:
              #include <mega32.h>
              unsigned char counter_overflow;
              unsigned int counter;
              interrupt [TIM0_OVF] void timer0_ovf_isr(void)
              {
                counter_overflow++;
              }
              interrupt [TIM1_COMPA] void timer1_compa_isr(void)
              {
                TCCR0=0; //stop counter0
                counter = (counter_overflow*256)+TCNT0;
                counter_overflow = 0;
                TCNT0 = 0;
                TCCR0=0x07; //start counter0
              }
              
              void main(void)
              {
              
              // Timer/Counter 0 initialization
              // Clock source: T0 pin Rising Edge
              // Mode: Normal top=0xFF
              TCCR0=0x07;
              TCNT0=0x00;
              OCR0=0x00;
              // Timer/Counter 1 initialization
              // Clock source: System Clock
              // Clock value: Timer1 Stopped
              // Mode: CTC top=OCR1A
              // Input Capture on Falling Edge
              // Compare A Match Interrupt: On
              TCCR1A=0x00;
              TCCR1B=0x08;
              OCR1AH=0x30;
              OCR1AL=0xD4;
              // Timer(s)/Counter(s) Interrupt(s) initialization
              TIMSK=0x11;
              // Global enable interrupts
              #asm("sei")
              
              while (1)
                 {
                 // Place your code here
              
                 }
              }
              فرکانس داخلی 8 مگا هرتز کنید
              [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
              معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
              معرفی نرم افزار Codewizard PWM
              با من بیشتر آشنا شوید

              دیدگاه


                #8
                پاسخ : رفع مشکل شمارنده دور موتور

                خیلی ممنون اما برنامه شما رو هم نوشتم بهتر شد اما بازم از هزار دور بیشترو نشون نمیده نمیدونم ایراد کار کجاییه. به نظر شما از سخت افزاره یا نرم افزار .من فقط تو پروتئوس تستش کردم.

                دیدگاه


                  #9
                  پاسخ : رفع مشکل شمارنده دور موتور

                  نوشته اصلی توسط naeimian
                  خیلی ممنون اما برنامه شما رو هم نوشتم بهتر شد اما بازم از هزار دور بیشترو نشون نمیده نمیدونم ایراد کار کجاییه. به نظر شما از سخت افزاره یا نرم افزار .من فقط تو پروتئوس تستش کردم.
                  نشون نمیده یعنی اینکه قاطی میکنه ؟؟؟
                  اینو تست کن
                  کد:
                  #include <mega32.h>
                  unsigned int counter_overflow
                  unsigned long int counter;
                  interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                  {
                    counter_overflow++;
                  }
                  interrupt [TIM1_COMPA] void timer1_compa_isr(void)
                  {
                    TCCR0=0; //stop counter0
                    counter = (counter_overflow*256)+TCNT0;
                    counter_overflow = 0;
                    TCNT0 = 0;
                    TCCR0=0x07; //start counter0
                  }
                  
                  void main(void)
                  {
                  
                  // Timer/Counter 0 initialization
                  // Clock source: T0 pin Rising Edge
                  // Mode: Normal top=0xFF
                  TCCR0=0x07;
                  TCNT0=0x00;
                  OCR0=0x00;
                  // Timer/Counter 1 initialization
                  // Clock source: System Clock
                  // Clock value: Timer1 Stopped
                  // Mode: CTC top=OCR1A
                  // Input Capture on Falling Edge
                  // Compare A Match Interrupt: On
                  TCCR1A=0x00;
                  TCCR1B=0x08;
                  OCR1AH=0x30;
                  OCR1AL=0xD4;
                  // Timer(s)/Counter(s) Interrupt(s) initialization
                  TIMSK=0x11;
                  // Global enable interrupts
                  #asm("sei")
                  
                  while (1)
                     {
                     // Place your code here
                  
                     }
                  }
                  اگر جواب نداد بدونید که انکدرتون نویز میندازه
                  [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                  معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                  معرفی نرم افزار Codewizard PWM
                  با من بیشتر آشنا شوید

                  دیدگاه


                    #10
                    پاسخ : رفع مشکل شمارنده دور موتور

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

                    دیدگاه


                      #11
                      پاسخ : رفع مشکل شمارنده دور موتور

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

                      صرفا جهت اطلاع ، لطفا بفرمایید حد اکثر فرکانسی که مدار میتواند بشمارد ، چند هرتز هست ؟

                      با احترام
                      93/2/3

                      دیدگاه


                        #12
                        پاسخ : رفع مشکل شمارنده دور موتور

                        تو مداری که من لازم دارم 10 کیلوهرتز که ماکزیمم فرکانسمه به راحتی میشماره اما در کل شمارش فرکانس فقط بستگی به متغیرهایی داره که انتخاب میکنی.
                        که اینجا دوستمون unsigned long int تعریف کرده بود
                        که فکر کنم بشه تا 4 گیگاهرتزو اندازه گرفت
                        البته اگه اشتباه نکرده باشم

                        دیدگاه


                          #13
                          پاسخ : رفع مشکل شمارنده دور موتور

                          نوشته اصلی توسط naeimian
                          مرسی مهندس جواب داد نمیدونم چه جوری محبتتونو جبران کنم. واقعا ممنونم
                          برام دعا کن :smile:
                          نوشته اصلی توسط naeimian
                          ایشالا همه مراحل زندگیتون موفق باشین....
                          سپاسگذارم
                          همچنین
                          نوشته اصلی توسط امیر معیری
                          صرفا جهت اطلاع ، لطفا بفرمایید حد اکثر فرکانسی که مدار میتواند بشمارد ، چند هرتز هست ؟
                          سلام
                          من این برنامه رو خیلی وقت پیش روی شبیه سازی تست زدم دیدم که حدودا" تا 90% فرکانس اسیلاتور میتونه جواب بده!! :eek:
                          تو عمل تستش نکردم ...
                          --------------------------------
                          موفق باشید
                          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                          معرفی نرم افزار Codewizard PWM
                          با من بیشتر آشنا شوید

                          دیدگاه


                            #14
                            پاسخ : رفع مشکل شمارنده دور موتور

                            نوشته اصلی توسط naeimian
                            تو مداری که من لازم دارم 10 کیلوهرتز که ماکزیمم فرکانسمه به راحتی میشماره اما در کل شمارش فرکانس فقط بستگی به متغیرهایی داره که انتخاب میکنی.
                            که اینجا دوستمون unsigned long int تعریف کرده بود
                            اگر 10 کیلو هرتز باشه که با همون برنامه قبلی هم جواب میده که ....
                            چون توی 100 میلی ثانیه متغیر کانتر میشه 1000 که در این صورت متغیر counter_overflow نهایتش میشه 4 !
                            پس متغیر counter_overflow سرریز نمیشه ...
                            مطمئن باش فرکانسش خیلی بیشتر بوده ...
                            نوشته اصلی توسط naeimian
                            که فکر کنم بشه تا 4 گیگاهرتزو اندازه گرفت
                            البته اگه اشتباه نکرده باشم
                            4 گیگا !!! :eek: :eek: :eek: :eek:
                            نکنه منظورتون 4مگا بوده ؟؟؟؟
                            درسته ؟؟؟
                            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                            معرفی نرم افزار Codewizard PWM
                            با من بیشتر آشنا شوید

                            دیدگاه


                              #15
                              پاسخ : رفع مشکل شمارنده دور موتور

                              نوشته اصلی توسط naeimian
                              سلام دوستان من یک شمارنده دور برای ماشین درست کردم که تو پروتئوس تو دور های پایین سرعتو نشون میده اما تو دورهای بالا سرعتو نشون نمیده
                              سیستم به این صورته که تو هر یک دهم ثانیه مقدار کانتر یکو میخونه بعد از اعمال ریاضی اونو با سون سگمنت نشون میده اینم برنامش
                              لطفا بگین کجای کارم ایراد داره
                              نوشته اصلی توسط naeimian
                              تو مداری که من لازم دارم 10 کیلوهرتز که ماکزیمم فرکانسمه به راحتی میشماره اما در کل شمارش فرکانس فقط بستگی به متغیرهایی داره که انتخاب میکنی.
                              که اینجا دوستمون unsigned long int تعریف کرده بود
                              که فکر کنم بشه تا 4 گیگاهرتزو اندازه گرفت
                              البته اگه اشتباه نکرده باشم
                              سلام
                              وقت بخیر

                              10 کیلوهرتز !! ، برای حد اکثر فرکانس دور موتور خودرو ؟

                              مطمئن هستید که این محدوده فرکانس برای شمارش دور موتور خودرو باید مورد شمارش قرار بگیره ؟

                              با احترام
                              93/2/4

                              دیدگاه

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