اطلاعیه

Collapse
No announcement yet.

سرعت وقفه های خارجی در AVR

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

    سرعت وقفه های خارجی در AVR

    درود بر همه دوستان.
    همه ما میدونیم در میکرو AVR منابع مختلفی برای وقفه ها وجود داره که در برخی از میکروها تا 3 تاش خارجی هستن.مثل MEGA16
    از طرفی میدونیم که سرعت اجرای دستورات درمیکرو بالاست طوری که برخی از دستورات با فقط یک کلاک پالس بصورت کامل اجرا میشن:
    من تو یکی از پروژه هام متوجه نکته ای شدم که ارتباط مستقیمی داشت با سرعت خود وقفه به این صورت:
    در اون پروژه من یک انکودر رو متصل کردم به وقفه خارجی شماره 0 میکرو مگا 16 و با یه کریستال 12Mhz میکرو رو راه اندازی کردم . انکودری که تو اون سیستم استفاده شده بود دارای دقت فوق العاده بالایی بود طوری که در max پالسهایی با فرکانس 60Khz و با دامنه ولتاژ 5V رو خروجی میفرستاد از طرفی من هم 2 تا دستور شرطی توی کدویژن و زیر موضوع وقفه شماره0 داشتم که تو یکی از اون شرطها یک مقدار یک متغییر داءم به LCd فرستاده میشد. اما مشکلی که تو این مدار بوجود اومد این بود که بعلت فرکانس بالا یا چیزی که من هنوزم اونو متوجه نشدم وقفه تو این پروسه کم میاورد و در همه موارد وقتی فرکانس انکودر بالا میرفت نمیتونست سرعت خودشو با اجرای دستورات آداپته کنه .
    حالا این سوال مطرح میشه که اولا سرعت اجرای وقفه 0 چقدر هست با توجه به اینکه فکر کنم پردازشگر وقفه در میکرو بصورت کاملا جداگانه از CPU کار میکنه(مطابق با بیانات دیتاشیت) ؟
    بعد مگه سرعت پردازش دستوراتی که تو زیر موضوع وقفه ها نوشته میشه رابطه مستقیم با کلاک CPU نداره؟ اگه جواب بله هست پس چرا 2 تا دستور شرطی ساده رو نمیتونه با سرعت پردازش کنه و قبل از رسیدن وقفه جدید برگرده به برنامه اصلی تازه با اینکه کریستال میکرو رو 16Mhz درایو شده؟
    لطفا نظراتتون رو تو این پست در مورد این موضوع قرار بدین ؟ :rolleyes: :rolleyes:

    mer30

    #2
    پاسخ : سرعت وقفه های خارجی در AVR ؟

    فقط فرا خوانی روال وفقه و برگشت از اون 7 پالس ساعت میگیره .
    حالا چون با سی برنامه مینویسی کامپایلر مجبوره چندا ریجیستر رو پوش و پاپ کنه حالا من دقیقه نمیدونم ولی فرض کن 5 تا ریجستر پوش و پاپ بشه که ایم هم میشه 10 پالس .
    تا اینجاا 17 پالس فقط سربار فرا خوانیه تابع است تا دستورات داخل وقفه چی باشه باز هم این تعداد افزایش پیدا میکنه مثلا یک تقسیم 2 بایتی حدود 200 پالس زمان میبره یا یک جمه 2 بایتی تا 13 -14 پالس زمان میبره

    میکرو 8 بیتی اینه دیگه
    تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
    داشتن عقله زيادتر از دیگر آدم ها است

    دیدگاه


      #3
      پاسخ : سرعت وقفه های خارجی در AVR ؟

      سلام .من از وقفه صفر تو mega16 با لبه پایین استفاده کردم ولی اصلا به وقفه ها عکس العمل نشون نمیده میکرو یا اگه عکس العمل نشون بده خیلی ضعیف.میشه را هنمایی کنید از چه مداری رو وقفم استفاده کنم.

      دیدگاه


        #4
        پاسخ : سرعت وقفه های خارجی در AVR ؟

        دوست عزیز مدار خاصی نداره فقط کافیه 0و 1 منطقی به پایه اعمال کنید ولی نکته مهم اینه که اگه از وقفهای دیگه هم استفاده میکنید نباید موقع تست اونارو آزاد بزارین ( حتما زمین کنینش ).
        بعد منظورتونو از ضعیف بودن متوجه نمیشم . وقفه یا اجرا میشه یا نه دیگه ضعیف و قوی نداره که :eek: :eek:
        mer30

        دیدگاه


          #5
          پاسخ : سرعت وقفه های خارجی در AVR ؟

          نوشته اصلی توسط mohsenmax70
          درود بر همه دوستان.
          همه ما میدونیم در میکرو AVR منابع مختلفی برای وقفه ها وجود داره که در برخی از میکروها تا 3 تاش خارجی هستن.مثل MEGA16
          از طرفی میدونیم که سرعت اجرای دستورات درمیکرو بالاست طوری که برخی از دستورات با فقط یک کلاک پالس بصورت کامل اجرا میشن:
          من تو یکی از پروژه هام متوجه نکته ای شدم که ارتباط مستقیمی داشت با سرعت خود وقفه به این صورت:
          در اون پروژه من یک انکودر رو متصل کردم به وقفه خارجی شماره 0 میکرو مگا 16 و با یه کریستال 12Mhz میکرو رو راه اندازی کردم . انکودری که تو اون سیستم استفاده شده بود دارای دقت فوق العاده بالایی بود طوری که در max پالسهایی با فرکانس 60Khz و با دامنه ولتاژ 5V رو خروجی میفرستاد از طرفی من هم 2 تا دستور شرطی توی کدویژن و زیر موضوع وقفه شماره0 داشتم که تو یکی از اون شرطها یک مقدار یک متغییر داءم به LCd فرستاده میشد. اما مشکلی که تو این مدار بوجود اومد این بود که بعلت فرکانس بالا یا چیزی که من هنوزم اونو متوجه نشدم وقفه تو این پروسه کم میاورد و در همه موارد وقتی فرکانس انکودر بالا میرفت نمیتونست سرعت خودشو با اجرای دستورات آداپته کنه .
          حالا این سوال مطرح میشه که اولا سرعت اجرای وقفه 0 چقدر هست با توجه به اینکه فکر کنم پردازشگر وقفه در میکرو بصورت کاملا جداگانه از CPU کار میکنه(مطابق با بیانات دیتاشیت) ؟
          بعد مگه سرعت پردازش دستوراتی که تو زیر موضوع وقفه ها نوشته میشه رابطه مستقیم با کلاک CPU نداره؟ اگه جواب بله هست پس چرا 2 تا دستور شرطی ساده رو نمیتونه با سرعت پردازش کنه و قبل از رسیدن وقفه جدید برگرده به برنامه اصلی تازه با اینکه کریستال میکرو رو 16Mhz درایو شده؟
          لطفا نظراتتون رو تو این پست در مورد این موضوع قرار بدین ؟ :rolleyes: :rolleyes:
          نوشتن روی lcd با تاخیر بسیار زیادی همراه است و نوشتن روی lcd در وقفه اصلا کار صحیحی نیست. درضمن وقتی برنامه وارد وقفه میشه فلگ اجازه وقفه غیر فعال میشه بنابر طبیعی هست که یک سری از پالس ها خوانده نشن.

          دیدگاه


            #6
            پاسخ : سرعت وقفه های خارجی در AVR ؟

            نوشته اصلی توسط sadeghmojtabaei نمایش پست ها
            نوشتن روی lcd با تاخیر بسیار زیادی همراه است و نوشتن روی lcd در وقفه اصلا کار صحیحی نیست. درضمن وقتی برنامه وارد وقفه میشه فلگ اجازه وقفه غیر فعال میشه بنابر طبیعی هست که یک سری از پالس ها خوانده نشن.
            من هم به همین مشکل برخوردم الان. من هم دارم یک انکودر دقیق رو می خونم و روی OLED نمایش می دم مشکلی که هست اینه که در زیر برنامه وقفه دارم داخل OLED می نویسم و خب این موضوع داره سرعت وفقه رو کم می کنه چه راه حلی پیشنهاد می کنید؟
            گویند سنگ لعل شود در مقام صبر اری شود ولی به خون جگر شود
            همیشه آخر همه چیز خوبه، اگر هم هنوز خوب نشده پس هنوز آخرش نشده(چارلی چاپلین)

            دیدگاه


              #7
              پاسخ : سرعت وقفه های خارجی در AVR

              با درود و احترام,
              چیزی که منم تو تجربه عملی به دست اوردم اینه که توی برنامه نویسی و کار با وقفه,ها
              فقط باید مقادیر و تغیرات رو برنامه نویسی کرد و هرچیزی که طولانی باشه ( مثل حلقه ) و یا از کتابخانه های تاخیر و امثالش استفاده شده باشه, اختلال وخطا ایجاد میکنه....
              نمایش روی LCD و امثال اینها رو باید توی حلقه اصلی بیاریم....

              مثلا برنامه زیر که به نظر خیلی ساده میاد و توی وقفه ارتباط سریال نوشته شده ,
              ,فقط قرار بود یه پیغام ساده بیاد رو نمایشگر که دیتای سریال دریافت شد و حتی مقادیر دیتای دریافتی رو هم نمیخواست که نشون بده....
              اما فقط به خاطر همون 4 خط اول که مربوط به نمایش روی LCD میشه , باعث شده بود که دیتای ارتباط سریال کامل دریافت نشه و یا خطا داشته باشه ( که ذهم آدم میرفت سمت میزان باود ریت , خرابی دستگاه متقابل در ارسال دیتا, مقدار دهی کلاک,, نویز و...)
              تازه زمانی هم که این پیغام رو LCD میومد, با کندی نمایش داده میشد.....
              وقتی که اون چهار خط رو حذف کردم , کامل مشکلم حل شد....

              [LEFT]     lcd_clear();
              lcd_gotoxy(0,0);
              lcd_putsf("Data Received..");
              delay_ms(100);
              RX=1;


              Receive[counter]=data;
              counter++;
              Read=1;
              PORTB.1=1;



              [/LEFT]

              دیدگاه

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