اطلاعیه

Collapse
No announcement yet.

راهنمایی در مورد تایمر کانتر

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

    راهنمایی در مورد تایمر کانتر

    با سلام خدمت تمام دوستان در این انجمن
    من تازه با avr کار میکنم و به بخش تایمر کانتر رسیده ام اما چندتا مشکل بزرگ پیدا کرده ام که میخواستم ازشما درخواست کنم تا من را راهنمایی کنید.
    1-زمانی که من تایمر رادر ساده ترین مد یعنی در مد نرمال در تایمر 0 را فعال میکنم وانتظار دارم که بعد از چند ثانیه led متصل به پایه oc0 را روشن کند همان لحظه که در پروتئوس برنامه را اجرا میکنم led روشن می شود (حتی با بالاترین زمان تایمر)در ضمن تنظیمات من در مورد بدست اورن زمان تایمر به صورت زیر است:
    مثال :clock=4.000000 در بخش تایمر صفر---clock system---->---clock value=62.500kh---------mode=normal top ffh
    output=set on compare matchدرضمن تیک overflow interupt زده ام و 3.portb راخروجی تعریف کرده ام
    باتنظیمات بالا زمان محاسبه من (یعنی حدودا 255*4.08=1040.4 یعنی حدود یک دقیقه)
    ثانیه 4.08 = 255/62.500
    تصاویر تنظیمات و فایل برنامه
    http://www.4shared.com/file/w3rE76SP/help.html
    2-می خواستم ببینم مقدار تایمر 0با رسیدن به مقدارffh پس از صفرشدن مقدار output هم ریست میشود یا همان تنظیم که در codewizard انجام دادیم مثلا من که set on compare match قراردادم باقی می ماند.

    کد HTML:
    <abbr=لطفا عنوان مناسب انتخاب نمایید.عنوان ویرایش شد.></abbr>
    یا اباصالح المهدی ادرکنی

    #2
    پاسخ : راهنمایی در مورد تایمر کانتر

    :angry: :angry:کسی نیست جواب من را بدهد؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ :angry: :angry:
    یا اباصالح المهدی ادرکنی

    دیدگاه


      #3
      پاسخ : راهنمایی در مورد تایمر کانتر

      :cry2: :cry2:چرا کسی کمک به من نمی کند :cry2: :cry2:
      یا اباصالح المهدی ادرکنی

      دیدگاه


        #4
        پاسخ : راهنمایی در مورد تایمر کانتر

        در برنامه شما چند مسئله مطرح است:
        اول اینکه حداکثر زمان تولید شده در تنظیمات شما 62500/256 یا 4.096 میلی ثانیه است و برای زمان های بزرگتر باید ضریب تقسیم کلاک را افزایش دهید. اما به هر حال با یک کلاک 4 مگاهرتز و تایمر 8 بیتی نمی توانید به زمانی در حد ثانیه برسید و یا باید از تایمر 16 بیتی استفاده کنید و یا یک شمارنده نرم افزاری را در برنامه بکار ببرید که به ازای هر N باروقفه تایمر، عملیات مورد نظر شما را انجام دهد.
        دوم اینکه باید به OCR0 مقدار غیر صفر بدهید وگرنه با مقدار OCR0=0 در همان ابتدای شروع به کار تایمر، خروجی OC0 یک می شود.
        مسئله بعدی این است که با تنظیمی که برای TCCR0 انجام داده اید، بعد از برابر شدن مقدار تایمر با OCR0، خروجی OC0 یک می شود و همچنان یک می ماند.

        (وقتی گفته می شود امثال Code Wizard در Codevision عامل پسرفت و عقب ماندن در برنامه نویسی است،
        آنگاه برای برخی دوستان زیاد خوشایند نیست.)

        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #5
          پاسخ : راهنمایی در مورد تایمر کانتر

          نوشته اصلی توسط طراح
          در برنامه شما چند مسئله مطرح است:
          اول اینکه حداکثر زمان تولید شده در تنظیمات شما 62500/256 یا 4.096 میلی ثانیه است و برای زمان های بزرگتر باید ضریب تقسیم کلاک را افزایش دهید. اما به هر حال با یک کلاک 4 مگاهرتز و تایمر 8 بیتی نمی توانید به زمانی در حد ثانیه برسید و یا باید از تایمر 16 بیتی استفاده کنید و یا یک شمارنده نرم افزاری را در برنامه بکار ببرید که به ازای هر N باروقفه تایمر، عملیات مورد نظر شما را انجام دهد.
          دوم اینکه باید به OCR0 مقدار غیر صفر بدهید وگرنه با مقدار OCR0=0 در همان ابتدای شروع به کار تایمر، خروجی OC0 یک می شود.
          مسئله بعدی این است که با تنظیمی که برای TCCR0 انجام داده اید، بعد از برابر شدن مقدار تایمر با OCR0، خروجی OC0 یک می شود و همچنان یک می ماند.

          (وقتی گفته می شود امثال Code Wizard در Codevision عامل پسرفت و عقب ماندن در برنامه نویسی است،
          آنگاه برای برخی دوستان زیاد خوشایند نیست.)
          مشکل حل نشد.
          یا اباصالح المهدی ادرکنی

          دیدگاه


            #6
            پاسخ : راهنمایی در مورد تایمر کانتر

            سلام دایی جان
            اول اینکه بجای استفاده از پروتئوس توصیه می کنم یه مدار ساده با میکرو بساز یا روی بردبورد ببند. نرم افزارهای شبیه سازی برای مواقعی که برنامه اونقدر پیچیده هست که امتحانش پرخرخه بدرد می خوره نه برای یادگیری ساده.
            دوم اینکه کدویژن انتخاب بسیار خوبیه و باعث میشه انرژی ذهنی ما خرج محفوظات غیر ضروری نشه و بجاش صرف دانش بشه.
            سوم اینکه بهتره از میکروهای بروز مثل مگا48 استفاده کنی تا میکروهای قدیمی مثل مگا32 و امثالهم.
            حالا بریم سراغ برنامه:
            دایی طراح درست میگه و شما در محاسبه زمان اشتباه کردید.
            کلاک تایمر را روی 62500 هرتز تنظیم کردی. تایمر هم می تونه تا 255 بشمره. وقتی میکرو شروع به کار میکنه، هر 1/62500 ثانیه تایمر یکی اضافه میشه. بعد از 255/62500 =0.00408 ثانیه به مقدار نهاییش یعنی 255 میرسه و اینتراپتش فعال میشه و دوباره در کلاک بعدی صفر میشه و همین روند ادامه پیدا میکنه.
            فعال کردن Set on compare match هم یعنی هروقت مقدار تایمر یعنی TCNT0 به OCR0 رسید خروخی OC0 را یک کن. پس چون مقدار OCR0 را صفر گذاشتی در همان شروع روشن کردن میکرو که TCNT0 صفر است و با OCR0 برابره خروخی OC0 فعال میشه و تا ابد فعال می مونه.
            اگه قصدت صفر و یک شدن این خروجی بود باید بجای Set on compare match گزینه Toggle on compare match را انتخاب می کردی.
            تازه سرعت چشمک زدن اونقدر زیاده که با چشم دیده نمیشه.
            بهتره که تایمر 1 رو برای این کار انتخاب کنی چون 16 بیتیه و می تونه بجای 255 تا 65536 بشمره. با کلاک 62500 هرتز و تنظیم در حالت Toggle on compare match می تونی یه چشمک زن با زمان صفر یا یک 65536/62500 یعنی تقریبا مساوی 1 ثانیه بسازی. یعنی فرکانست میشه 0.5 هرتز.
            بعدها که با PWMآ‌ کار مردی می تونی پالس های دقیقتری بسازی...
            با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

            دیدگاه


              #7
              پاسخ : راهنمایی در مورد تایمر کانتر

              خوب نظر من هم اینه که تایمر رو راهندازی کن توی هر مدی که میخوای و تیک مربوط به اینتراپت فلواپ رو بزن
              کار این تیک اینه که هر باری که تایمر سریز بشه میاد و تو اینتراپت خودش دستوری رو اجرا میکنه
              و شما میتونی یک متغییری رو زیاد کنی
              و نتیجتا اون متغییر رو تو main برنامت چک کنی
              اگه اون عدد مورد نظر که میتونه یک زمان طی شده باشه رو چک کنی
              و نتیجه رو هر پایه ای که خواستی نمایش بده
              منظورم خیلی ساده بود
              امید وارم فهمیده باشی
              اگرم زمان دقیق نیاز داری از rtc استفاده کن
              وگرنه فرقی نمیکنه
              از کدوم تایمر و فرکانس استفاده کنی اینجا متغییری که تو وقفه اضاف میشه مهمه
              هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
              بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
              میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

              تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

              دیدگاه


                #8
                پاسخ : راهنمایی در مورد تایمر کانتر

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

                دیدگاه

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