اطلاعیه

Collapse
No announcement yet.

تغییر وصعیت یک پین برای مدت طولانی

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

    تغییر وصعیت یک پین برای مدت طولانی

    سلام
    من توی یه پروژه ی ساده با 16F883 احتیاج دارم بعضی از پین های میکرو برای مدت خیلی طولانی High یا low باشند اما بعضی وقتا پین های میکرو خود به خود تغییر وضعیت میدن !
    تو برنامم هرجا فرمان Output_High یا Output_Low داشتم یه متغییر رو صفر و یک کردم و بعد تو While برنامم با توجه به مقدار اون متغیر فرمان هامو دادم ! با این کار بهتر شد اما بازم بعد از چند روز بعضی پین ها تغییر وضیعت میدن خود به خود !
    راه یا تنظیمات خاصی برای این مشکل وجود داره که با رعایت اون مشکل حل شه ؟
    رجیستر TRISرو هم درست مقدار دهی کردم (خروجی کردم).
    کسی تا حالا این مشکل رو داشته ؟
    زمان تنها واحد حقیقی اندازه گیریه
    زمان وجود ماده رو اثبات میکنه
    بدون زمان هیچکدوم ما وجود نخواهیم داشت
    زمان یکتاست

    #2
    پاسخ : تغییر وصعیت یک پین برای مدت طولانی

    سلام

    مطمئنید نویز ندارید؟
    اگر میشه در باره ی کاری که می خواهید انجام بدید توضیح بدید؟
    آدم های سخت می مانند و روز های سخت می روند!

    دیدگاه


      #3
      پاسخ : تغییر وصعیت یک پین برای مدت طولانی

      سلام
      نوشته اصلی توسط 5
      مطمئنید نویز ندارید؟
      نویز که همیشه هست ! اما مدارم درست کار میکنه فقط در مواقعی که احتایج به این تغییر وضعیت طولانی دارم این اتفاق میفته !
      از تغذیه ی مدار هم نیست چون تغذیمو از یک پاور کامپیوتر تامین کردم .
      نوشته اصلی توسط 5
      اگر میشه در باره ی کاری که می خواهید انجام بدید توضیح بدید؟
      من با یه یه RF ریموت رو میخونم و با توجه به کلید فشده شده ی مورد نظر فرمان های خاصی رو میدم !
      دستگاه مد های مختلفی داره که قابل برنامه ریزیه و همشونم به درستی کار میکنه اما تو یکی از این مد ها مثلا اگه کلید 1 زده بشه باید پین RA.3 یک بشه و تا زمانی که این کلید فشرده نشده یک بمونه (شاید برای یه روز یه ماه یه سال . . . )ویا برعکس .
      زمان تنها واحد حقیقی اندازه گیریه
      زمان وجود ماده رو اثبات میکنه
      بدون زمان هیچکدوم ما وجود نخواهیم داشت
      زمان یکتاست

      دیدگاه


        #4
        پاسخ : تغییر وصعیت یک پین برای مدت طولانی

        با سلام

        احتمال اینکه با یک میکرو ، بدون حافظه غیر فرار(مثل 24C04 ) ، برنامه برای این مدت طولانی که شما با آن سرو کار دارید ، دچار نویز ، نشود ، خیلی کم است.
        ( خلاصه: به دلیل نویزهای گوناگون ، میکرو دچار اختلال می شود.)

        یک راه حل:
        از یک حافظه 24C04 یا 93C46 EEPROM استفاده کنید و با هر بار زدن کلید، یک کد خاص را در یک جایی از حافظه ضبط کنید ، با زدن مجدد همان کلید ، کد دومی را در همان محل حافظه ضبط کنید.
        میکروی شم در زمان عادی کار ، هر یک ثانیه یکبار آن محل از حافظه ای ای پی رام را خوانده و بر اساس کد آن ، پایه را 1 یا 0 می کند.

        توجه داریم که در یافت کلید از ریموت ، مراحل دیبانس و تاخیر و فاصله زمانی را برای عدم قرائت چند باره یک کلید ، نیاز دارد.
        ضمنا ، روتینهای نوشتن در حافظه فوق ، باید چند عامل کنترلی را داشته باشند ، تا در شرایط نویزی و هنگ کردن، به صورت نابجا در حافظه ننویسند.
        و نیز تایمر واچداگ برای کنترل هوشیاری میکرو نیاز است.

        با سپاس
        گشتی در لاله زار
        http://www.eca.ir/forum2/index.php?topic=76138.0

        http://www.eca.ir/forum2/index.php?topic=76141

        دیدگاه


          #5
          پاسخ : تغییر وصعیت یک پین برای مدت طولانی

          سلام
          از اینکه بلاخره یکی پیدا شد جواب منو بنده ممنون
          نوشته اصلی توسط Solsal
          احتمال اینکه با یک میکرو ، بدون حافظه غیر فرار(مثل 24C04 ) ، برنامه برای این مدت طولانی که شما با آن سرو کار دارید ، دچار نویز ، نشود ، خیلی کم است.
          یعنی EEPROMخارجی نسبت به EEPROM داخلی میکرو حساسیتش نسبت به نویز کمتره ؟
          من این میکرو رو انتخاب کرده بودم تا احتیاجی به EEPROM نداشته باشم ! (البته با دیدن برد های مشابه)

          نوشته اصلی توسط Solsal
          میکروی شم در زمان عادی کار ، هر یک ثانیه یکبار آن محل از حافظه ای ای پی رام را خوانده و بر اساس کد آن ، پایه را 1 یا 0 می کند.
          من همچین کاری رو کردم(تو پست اولمم توضیح دادم) اما نه در EEPROM! اگه این کار رو طبق گفته ی شما با ای پی رام انجام بدم و با توجه به اینکه این عملیات دائما در حال تکراره برای EEPROM بعد مدتی مشکلی پیش نمی یاد ؟
          مگه EEPROMها در READ و WRITE دارای عمر خاصی نیستند ؟

          نوشته اصلی توسط Solsal
          ضمنا ، روتینهای نوشتن در حافظه فوق ، باید چند عامل کنترلی را داشته باشند ، تا در شرایط نویزی و هنگ کردن، به صورت نابجا در حافظه ننویسند.
          میشه یه کم در مورد این موضوع توضیح بدین لطفا ؟
          چه عامل هایی؟

          با تشکر
          زمان تنها واحد حقیقی اندازه گیریه
          زمان وجود ماده رو اثبات میکنه
          بدون زمان هیچکدوم ما وجود نخواهیم داشت
          زمان یکتاست

          دیدگاه


            #6
            پاسخ : تغییر وصعیت یک پین برای مدت طولانی

            یک راهکار مناسب برای این منظور استفاده از پایه اینتراپت خارجی می باشد (RB0/INT)
            به این صورت که شما یک انشعاب از پایه خروجی RF را به پایه اینتراپت خارجی میکرو متصل نمایید .
            با هر پالس وروری یک وقفه رخ خواهد داد و شما میتوانید فرآیند های مورد نیاز خودتان را در سرویس وقفه مربوطه بنویسید . البته اگر در خروجی میکرو از یک فلیپ فلاپ استفاده کنید می توانید در مدت زمانی که میکرو در انتظار پالس ورودی می باشد ، آن را به حالت توان پایین sleep ببرید تا مصرف توان مدار هم کاهش یابد .

            دیدگاه


              #7
              پاسخ : تغییر وصعیت یک پین برای مدت طولانی

              سلام
              از توجهتون ممنون
              نوشته اصلی توسط محمد ایجی
              یک راهکار مناسب برای این منظور استفاده از پایه اینتراپت خارجی می باشد (RB0/INT)
              به این صورت که شما یک انشعاب از پایه خروجی RF را به پایه اینتراپت خارجی میکرو متصل نمایید .
              اما من با خوندن کد ها از RF مشکلی ندارم . برنامه به درستی کار میکنه فقط بعد از گذشت مدت طولانی پین های خرو جیم خود به خود تغییر وضعیت میدن !
              علاوه بر مقدار دهی رجیستر TRIS نکات دیگه ای وجود نداره که باید رعایت بشه؟(برای اینکه پین هایی رو خروجی کنیم)
              با تشکر

              زمان تنها واحد حقیقی اندازه گیریه
              زمان وجود ماده رو اثبات میکنه
              بدون زمان هیچکدوم ما وجود نخواهیم داشت
              زمان یکتاست

              دیدگاه


                #8
                پاسخ : تغییر وصعیت یک پین برای مدت طولانی

                نوشته اصلی توسط Robo-amir
                سلام
                از اینکه بلاخره یکی پیدا شد جواب منو بنده ممنونیعنی EEPROMخارجی نسبت به EEPROM داخلی میکرو حساسیتش نسبت به نویز کمتره ؟
                من این میکرو رو انتخاب کرده بودم تا احتیاجی به EEPROM نداشته باشم ! (البته با دیدن برد های مشابه)
                من همچین کاری رو کردم(تو پست اولمم توضیح دادم) اما نه در EEPROM! اگه این کار رو طبق گفته ی شما با ای پی رام انجام بدم و با توجه به اینکه این عملیات دائما در حال تکراره برای EEPROM بعد مدتی مشکلی پیش نمی یاد ؟
                مگه EEPROMها در READ و WRITE دارای عمر خاصی نیستند ؟
                میشه یه کم در مورد این موضوع توضیح بدین لطفا ؟
                چه عامل هایی؟

                با تشکر
                با سلام
                اگر داخل میکرو EEPROM دارید، از همان نیز می توانید استفاده کنید.(مشخصات و تعداد دفعات نوشتن در آن را کنترل کنید.)

                EEPROM 24C04 قابلیت بیش از 1 میلیون بار نوشتن را دارد،( هر بایت آن به صورت مستقل)
                و قابلیت نامحدودی در خوانده شدن دارد.( با خوانده شدن، معیوب نمی شود.)

                یعنی برای هر محل حافظه در EEPROM شما حداقل 1000000 بار تغییر حالت را می توانید یادداشت کنید.(1000000 بار زدن کلید ریموت)
                (اگر یک نفر در هر ثانیه یک بار ریموت را بزند ، با توجه به اینکه هر شبانه روز 86400 ثانیه است، حداقل 12 شبانه روز برای تخریب یک بایت خاص از EEPROM نیاز است!!!)
                ضمن اینکه بنا نیست اتفاق فوق رخ دهد و کاربر چنین کاری را انجام دهد!

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

                با سپاس
                گشتی در لاله زار
                http://www.eca.ir/forum2/index.php?topic=76138.0

                http://www.eca.ir/forum2/index.php?topic=76141

                دیدگاه


                  #9
                  پاسخ : تغییر وصعیت یک پین برای مدت طولانی

                  سلام.
                  مورد پیش آمده برای دوستمون Robo-amir مورد جالبیه. جواب های دوستان بزگوار هم برای بنده بسیار آموزنده و جالب بود. با این وجود میخوام بگم دوستان فکر نمیکنید این مورد کمی عجیبه؟ و اینکه آیا شخص دیگری هم با این مشکل روبرو بوده؟
                  واضح تر بگم ، (البته نظر شخصی بنده است) بعید میدونم اگر راهکار های مناسب حذف نویز و کاهش اون به درستی به کار برده بشه این مسئله رخ بده. با احترام به دوستانی که راه حل ذخیره در یک حافظه غیر فرار رو مطرح نمودند باید عرض کنم این روش چندان منطقی به نظر نمیرسه. چون اگر نویز یا هر عاملی آنقدر موثر باشه که بتونه محتوای یک حافظه استاتیک رو عوض کنه دیگه به هیچ وجه نمیشه به عملکرد سیستم اعتماد کرد چون در این حالت نه فقط رجیستر های مربوط به پورت ها بلکه سایر خانه های حافظه و متغیر های داخلی میکروکنترلر رو هم تحت تاثیر قرار خواهد داد. در نتیجه از کجا معلوم که این اطلاعاتی رو که میخواهیم در یک eeprpom خارجی بنویسیم خود قبل از انتقال دچار تغییر نشده باشه.
                  به نظر بنده بهترین راه حل این مشکل (البته اگه واقعاً مشکلی وجود داشته باشه، چون ما نمیدونیم در این مورد چقدر اصول رعایت شده) اینه که به ریشه اون یعنی نویز یا هر عاملی که ممکنه باعثش بشه و حذف اون پرداخته بشه. فعلاٌ موردی که به عقل بنده میرسه مسئله نویز است.
                  یکی از این اصول همین منبع تغذیه ای است که دوستمون ازش استفاده کرده. منابع تغذیه سوئیچینگ هر چقدر هم پیشرفته باشند و خروجی آنها فیلتر شده باشه و با تمام مزایایی که دارند نسبت به منابع تغذیه خطی ناپایدارترند و مهمتر از همه منبع لایزال نویز هستند. بنابر این اولین توصیه بنده اینه که اگر مصرف مدارتون زیاد نیست حتما از ترانس استفاده کنید، شاید مشکلتون حل شد.
                  دومین توصیه ام که مربوط به برنامه نویسی میشه اینه که اگر فکر میکنید نویز دارید از قرار دادن میکروکنترلر در حالت های کم توان و ذخیره توان و.. خودداری کنید. چون قرار گرفتن میکروکنترلر در این حالت نویز پذیری میکرو رو بیشتر میکنه.
                  اگر موارد دیگری به ذهن دوستان میرسه ، لطفا بیان کنید. قطعاً با همفکری شما میشه این مسئله رو حل کرد.

                  دیدگاه


                    #10
                    پاسخ : تغییر وصعیت یک پین برای مدت طولانی

                    نوشته اصلی توسط Robo-amir
                    سلام
                    از توجهتون ممنوناما من با خوندن کد ها از RF مشکلی ندارم . برنامه به درستی کار میکنه فقط بعد از گذشت مدت طولانی پین های خرو جیم خود به خود تغییر وضعیت میدن !
                    علاوه بر مقدار دهی رجیستر TRIS نکات دیگه ای وجود نداره که باید رعایت بشه؟(برای اینکه پین هایی رو خروجی کنیم)
                    با تشکر
                    خیر دوست گرامی! منظور بنده در دریافت اطلاعات نبود! فکر کنم در انتقال مفهوم کاستی داشتم...
                    ببینید مشکل شما (حالا به هر دلیلی) در میکرو وجود دارد . پیشنهاد بنده این بود که شما در خروجی میکرو از یک latch استفاده کنید تا خروجی میکرو در همان سطح منطقی قفل شود (و با تغییرات ناگهانی خروجی میکرو ، مقدار خروجی latch تغییری نمیکند [به علت وجود پایه clk]) . به عنوان نمونه IC 74hc575 ...
                    همچنین به خاطر ماهیت این آی سی در قفل کردن خروجی ، در زمانی که شما دیتایی از RF دریافت نمیکنید (میکرو در انتظار است) می توانید میکرو را به حالت power down یا sleep ببرید تا هم مصرف کل سیستم کاهش یابد و هم تا حدی مشکل تغییر ناگهانی وضعیت پین ها مرتفع شود

                    دیدگاه


                      #11
                      پاسخ : تغییر وصعیت یک پین برای مدت طولانی

                      جناب امیر خان
                      شاید منشا اون تغییر وضعیت سیگنالهای تصادفی خروجی ماژول rf باشه برای تست یکبار بعد از صدور فرمان ماژول rf رو از مدار خارج کنین یا پین دیتای اونو قطع و پول پ یا پول دان کنین ببینین پین خروجی میکرو بعد از چند ساعت تغییر وضعیت میده یا نه

                      دیدگاه


                        #12
                        پاسخ : تغییر وصعیت یک پین برای مدت طولانی

                        سلام
                        نوشته اصلی توسط mohsen++
                        جناب امیر خان
                        شاید منشا اون تغییر وضعیت سیگنالهای تصادفی خروجی ماژول rf باشه برای تست یکبار بعد از صدور فرمان ماژول rf رو از مدار خارج کنین یا پین دیتای اونو قطع و پول پ یا پول دان کنین ببینین پین خروجی میکرو بعد از چند ساعت تغییر وضعیت میده یا نه
                        از پیشنهاد جالبتون خیلی ممنون .من این کارو انجام دادم و منشاء مشکل همین جاست !
                        حدس میزنم وقتی میخوام ریموت رو با دستگاه لرن کنم نویز های ناخواسته که تو محیط کارمم هم زیاده با دستگاه لرن میشه و اگه اون نویز دوباره بیافته دستگاه فکر میکنه ریموتی فشرده شده و عمل مربوطه رو انجام میده !

                        از توجه و راهکار های همه دوستان خیلی تشکر میکنم
                        زمان تنها واحد حقیقی اندازه گیریه
                        زمان وجود ماده رو اثبات میکنه
                        بدون زمان هیچکدوم ما وجود نخواهیم داشت
                        زمان یکتاست

                        دیدگاه

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