اطلاعیه

Collapse
No announcement yet.

چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

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

    چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

    سلام
    این ساعتی که با تایمر 1 و مد ctc و تقسیم فرکانسی 256 (فرکانس میکرو 8 میگ هستش) نوشتم احساس میکنم 1 ثانیه ای که تولید میکنه از 1 ثانیه واقعی کمتره :angry:
    نظرتون چیه کجاش مشکل داره؟
    (هر کلاک تایمر 32 میکرو ثانیه طول میکشه.....لذا برا تولید 1 ثانیه نیاز به 31250 کلاک داریم لذا من OCR1A رو برابر 31249 قرار دادم که این ریجستر تو مد CTC تاپ_TOP_ رو تعیین میکنه)


    [code=c]#include <mega16.h>
    #include <stdlib.h>
    #include <lcd.h>
    #asm
    .equ __lcd_port=0x1B ;PORTA
    #endasm

    int Second=0, Minute=59, Hour=23;
    char Str_Second[1],Str_Minute[1],Str_Hour[1];

    interrupt[TIM1_COMPA] void Timer_Counter1_compa()
    {
    Second++;

    if(Second==60){Second=0; Minute++;}
    if(Minute==60){Minute=0; Hour++;}
    if(Hour==24){Hour=0;}

    itoa(Hour,Str_Hour);
    lcd_gotoxy(4,1);
    if(Hour<10)lcd_puts("0"
    lcd_puts(Str_Hour);
    lcd_gotoxy(6,1); lcd_putchar(':'
    //////////////////////////////////
    itoa(Minute,Str_Minute);
    lcd_gotoxy(7,1);
    if(Minute<10)lcd_puts("0"
    lcd_puts(Str_Minute);
    lcd_gotoxy(9,1); lcd_putchar(':'
    //////////////////////////////////
    itoa(Second,Str_Second);
    lcd_gotoxy(10,1);
    if(Second<10)lcd_puts("0"
    lcd_puts(Str_Second);
    }

    void main(void)
    {
    // TIMER1
    // Clock Timer1 = CLK/256 >>>>> CS10 = 0, CS11 = 0, CS12 = 1
    // Mode = CTC >>>>> WGM10 = 0, WGM11 = 0, WGM12 = 1, WGM13 = 0
    // Timer/Counter Output Compare A Match Interrupt Enable >>>>> OCIE1A = 1
    TCCR1A = (0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<FOC1A) | (0<<FOC1B) | (0<<WGM11) | (0<<WGM10);
    TCCR1B = (0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (0<<CS10);
    TIMSK = (0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (1<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
    //TIFR = (0<<OCF2) | (0<<TOV2) | (0<<ICF1) | (0<<OCF1A) | (0<<OCF1B) | (0<<TOV1) | (0<<OCF0) | (0<<TOV0 );
    //TCNT1L = 0X00; TCNT1H = 0X00;
    //OCR1AL = 0X00; OCR1AH = 0X00;
    //OCR1BL = 0X00; OCR1BH = 0X00;
    TCNT1 = 0;
    OCR1A = 31249;

    lcd_init(16);
    #asm("sei&quot

    lcd_gotoxy(0,0);lcd_puts("DMF313.IR Timer"

    while(1){};
    }[/code]
    اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

    اگه دوس دارید سریع به جواب برسید :
    1) قبل از پرسیدن سوال، بسرچید.
    2) سوالاتون رو با جزئیات کامل مطرح کنید.

    #2
    پاسخ : چرا این ساعت هایی که با تایمر 1 نوشتم دقیق نیست؟

    در چه حد دقیق نیست ؟
    ببین مثلا کلاک داخلی 8 مگ خودش یک درصد خطایی داره.
    ---------
    .
    .
    ...........

    دیدگاه


      #3
      پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

      هر دقیقه 10 ثانیه عقب میوفته ساعتی که نوشتم
      ============================
      یه سوال
      برا بحث ساعت
      تقسیم فرکانسی تایمر رو 8 بزاری یا 256 بزاری فرقی داره؟
      اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

      اگه دوس دارید سریع به جواب برسید :
      1) قبل از پرسیدن سوال، بسرچید.
      2) سوالاتون رو با جزئیات کامل مطرح کنید.

      دیدگاه


        #4
        پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

        نوشته اصلی توسط md3848
        هر دقیقه 10 ثانیه عقب میوفته ساعتی که نوشتم
        ============================
        یه سوال
        برا بحث ساعت
        تقسیم فرکانسی تایمر رو 8 بزاری یا 256 بزاری فرقی داره؟
        شاید مشکل از پروتئوسه وقتی شبیه سازی می کنید.
        تقسیم فرکانسی فکر نکنم تاثیری داشته باشه. مثلا با تقسیم فرکانسی بیشتر، شما زمان های کوچیک تر رو به دست میاری.
        اینکه تو 1 دقیقه 10 ثانیه عقب میفته عجیبه !!
        ---------
        .
        .
        ...........

        دیدگاه


          #5
          پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

          کریستال خارجی بذار.کریستال داخلی واسه ساعت دقیق نیست.
          الهم صل علی محمد و آل محمد و عجل فرجهم

          دیدگاه


            #6
            پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

            میگم اصلا شاید مشکل از کد های پروژه باشه :mrgreen:
            کسی کد ها رو نگاه کرده؟ :redface:
            اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

            اگه دوس دارید سریع به جواب برسید :
            1) قبل از پرسیدن سوال، بسرچید.
            2) سوالاتون رو با جزئیات کامل مطرح کنید.

            دیدگاه


              #7
              پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

              برای تولید 1 ثانیه دقیق تر بهتره از کریستال 32.768 کیلو هرتز بر روی پایه های مخصوص و در مد آسنکرون استفاده کنین.
              و گزینه بهتر استفاده از RTC مثل ds1307 یا pcf8583 هستش که میتونه ساعت واقعی رو براتون نگه داره.

              دیدگاه


                #8
                پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

                نوشته اصلی توسط md3848
                میگم اصلا شاید مشکل از کد های پروژه باشه :mrgreen:
                کسی کد ها رو نگاه کرده؟ :redface:
                کد رو دیدم.
                معمولا و عرفا و .... دستورات زیادی رو توی تابع وقفه نمیزارن. به جز دستور Second++; بقیه رو بیار تو حلقه وایل بزار.
                ---------
                .
                .
                ...........

                دیدگاه


                  #9
                  پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

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


                  در ضمن ممنون از همتون
                  مشکل از پروتئوس زهرماری بود....تا حالا صد دفه به این مشکل برخوردم که پروژه تو پروتئوس کار نمیکنه ولی در عمل کار میکنه
                  ولی نمیدونم چرا درس عبرت نمیشه برام

                  دم همتون گرم.


                  حالا که تو عمل بستم....بدون کریستال خارجی تقریبا 1-2 ثانیه تو هر دقیقه جلو میوفته O_o
                  اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

                  اگه دوس دارید سریع به جواب برسید :
                  1) قبل از پرسیدن سوال، بسرچید.
                  2) سوالاتون رو با جزئیات کامل مطرح کنید.

                  دیدگاه


                    #10
                    پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

                    نوشته اصلی توسط electera
                    برای تولید 1 ثانیه دقیق تر بهتره از کریستال 32.768 کیلو هرتز بر روی پایه های مخصوص و در مد آسنکرون استفاده کنین.
                    و گزینه بهتر استفاده از RTC مثل ds1307 یا pcf8583 هستش که میتونه ساعت واقعی رو براتون نگه داره.
                    میشه با کریستال خارجی 8 مگ و تایمر1 هم ساعت دقیق ساخت از نظر دقت هیچ فرقی با موارد فوق نداره.
                    الهم صل علی محمد و آل محمد و عجل فرجهم

                    دیدگاه


                      #11
                      پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

                      نوشته اصلی توسط md3848
                      فرقی نداره فک کنم
                      مگه وقتی کد های داخل وقفه مقایسه دارج اجرا میشن تایمر شروع به شمارش نمیکنه؟؟؟


                      در ضمن ممنون از همتون
                      مشکل از پروتئوس زهرماری بود....تا حالا صد دفه به این مشکل برخوردم که پروژه تو پروتئوس کار نمیکنه ولی در عمل کار میکنه
                      ولی نمیدونم چرا درس عبرت نمیشه برام

                      دم همتون گرم.


                      حالا که تو عمل بستم....بدون کریستال خارجی تقریبا 1-2 ثانیه تو هر دقیقه جلو میوفته O_o
                      درسته، تایمر کار می کنه. اما اینو در نظر بگیرید که روتین وقفه باید سبک باشه. وگرنه سیستم با مشکل مواجه میشه. من خودم پروژه داشتم که چون تابع وقفه زیاد بود، میکرو هنگ می کرد.
                      به هر حال روش اصولی اینه که تابع وقفه سبک باشه، اما روش اجباری نیست !!
                      پ.ن. پروتئوس کلا تایمر رو درست نمی تونه شبیه سازی کنه. خیلی جلو عقب میفته.
                      ---------
                      .
                      .
                      ...........

                      دیدگاه


                        #12
                        پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

                        تو عمل-بدون کریستال خارجی-تو هر 5 دقیقه 8 ثانیه جلو میفته...
                        حالا با کریستال هم تست کنم .....ببینیم چی میشه

                        اضافه شده در تاریخ :
                        خب مثل این که کریستال خارجی 8 میگ ندارم :mrgreen:
                        اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

                        اگه دوس دارید سریع به جواب برسید :
                        1) قبل از پرسیدن سوال، بسرچید.
                        2) سوالاتون رو با جزئیات کامل مطرح کنید.

                        دیدگاه


                          #13
                          پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

                          دوست عزیز تو پروتیوس اگه cpu load بیشتر از 70 در صد بزنه (در نوار پایین کنار دکمه play) جوابش درست نیست
                          تو عمل هم می تونی از کریستال ساعت استفاده کنی و rtc میکرو را فعال کنی همچنین میشه از کریستال خارجی استفاده کرد کریستال داخلی با افزایش فشار رو میکرو دمای محیط و منبع تغذیه و.... تغییر میکنه در نتیجه محاسبات تایمینگ درست از آب در نمیاد

                          دیدگاه


                            #14
                            پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

                            برا ساعت ds1307 می ذارن نه تایمر میکرو

                            دیدگاه


                              #15
                              پاسخ : چرا این ساعتی که با تایمر 1 نوشتم دقیق نیست؟

                              ممنون از شما دوستان اینایی که میگید با rtc-ماژول های سری ds و... رو من انجام دادم
                              حالا میخوام با تایمر انجام بدم
                              برام سواله که چرا تایمر این قدر دقتش پایینه....
                              اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

                              اگه دوس دارید سریع به جواب برسید :
                              1) قبل از پرسیدن سوال، بسرچید.
                              2) سوالاتون رو با جزئیات کامل مطرح کنید.

                              دیدگاه

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