اطلاعیه

Collapse
No announcement yet.

مشکل ساخت ساعت با کریستال ساعت در Atmel studio

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

    مشکل ساخت ساعت با کریستال ساعت در Atmel studio

    سلام و خسته نباشید به همه اساتید
    من دارم از کدویژن به انمل استودیو میرم ، یه برنامه ساعت نوشتم با اتمگا8 و کریستال ساعت
    پروژه رو که روی بردبرد میبندم اصلا ثانیه افزایش پیدا نمیکنه و فقط روی صفر هستش . یک ال ای دی چشمک زن هم گذاشتم که از کارکرد مدار مطمئن باشم . البته ال ای دی کاری به تایمر نداره.
    کدهای پروزه هم میذارم ، ممنون میشم کمکم کنید


    #define F_CPU 1000000UL
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <stdio.h>
    #include "LCD/CharacterLCDLib.h"
    #include <util/delay.h>

    char str[16];
    char s,m,h;

    ISR (TIMER2_OVF_vect)
    {
    s++;
    }

    int main(void)
    {
    DDRB|=0b00000000;
    DDRD|=0b00000001;

    // Timer/Counter 2 initialization
    // Clock source: TOSC1 pin
    // Clock value: PCK2/128
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x08;
    TCCR2=0x05;
    TCNT2=0x00;
    OCR2=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x40;
    asm("sei");

    lcd_init();
    lcd_puts("Hello World");
    while (1)
    {
    PORTD|=0b00000001;
    _delay_ms (1000);
    PORTD&=!0b00000001;
    _delay_ms(1000);
    sprintf(str,"LCD %d%d",s/10%10,s%10);
    lcd_clear();
    lcd_gotoxy(2,1);
    lcd_puts(str);
    if (s>=60)
    {
    m++;
    s=0;
    }
    else if (m>=60)
    {
    h++;
    m=0;
    }
    if (h>=24)
    {
    h=0;
    }

    }
    }

    #2
    پاسخ : مشکل ساخت ساعت با کریستال ساعت در Atmel studio

    یه دستور toggle برای led توی زیرروال وقفه تایمر بزارید ببینید اصلا وارد وقفه تایمر میشه یانه؟
    اگه ال ای دی چشمک نزد پیکره بندی تایمر و یا سخت افزار مربوطه رو چک کنید ...

    دیدگاه


      #3
      پاسخ : مشکل ساخت ساعت با کریستال ساعت در Atmel studio

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

      sei();
      در ضمن برای قرار دادن سورس کد میتونید اون رو بین تگ های c++ ادیتور بزارید تا بهتر دیده بشه.

      دیدگاه


        #4
        پاسخ : مشکل ساخت ساعت با کریستال ساعت در Atmel studio

        نوشته اصلی توسط kargahelec نمایش پست ها
        یه دستور toggle برای led توی زیرروال وقفه تایمر بزارید ببینید اصلا وارد وقفه تایمر میشه یانه؟
        اگه ال ای دی چشمک نزد پیکره بندی تایمر و یا سخت افزار مربوطه رو چک کنید ...
        الان چک کردم ولی اصلا ال ای دی چشمک نمیزنه ، یعنی چرا وقفه تایمر2 کار نمیکنه ؟ رجیسترها رو اشتباه تنظیم نکردم؟!

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

        نوشته اصلی توسط A.I.E نمایش پست ها
        سلام.
        برای فعال کردن بیت مجور وقفه عمومی از دستور زیر استفاده کنید.چیزی که شما نوشتید برای کدویژن هست:

        sei();
        در ضمن برای قرار دادن سورس کد میتونید اون رو بین تگ های c++ ادیتور بزارید تا بهتر دیده بشه.
        سلام
        قبلا خونده بودم که به هر دوصورت میشه وقفه کلی رو فعال کرد ، به هر حال به صورتی که شما گفتید هم انجام دادم ولی تفاوتی در نتیجه کار نداشت.
        ممنون ، چشم از تگ های C++ استفاده میکنم

        دیدگاه


          #5
          پاسخ : مشکل ساخت ساعت با کریستال ساعت در Atmel studio

          نوشته اصلی توسط kargahelec نمایش پست ها
          یه دستور toggle برای led توی زیرروال وقفه تایمر بزارید ببینید اصلا وارد وقفه تایمر میشه یانه؟
          اگه ال ای دی چشمک نزد پیکره بندی تایمر و یا سخت افزار مربوطه رو چک کنید ...
          الان وقفه تایمر2 رو بدون کریستال ساعت راه اندازی کردم،کار میکنه
          وقتی فرکانسش رو روی کریستال خارجی ساعت میذارم وقفه کار نمیکنه

          دیدگاه


            #6
            پاسخ : مشکل ساخت ساعت با کریستال ساعت در Atmel studio

            نوشته اصلی توسط mzselec نمایش پست ها
            الان وقفه تایمر2 رو بدون کریستال ساعت راه اندازی کردم،کار میکنه
            وقتی فرکانسش رو روی کریستال خارجی ساعت میذارم وقفه کار نمیکنه
            با سلام
            آیا فیوز بیتها را بدرستی پروگرام نموده اید؟

            دیدگاه


              #7
              پاسخ : مشکل ساخت ساعت با کریستال ساعت در Atmel studio

              نوشته اصلی توسط evergreen نمایش پست ها
              با سلام
              آیا فیوز بیتها را بدرستی پروگرام نموده اید؟
              فیوزبیت ها رو چطور باید تنظیم کنم ؟ همین هایی که توی برنامه نوشتم هستن ، که هر چی هم چک میکنم به نظر درست میان ، برای پروگرام کردن هم برای کریستال ساعت فیوزبیت خاصی نیازه که پروگرام بشه؟

              دیدگاه


                #8
                پاسخ : مشکل ساخت ساعت با کریستال ساعت در Atmel studio

                نوشته اصلی توسط mzselec نمایش پست ها
                فیوزبیت ها رو چطور باید تنظیم کنم ؟ همین هایی که توی برنامه نوشتم هستن ، که هر چی هم چک میکنم به نظر درست میان ، برای پروگرام کردن هم برای کریستال ساعت فیوزبیت خاصی نیازه که پروگرام بشه؟
                فیوز بیتهای Atmega8 شامل دو بایت Low و High میباشد که باید موقع پروگرام میکرو وقتی که میخواهید فایل هگز را به میکرو منتقل کنید آن دو بایت هم پروگرام نمایید. مهمترین بخشی که ممکنه به کار شما بیاد در قسمت بایت Low قرار دارد که مربوط به تنظیم سورس کلاک میکرو میباشد. در صورت نیاز فقط مقادیر CKSEL0 تا CKSEL3 و SUT0 و SUT1 را تنظیم نمایید و بقیه بیتها را تغییری ندهید. از آدرس زیر میتوانید پس از انتخاب میکرو توضیح فیوز بیتهای مربوط به آن میکرو را ببینید.


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

                نوشته اصلی توسط mzselec نمایش پست ها
                الان وقفه تایمر2 رو بدون کریستال ساعت راه اندازی کردم،کار میکنه
                وقتی فرکانسش رو روی کریستال خارجی ساعت میذارم وقفه کار نمیکنه
                با سلام مجدد
                اگر میتوانید سورس کد را بین تگ های c++ ادیتور بزارید تا بهتر دیده بشه بنظرم تنظیمات تایمر مشکل داره.و مورد دیگری که من در برنامتون دیدم اینه که شما دو بار در حلقه اصلی برنامتون Delay یک ثانیه ایی بکار برده اید. وقتی از اینتراپت تایمر برای ساخت زمان دقیق استفاده میکنید دیگه این تاخیرها لازم نیست به اینصورت در حلقه اصلی برنامه باشه.

                دیدگاه


                  #9
                  پاسخ : مشکل ساخت ساعت با کریستال ساعت در Atmel studio

                  نوشته اصلی توسط evergreen نمایش پست ها
                  فیوز بیتهای Atmega8 شامل دو بایت Low و High میباشد که باید موقع پروگرام میکرو وقتی که میخواهید فایل هگز را به میکرو منتقل کنید آن دو بایت هم پروگرام نمایید. مهمترین بخشی که ممکنه به کار شما بیاد در قسمت بایت Low قرار دارد که مربوط به تنظیم سورس کلاک میکرو میباشد. در صورت نیاز فقط مقادیر CKSEL0 تا CKSEL3 و SUT0 و SUT1 را تنظیم نمایید و بقیه بیتها را تغییری ندهید. از آدرس زیر میتوانید پس از انتخاب میکرو توضیح فیوز بیتهای مربوط به آن میکرو را ببینید.


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



                  با سلام مجدد
                  اگر میتوانید سورس کد را بین تگ های c++ ادیتور بزارید تا بهتر دیده بشه بنظرم تنظیمات تایمر مشکل داره.و مورد دیگری که من در برنامتون دیدم اینه که شما دو بار در حلقه اصلی برنامتون Delay یک ثانیه ایی بکار برده اید. وقتی از اینتراپت تایمر برای ساخت زمان دقیق استفاده میکنید دیگه این تاخیرها لازم نیست به اینصورت در حلقه اصلی برنامه باشه.
                  این متن برنامه


                  #define F_CPU 1000000UL
                  #include <avr/io.h>
                  #include <avr/interrupt.h>
                  #include <stdio.h>
                  #include "LCD/CharacterLCDLib.h"
                  #include <util/delay.h>

                  char str[16];
                  char s,m,h;

                  ISR (TIMER2_OVF_vect)
                  {
                  s++;
                  PORTD|=0b00000001;
                  _delay_ms (500);
                  PORTD&=!0b00000001;
                  _delay_ms(500);
                  }

                  int main(void)
                  {
                  DDRB|=0b00000000;
                  DDRD|=0b00000001;

                  // Timer/Counter 2 initialization
                  // Clock source: TOSC1 pin
                  // Clock value: PCK2/128
                  // Mode: Normal top=0xFF
                  // OC2 output: Disconnected
                  ASSR=0x08;//0x08
                  TCCR2=0x05;
                  TCNT2=0x00;
                  OCR2=0x00;

                  // Timer(s)/Counter(s) Interrupt(s) initialization
                  TIMSK=0x40;


                  lcd_init();
                  lcd_puts("Hello World");
                  sei();
                  while (1)
                  {
                  _delay_ms(1000);
                  sprintf(str,"LCD %d%d",s/10%10,s%10);
                  lcd_clear();
                  lcd_gotoxy(2,1);
                  lcd_puts(str);
                  if (s>=60)
                  {
                  m++;
                  s=0;
                  }
                  else if (m>=60)
                  {
                  h++;
                  m=0;
                  }
                  if (h>=24)
                  {
                  h=0;
                  }

                  }
                  }




                  جدیدترین ویرایش توسط mzselec; ۲۰:۵۷ ۱۴۰۰/۰۵/۱۶.

                  دیدگاه


                    #10
                    پاسخ : مشکل ساخت ساعت با کریستال ساعت در Atmel studio

                    ممنون از تمام اساتید
                    مشکل از تنظیم رجیستر بود ، باید برای استفاده از کریستال ساعت در مگا8 رجیستر CKOPT رو صفر کرد.

                    دیدگاه


                      #11
                      پاسخ : مشکل ساخت ساعت با کریستال ساعت در Atmel studio

                      نوشته اصلی توسط mzselec نمایش پست ها
                      ممنون از تمام اساتید
                      مشکل از تنظیم رجیستر بود ، باید برای استفاده از کریستال ساعت در مگا8 رجیستر CKOPT رو صفر کرد.
                      با سلام مجدد
                      خوبه که مشکل حل شد . ولی رجیسترهای تایمر درست کانفیگ نشده و تنها بدلیل استفاده از دو عدد Delay با زمان 500ms در ISR است که احساس میکنید درست عمل مینماید. در عرض چند ساعت مطمئنا زمانی که ساعت نمایش میدهد خطا پیدا میکند.

                      استفاده از Delay در ISR آن هم با این مدت زیاد (500ms) از لحاظ اصولی کاملا اشتباه میباشد.

                      دیدگاه


                        #12
                        پاسخ : مشکل ساخت ساعت با کریستال ساعت در Atmel studio

                        نوشته اصلی توسط evergreen نمایش پست ها
                        با سلام مجدد
                        خوبه که مشکل حل شد . ولی رجیسترهای تایمر درست کانفیگ نشده و تنها بدلیل استفاده از دو عدد Delay با زمان 500ms در ISR است که احساس میکنید درست عمل مینماید. در عرض چند ساعت مطمئنا زمانی که ساعت نمایش میدهد خطا پیدا میکند.

                        استفاده از Delay در ISR آن هم با این مدت زیاد (500ms) از لحاظ اصولی کاملا اشتباه میباشد.
                        این ال ای دی رو فقط برای تشت گذاشتم ، در برنامه اصلی پاکش میکنم ، فقط میخواستم ببینم که وقفه عمل میکنه یا نه

                        دیدگاه


                          #13
                          پاسخ : مشکل ساخت ساعت با کریستال ساعت در Atmel studio

                          نوشته اصلی توسط mzselec نمایش پست ها
                          این ال ای دی رو فقط برای تشت گذاشتم ، در برنامه اصلی پاکش میکنم ، فقط میخواستم ببینم که وقفه عمل میکنه یا نه
                          اگر میخواهید روتین وقفه را تست کنید delay داخلش نگذارید. برنامه رو جوری بنویسید که با هربار اجرای روتین وقفه led تغییر وضعیت بده یعنی بار اول که روتین وقفه اجرا شد led را روشن کنید و در اجرای بعدی روتین وقفه خاموشش کنید و همینجور ادامه بدید. اینجوری چون delay داخل روتین وقفه نیست میتوانید متوجه شوید که آیا روتین وقفه از لحاظ زمانبندی درست عمل میکند یا نه.

                          دیدگاه

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