اطلاعیه

Collapse
No announcement yet.

مقدار پایه های IO در میکرو PIC بدون اینکه تو برنامه بگیم، ریست میآ‌شه!!!

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

    مقدار پایه های IO در میکرو PIC بدون اینکه تو برنامه بگیم، ریست میآ‌شه!!!

    سلام
    به مشکلی برخورد کردم که البته با سرچ یه راه حلی براش پیدا کردم، اما مطمئن نیستم، خواستم اینجا مطرح کنم تا اگه دوست دیگه ای هم بهش برخورد کرده تجربیاتش رو بگه.
    :read:
    داستان از اینجا شروع شد که من بیزر رو روشن میآ‌کنم، بدون اینکه در جایی از برنامه ذکر بشه، خودش خاموش میآ‌شه. حالا هر کار مهمی که با پورتتون کرده باشید، ممکنه این اتفاع روش تأثیر بد بذاره.
    الان که داشتم این متن رو میآ‌نوشتم، یه بار برام رسید که شامل 49 تا محصول تولیدی مرجوعی بود، :cry2:
    واقعا ناراحت کنندست، همین جور داره تولیداتم بر میآ‌گرده.... :angry:

    علت رو بررسی کردم ...
    نتیجه : سازنده ، Microchip ، میگه که : با نهایت شرمندگی کامپایلر ما باگی دارد که طی آن شما امکان دسترسی بیتی به پایهآ‌ها را ندارید ..

    همین.

    خوب از اون که نا امید شدم.
    راه حل : یا کل پورت رو بخونید، بعد ادیت کنید و دو باره در کل پورت بریزید.
    یا مقدار صفر یا یک رو اول بریزید داخل یک متغییر و بعد اون متغیر رو مثلا بریزید داخل RA3
    یا اینکه از میکروهای سری 12 و 16 استفاده نکنید و برید سراغ 18 به بالا.


    خلاصه که تا حالا چند ده میلیون ضرر شده واسم.
    :cry2: :cry2:
    :angry: :angry: :angry:


    راستی من از کامپایلرهای MPLAB XC8 Ver1.33 و Hitech-C PIC10-12-16 Ver9.83 استفاده میآ‌کنم.

    #2
    پاسخ : مقدار پایه های IO در میکرو PIC بدون اینکه تو برنامه بگیم، ریست میآ‌شه!!!

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

    دیدگاه


      #3
      پاسخ : مقدار پایه های IO در میکرو PIC بدون اینکه تو برنامه بگیم، ریست میآ‌شه!!!

      میتونین از لچ استفاده کنین برای اطمینان؟ (74HC573)

      دیدگاه


        #4
        پاسخ : مقدار پایه های IO در میکرو PIC بدون اینکه تو برنامه بگیم، ریست میآ‌شه!!!

        با سلام
        دوست عزیز اگه واقعا کامپایلر باگ داره، کامپایلرو عوض کنین.

        ما هم چند ساله با همین pic ها کار میکنیم. با میکرو بیسیک و میکرو سی. همچه مشکلی نداشتیم. محصولات صنعتی تو بد ترین شرایط نویزی و دمایی داریم.

        تازه میخواستیم سوئیچ کنیم روی mplabx، ولی تاپیک شما باعث شد فعلا صبر کنیم.
        کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

        دیدگاه


          #5
          پاسخ : مقدار پایه های IO در میکرو PIC بدون اینکه تو برنامه بگیم، ریست میآ‌شه!!!

          سلام
          کد برنامه اینه :

          تو while که هیچی ندارم ...
          تو وقفه تایمر نوشتم :

          [code=c]
          void interrupt timer_isr(void){
          TMR0=-77; //Every 160uSec, 2uSec for Each edge, 8uSec for MCU Ready
          RA4=1;
          if((T0IE)&&(T0IF)){
          RA3=!RA3;
          T0IF=0; // clear event flag
          }
          RA4=0;
          }
          [/code]

          وقتی که پین چهار صفر میآ‌شه، پین سه رو هم صفر میآ‌کنه، این برنامه رو با MPLAB XC8 Ver1.33 نوشتم.
          همین الان دوباره تستش کردم، تو پروتئوس درسته، اما وقتی میآ‌ریزمش تو آیآ‌سی و با اسکوپ سیگنالآ‌ها رو میآ‌بینم، اتفاق بالا تکرار میآ‌شه. من RA3 رو به عنوان سیگنال اسیلاتور به بیزر پیزو دادم.

          اما وقتی که این کار رو میآ‌کنم درست میآ‌شه:

          [code=c]
          void interrupt timer_isr(void){
          static unsigned char i;
          TMR0=-77; //Every 160uSec, 2uSec for Each edge, 8uSec for MCU Ready
          i=1;RA4=i;
          if((T0IE)&&(T0IF)){
          RA3=!RA3;
          T0IF=0; // clear event flag
          }
          i=0;RA4=i;
          }
          [/code]

          ضمنا، مشکل از داخل میکرو شروع میآ‌شه، مسئلهآ‌ای با جریان کشی یا نویز از بیرون ندارم که مجبور به استفاده از 573 بشم.
          راستی من قبلا از های تک سری 10-12-16 استفاده میآ‌کردم، اونجا هم همین مشکل بود، البته تکرارش که عجیب نیست، چون این شرکت رو میکروچیپ خرید و باهاش ام پی لب رو زد.

          دلیلی که خودم رو مجبور میآ‌دونم از این کامپایلر استفاده کنم، کد خروجی بسیار بهینه و البته سریع اونه. اگر از کامپایلر دیگهآ‌ای استفاده کنم، به دلیل جا نشدن برنامه در حافظه مجبورم از آیآ‌سی گرونآ‌تر استفاده کنم که شما بهتر میآ‌دونید، تو تولید، 1000 تومن هم 1000 تومنه.

          مشکل دیگه این بود که من 4 تا متغییر رو مخصوص نمایش در 4 دیجیت سگمنت تنظیم کرده بودم، به طوری که هر چی که در اونها میآ‌نوشتم، در سگمنت رفرش میآ‌شد. اما مسئله از اینجا شروع شد که وقتی دائما تو حلقه while تو این متغیرها مقدار صفر رو میآ‌ریختم، همچین که از حلقه میآ‌رفت بیرون و داخل توابع دیگه میآ‌شد، مقدار این متغیرها تغییر میآ‌کرد و چون وقفه تایمر ناگهان از راه میآ‌رسید و مقدار داخل این متغیرها رو تو سگمنت چاپ میآ‌کرد، یه دفعه میآ‌دیدی که به جای صفر گاهی از اوقات یه عدد دیگه داخل سگمنت یه پر میآ‌زد. :angry: :angry: :angry:

          بعد از ظهری از اون شرکتی که بردهام رو بهش میآ‌فروختم تماس گرفتن و گفتن که فعلا کل سفارشات رو کنسل کنید :angry: :angry: :angry: :angry: :angry:
          کسی میآ‌تونه کمکی کنه؟
          نکتهآ‌ای هست که من تو طراحی در نظر نگرفته باشم؟

          دیدگاه


            #6
            پاسخ : مقدار پایه های IO در میکرو PIC بدون اینکه تو برنامه بگیم، ریست میآ‌شه!!!

            دوست عزیز سلام
            فکر نکنم کامپایلر باگ داشته باشه چون من هم چند سال دارم با انواع میکرو ها با کامپایلر XC کار می کنم ولی همیشه اشکال از خودم بوده
            وبارفع باگ در برنامه ی خودم مشکلم حل شده احتمالا چیزی که میکرو چیپ گفته مربوط به کار شما نمیشه.

            در کامپایلر XC برای دسترسی بیتی وتغییر اون مثلا برای پورت ها از دستور مثلا PORTBbits.RB1 یا برای سری 18F از دستور LATBbits.LB1
            استفاده کنید.

            برای تاگل این رو امتحان کنید: ; PORTBbits.RB1 =~PORTBbits.RB1 وبرای سری 18 ترجیحا LATBbits.LB1=~LATBbits.LB1;
            انشالا مشکلتون حل میشه.
            در زندگيت به کسي اعتــــماد کن که به او ايمــــان داري نه احســاس . . .

            چه بسيار انسان ها ديدم تنشان لباس نبود؛و چه بسيار لباس ها ديدم که انساني درونش نبود ...!

            دیدگاه


              #7
              پاسخ : مقدار پایه های IO در میکرو PIC بدون اینکه تو برنامه بگیم، ریست میآ‌شه!!!

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

              پس در حقیقت انتساب مقادیر ثابت به بیتهای پورتها مشکل داره و نه دسترسی بیتی. .
              کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

              دیدگاه


                #8
                پاسخ : مقدار پایه های IO در میکرو PIC بدون اینکه تو برنامه بگیم، ریست میآ‌شه!!!

                دوست عزیز درست متوجه نشده کدوم پین منظور شماست اما اگر پین مورد نظر شما PORTA.4 باشه به این نکته توجه کنید که این پین نمیتونه در حالت HIGH قرار بگیره (با توجه به دیتا شیت) و اگر قصد شما سوئیچ یه ترانزیستوره باید با یه مقاومت PULLUP این پین در حالت HIGH بدید.

                دیدگاه


                  #9
                  پاسخ : مقدار پایه های IO در میکرو PIC بدون اینکه تو برنامه بگیم، ریست میآ‌شه!!!

                  نوشته اصلی توسط siyalk.ob
                  نتیجه : سازنده ، Microchip ، میگه که : با نهایت شرمندگی کامپایلر ما باگی دارد که طی آن شما امکان دسترسی بیتی به پایهآ‌ها را ندارید ..
                  هیچ همچو چیزی نیست. میشه لینک بدید؟

                  در ضمن خواهشاً توی پستهاتون کمتر از شکلک استفاده کنید.

                  دیدگاه

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