اطلاعیه

Collapse
No announcement yet.

ارتباط وایرلس و اینتراپتپ!+در خواست کمک

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ارتباط وایرلس و اینتراپتپ!+در خواست کمک

    سلام
    من 2تا مشکل برام پیدا شد که میگم و نظر شما اساتید رو جویا می خواستم
    من بین 2 تا میکرو ارتباط وایرلس برقرار کردم( با پروتکل UART) حالا می خوامم کنترل میکروی SLAVE رو بدست بگیرم یعنی می خوام با یه اینتراپت سخت افزاری میکرویه SLAVE خاموش بشه و با همون روشن. تو دیتاشیت میکرونگاه کردم نوشته بود UART در حالت SLEEP کار نمیکنه. یعنی میتونم با UART میکرو رو خاموش کنم ولی اگه خاموش شد دیگه نمیشه روشنش کرد.
    نظر شما چیه من چه جوری می تونم با یک ارتباط وایرلس بین دو تا میکرو ،میکروی SLAVE رو به صورت سخت افزاری خاموش و روشن کنم
    مشکل دوم من اینه که دستورات لازم برای استفاده از اینتراپت های سخت افزاری و هم چنین کار با مد SLEEP و WAKE-UP رو کامل بلد نیستم. که برای قاطی نشدن بحث تو جداگونه سوالام رو مطرح میکنم.فقط بگم که از تو help یه سری از دستورات مثل :
    DISABLE_INTERRUPTS( )
    ENABLE_INTERRUPTS( )
    EXT_INT_EDGE( )
    Sleep()
    reset_cpu()
    sleep_ulpwu(time)
    رو پیدا کردم.

    با تشکر

    #2
    پاسخ : ارتباط وایرلس و اینتراپتپ!+در خواست کمک

    البته من صاحب نظر و استاد نیستم .اما در همین زمینه به مشکل برخوردم :
    تا اونجا که خاطرم هست اگر هر میکروکنترلری رو به یکی از مدهای sleep ببریم با رسیدن یک وقفه نرم فزاری یا سخت افزاری البته از اون مد به حالت نرمال کاری باز خواهد گشت و این که حالا تو مد اسلیپ از کجا یه وقفه جور کنیم ، نظر من اینه که شما وقفه خارجی روی portb.0 رو راه اندازی کنید و یه انشعاب مناسب (دامنه و لبه مناسب) از پایه دیتا مربوط به ماژول گیرنده درست کنید تا باعث تحریک این وقفه بشه .
    این کار صد در صد عملی هست اما این که مداری که شما با گیت یا ترانزیستور یا حتی مقاومت معمولی چطور سیگنال مناسب رو واسه وقفه ایجاد کنید فقط کافیه کمی دقت داشته باشید و پاره ای از اصول معمولی الکترونیک رو به کار ببرید...
    اما به نظر میرسه که این سیگنال وقفه در زمان روشن بودن میکرو باعث ایجاد اختلال در دریافت usart بشه که اگه با این مشکل برخوردید میتونید یک گیت and رو سر راه ورودی portb.0 بگذارید و یکی از ورودیهای اون رو به پایه دیتا ی ماژول گیرنده و اون یکی رو توسط پایه های خود میکرو ،وقتی میکرو روشنه 0 و دقیقا قبل از اجرای فرمان sleep اون رو یک کنید تا بعد از به خواب رفتن میکرو این گیت سیگنال رو به این پایه برسونه. :nerd:
    موفقیت یک فرایند است نه یک اتفاق...

    ******** استفاده از گزينه تشكر نشانه اهميت و احترام شما به پيگيري شخص نظر دهنده است ********

    دیدگاه


      #3
      پاسخ : ارتباط وایرلس و اینتراپتپ!+در خواست کمک

      با سلام
      من این مطلب رو از کتاب "مرجع کامل میکروکنرلرهای PIC" پیدا کردم امیدوارم به دردتون بخوره:

      4-17- حالت توان پایین (SLEEP)
      با اجرای دستوراعمل SLEEP میکرو به حالت توان پایین وارد میشود که در این حالت کمترین جریان ممکن را مصرف کرده و اوسیلاتور آن نیز خاموش میشود. لازم به ذکر است که در این حالت وضیعت پایه MCLR باید در یک منطقی قرار داشته باشد. با وارد شدن به این حالت تایمر نگهبان صفر شده ولی به شمارش خود ادامه میدهد(اگر فعال باشد) بیت PD از ثبات STATUS صفر و بیت TO یک میشود و درایور اوسیلاتور خاموش میگردد.همچنین پورتهای ورودی-خروجی وضیعتی را که قبل از دستورالعمل SLEEP داشته اند, حفظ میکنند. برای اینکه در این حالت کمترین مصرف جریان را داشته باشیم همه پایه های I\O باید در ولتاژ VDD و یا VSS قرار داشته و به مدارات خارجی که موجب جریان کشی از آنها میشود متصل نباشند. پایه هایی را که در وضیعت ورودی امپدانس بالا هستند را نیز باید برای جلوگیری از ایجاد جریانهای سوئیچینگ که در ورودیهای شناور ( Floating Input) بوجود میآیند به صورت خارجی به VDD یا زمین وصل کرد.

      1-4-17- خارج شدن از حالت توان پایین
      هنگام وقوع یکی از رویدادهای زیر میکرو از حالت توان پایین خارج میشود:
      1. وقوع هر یک از انواع ریست
      2. سرریز تایمرنگهبان (در صورت فعال بودن WDT)
      3. تقاضای وقفه توسط یک از واحدهای جانبی که میتوانند در حالت توان پایین بیت پرچم وقفه را یک کنند. از قبیل:
      *.پایه INT خارجی
      *.تایمر یک
      *. تغییر وضیعت پایه های پورت
      *. واحد SSP
      *. مقایسه کننده
      *. حالت ثبت CCP
      *. مبدل آنالوگ به دیجیتال

      رویداد اول میکرو را ریست کرده و در نتیجه آن را از حالت توان پایین خارج میکند. در حالتیکه دو رویداد دیگر با خارج کردن میکرو از این حالت موجب اجرای ادامه برنامه میشود.

      نکته: زمانیکه دستورالعمل SLEEP اجرا میشود دستورالعمل بعدی موجود در آدرس PC+1 نیز برداشت میگردد.

      برای اینکه بتوان از طریق رویداد یک وقفه مشخص , میکرو را از حالت توان پایین خارج کرد باید بیت فعالساز اختصاصی وقفه مورد نظر فعال باشد. حال با خارج شدن میکرو از این حالت در صورتیکه بیت GIE صفر باشد اجرای برنامه از دستورالعمل بعد از دستور SLEEP ادامه میابد در غیر این صورت میکرو دستورالعمل بعداز SLEEP را اجرای میکند و سپس به آدرس بردار وقفه 0004H پرش میکند. در این وضیعت اگر اجرایدستورالعمل بعد از SLEEP مطلوب نباشد میتوان در برنامه در آن آدرس دستورالعمل NOP را نوشت

      2-4-17- خارج شدن از حالت توان پایین توسط وقفه
      در صورتیکه بیت GIE صفر و دوبیت فعالساز اختصایص و پرچم هر یک از منابع وقفه یک باشند یکی از دو رویداد زیر رخ ویدهد:
      1. اگر درخواست وقفه پیش از اجرای دستورالعمل SLEEP صورت گرفته باشد به جای این دستورالعمل یک دستورالعمل NOP اجرا خواهد شد. در نتیجه تایمر نگهبان و واحد پس مقیاس دهنده (POST SCALE) آن صفر نشده و وضیعت بیتها TOو PD نیز بدون تغییر باقی خواهد ماند.
      2. اگر درخواست وفقه دز طی اجرای دستورالعمل SLEEP و یا پس از آن صورت گرفته باشد دستورالعمل بصورت کامل اجرا شده و سپس میکرو از حالت توان پایین خلرج میگردد. بنابراین تایمر نگهبان و پس مقیاس دهنده آن صفر شده و بیتهای TOو PD نیز به ترتیب یک یا صفر میگردند.

      حتی اگر پیش از اجرای دستورالعمل SLEEP بیتهای پرچم را بررسی کنیم ممکن است قبل از اجرای کامل دستورالعمل این بیتها یک شوند. بنابراین برای اینکه از اجرای دستورالعمل SLEEP اطمینان حاصل کنیم به وضیعت بیت PD توجه میکنیم . اگر مقدار آن یک بود بدین معنی است که به جای دستورالعمل SLEEP دستورالعمل NOP اجرا شده است. همچنین برای اینکه مطمئن شویم تایمر نگهبان صفر شده است باید قبل از دستورالعمل SLEEP دستورالعمل CLRWDT را اجرا کنیم.

      موفق باشید

      دیدگاه

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