اطلاعیه

Collapse
No announcement yet.

وقفه در اجرای i2c

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

    وقفه در اجرای i2c

    سلام دوستان
    من یک مداری دارم که ds1307 داره و ارتباط سریال با یک master دیگه داره ..... با میکرو pic
    سوالیکه اینجا پیش میاد اینه :
    ایا وقتی من در حال خوندن در زمان و تاریخ در ds1307 با پروتکل i2c هستم اگر فرمانی از master بیاد و وقفه سریال ایجاد بشه ارتباط i2c قظع میشه یا درست انجام نمیشه ؟؟؟؟
    مثلا در حال اجرای برنامه ی زیر هستم و می خوام ثانیه و دقیقه و ساعت رو بخونم وقتی که دارم i2c read میکنم وقفه rs232 ایجاد بشه و میکرو میره که زیر روال وقفه 232 رو اجرا کنه و داده رو دریافت کنه ....

    ایا i2c داده رو درست میخونه و همچنین rs232 با getc به موقع میتونه بره به زیر روال و داده رو ذخیره کنه ؟



    ایا i2c داده رو درست میخونه و همچنین rs232 با getc به موقع میتونه بره به زیر روال و داده رو ذخیره کنه ؟



    #2
    پاسخ : وقفه در اجرای i2c

    من فکر میکنم شما مفهوم وقفه را کاملا نمیدونین!!

    وقتی یه وقفه اتفاق می افته ، زیر روال برنامه وقفه به صورت سخت افزاری اجرا میشه و کاری به برنامه main نداره!! وقفه جداگانه کار خودشو انجام میده و برنامه اصلی هم جدا!!

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

    دیدگاه


      #3
      پاسخ : وقفه در اجرای i2c

      نوشته اصلی توسط ok20
      من فکر میکنم شما مفهوم وقفه را کاملا نمیدونین!!

      وقتی یه وقفه اتفاق می افته ، زیر روال برنامه وقفه به صورت سخت افزاری اجرا میشه و کاری به برنامه main نداره!! وقفه جداگانه کار خودشو انجام میده و برنامه اصلی هم جدا!!

      حتی اگر چندتا وقفه همزمان استفاده کرده باشین ، در اجرای اونها هیچ تداخلی به وجود نمیاد، چون این امر سخت افزاری است نه نرم افزاری!!!!
      شاید شما مفهوم وقفه رو نمیدونید. این که میگید به صورت سخت افزاری انجام میشه یعنی چی؟ یعنی اینکه یه پردازنده دیگه باید بیاد و دستورات داخل وقفه رو اجرا کنه!!
      ایجاد وقفه به صورت سخت افزاری هست نه اجرای اون
      که شما میتونید با دستورات مربوط به اولویت دهی وقفه ها، اونایی که براتون مهم تره رو به اولویت بالا تری ببرید. که مثلا تا روتین وقفه i2c تمام نشده وقفه rs232 عمل نکنه
      در مورد سریال هم بستگی به اندازه بافر و حجم اطلاعات شما داره. ممکنه بافر پر بشه و اطلاعات قبل از اینکه بخونیدش از بین بره
      AYRIC

      دیدگاه


        #4
        پاسخ : وقفه در اجرای i2c

        من فکر میکنم شما مفهوم وقفه را کاملا نمیدونین!!

        وقتی یه وقفه اتفاق می افته ، زیر روال برنامه وقفه به صورت سخت افزاری اجرا میشه و کاری به برنامه main نداره!! وقفه جداگانه کار خودشو انجام میده و برنامه اصلی هم جدا!!

        حتی اگر چندتا وقفه همزمان استفاده کرده باشین ، در اجرای اونها هیچ تداخلی به وجود نمیاد، چون این امر سخت افزاری است نه نرم افزاری!!!!
        ماذا فاذا ؟؟؟ فازت چیه مشتی ؟؟؟؟
        مگه دوتا پردازنده داریم که بصورت موازی برنامه رو اجرا کنه .... چیزی که روشنه اینه که برنامه خط به خط اجرا میشه نه بصورت موازی هم i2c اجرا بشه هم rs232.... خواهشا قبل از اظهار نظر کمی فکر کنید چون با راهنمایی اشتباه کلا راه اشتباه طی میشه .......

        شاید شما مفهوم وقفه رو نمیدونید. این که میگید به صورت سخت افزاری انجام میشه یعنی چی؟ یعنی اینکه یه پردازنده دیگه باید بیاد و دستورات داخل وقفه رو اجرا کنه!!
        ایجاد وقفه به صورت سخت افزاری هست نه اجرای اون
        که شما میتونید با دستورات مربوط به اولویت دهی وقفه ها، اونایی که براتون مهم تره رو به اولویت بالا تری ببرید. که مثلا تا روتین وقفه i2c تمام نشده وقفه rs232 عمل نکنه
        در مورد سریال هم بستگی به اندازه بافر و حجم اطلاعات شما داره. ممکنه بافر پر بشه و اطلاعات قبل از اینکه بخونیدش از بین بره
        مهندس عزیز من برای i2c از وقفه استفاده نمی کنم البته ترجیحا....ی
        پس نظر شما اینه که در هنگام خواندن i2c ممکن داده rs232 از بین بره ....و در حال خواندن i2c میکرو نرسه که بره rs232 رو بخونه ....... منم همین فکر رو میکردم ....
        یعنی راه حلی نیست ؟

        دیدگاه


          #5
          پاسخ : وقفه در اجرای i2c

          وقفه i2c که مثال زدم وقفه ssp مربوط به حالتیه که میکرو در حالت slave تنظیم شده
          توی کار شما اگه دیتا rs232 رو در وقفه بخونید مشکلی پیش نمیاد!
          فقط در برنامتون نباید از دستوراتی که در طی اونها وقفه غیر فعال میشه رو استفاده کنید
          AYRIC

          دیدگاه


            #6
            پاسخ : وقفه در اجرای i2c

            تشکر ... :job:
            من هیچ وقت وقفه رو غیر فعال نمی کنم ......
            میشه بیشتر توضیح بدید ..... فرض کنید میکرو یک دستور read فرستاد برای ds1307 و میکرو منتظر میمونه تا داده رو از ds1307 بخونه درست در لحظه ی دریافت از پورت i2c یک داده سریال uart میاد ... میکرو چطور میتونه این موضوع رو حل کنه که ایا باید بره داده سریال رو بخونه یا ادامه خواندن داده i2c.؟؟؟؟؟؟

            دیدگاه


              #7
              پاسخ : وقفه در اجرای i2c

              والا تا حالا به این قضیه برخورد نکردم
              اگه میکرو وسط دریافت دیتا i2c رو ول کنه چه مشکلی پیش میاد؟
              slave کلاک خودش رو مگه از master نمیگیره؟ من اینجوری فکر میکنم
              منظورم اینه که اگه وسط کار میکرو ds1307 رو ول کنه و بره سراغ یه کار دیگه بعدش با ادامه کلاکی که به ds1307 میده ادامه دیتا رو هم دریافت میکنه
              AYRIC

              دیدگاه


                #8
                پاسخ : وقفه در اجرای i2c

                نوشته اصلی توسط Meysamhl
                سلام دوستان
                من یک مداری دارم که ds1307 داره و ارتباط سریال با یک master دیگه داره ..... با میکرو pic
                سوالیکه اینجا پیش میاد اینه :
                ایا وقتی من در حال خوندن در زمان و تاریخ در ds1307 با پروتکل i2c هستم اگر فرمانی از master بیاد و وقفه سریال ایجاد بشه ارتباط i2c قظع میشه یا درست انجام نمیشه ؟؟؟؟
                مثلا در حال اجرای برنامه ی زیر هستم و می خوام ثانیه و دقیقه و ساعت رو بخونم وقتی که دارم i2c read میکنم وقفه rs232 ایجاد بشه و میکرو میره که زیر روال وقفه 232 رو اجرا کنه و داده رو دریافت کنه ....
                ایا i2c داده رو درست میخونه و همچنین rs232 با getc به موقع میتونه بره به زیر روال و داده رو ذخیره کنه ؟
                ارتباط i2c ممکنه موقتاً قطع بشه ولی مشکلی براش بوجود نمیاد چون ارتباط سنکرون هست و با کلاک کنترل میشه.

                اینکه برای USART مشکلی پیش بیاد یا نه بستگی داره به یه چیزایی. کامپایلر و اینکه i2c سخت افزاری هست یا نرم افزاری و baudrate و ... . باید محاسبه و تست کنید.

                نکته دیگر اینکه اگر ساعت و تاریخ از طریق سریال منتقل میشود ممکن است مثلاً در ساعت 10:00 بعد از خواندن دقیقه، وقفه سریال پیش بیاید و ساعت بعذ از 9:59 به اشتباه بصورت 9:00 ارسال شود.

                در آخر اینکه برای قرار دادن کد از این طریق اقدام کنید: آموزش قرار دادن کد در انجمن

                دیدگاه


                  #9
                  پاسخ : وقفه در اجرای i2c

                  با تسکر از همه دوستان بخاطر پاسخ هاشون ....
                  freedom_truth جان تشکر .... مشکل اینجا حادتر میشه که من یه eeprom at24cxx هم توی مدار دارم و باید در اون eeprom هم بنویسم و بخونم .......
                  کامپایلر من ccs هست که errore مربوط به rs232 شو هم فعال کردم ...... و نرخ هم 19200 هست ...
                  ایا تنها راهی که ممیمونه اینه که در زمانی که read و write در i2c دارم باید وقفه ها رو غیرفعال کنم ایا ؟؟ :biggrin:

                  دیدگاه


                    #10
                    پاسخ : وقفه در اجرای i2c

                    کدتو بزار.

                    دیدگاه


                      #11
                      پاسخ : وقفه در اجرای i2c

                      freedom_truth عزیز .... ممنون بابت پیگیری و پاسختون ............سپاس فراوان
                      راستش من بعد اینکه کد رو نوشتم به این مشکل برخوردم اگه بخوام کد رو کپی کنم یه چند صد خطی میشه ...... برای I2C رو که بالا نوشتم.........
                      کلیت اینه که در هنگام تست متوجه شدم میکرو زمانی که داره I2C رو میخونه و همزمان سریال میاد به مشکل میخوره ...... چیکار میشه کرد ؟؟؟؟؟

                      دیدگاه


                        #12
                        پاسخ : وقفه در اجرای i2c

                        از ساده به پیچیده حرکت کنید. اول یک مورد رو تست کنید. اگر جواب داد مورد بعدی رو اضافه کنید. موارد غیر ضروری رو حذف کنید تا مشکل پیدا بشه.

                        دیدگاه


                          #13
                          پاسخ : وقفه در اجرای i2c

                          نوشته اصلی توسط Meysamhl
                          freedom_truth عزیز .... ممنون بابت پیگیری و پاسختون ............سپاس فراوان
                          راستش من بعد اینکه کد رو نوشتم به این مشکل برخوردم اگه بخوام کد رو کپی کنم یه چند صد خطی میشه ......
                          آموزش قرار دادن کد در انجمن

                          دیدگاه

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