اطلاعیه

Collapse
No announcement yet.

رفع خطای timeout در پورت i2c

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

    رفع خطای timeout در پورت i2c

    سلام به اساتید
    میکرو stm32f100 روی برد دیسکاوی (بر ای این میگم که بدونید سخت افزار استاندارده و ساخت دست من و امکان خطاهای سخت افزاری روش نیست)

    ماژول ها و ارتباطات:
    sim800L روی USART2 با DMA
    DS1307 روی I2C1

    شرح مشکل:
    وقتی از ماژول sim800 پیام دریافت یا ارسال میکنم یا تماس .... پورت i2c که در حال قرائت مقدار زمان و تاریخ از DS1307 در حلقه While(1) هست دچار خطای Timeout میشه و حالتی مثل overflow رخ میده برای متغیرهای درگیر با پورت i2c بدین صورت که اول همه چی صفر میشه و بعد اعداد نامربوط تو متغیرهای خروجیش میشینه.
    افزایش دادم زمان timeout رو اما توفیقی حاصل نشد...
    از کجا فهمیدم timeout مشکلمه؟ از تابع HAL_I2C_GETERROR
    چه باید کرد؟
    با سپاس

    #2
    پاسخ : رفع خطای timeout در پورت i2c

    نوشته اصلی توسط m.aziz نمایش پست ها
    سلام به اساتید
    میکرو stm32f100 روی برد دیسکاوی (بر ای این میگم که بدونید سخت افزار استاندارده و ساخت دست من و امکان خطاهای سخت افزاری روش نیست)

    ماژول ها و ارتباطات:
    sim800L روی USART2 با DMA
    DS1307 روی I2C1

    شرح مشکل:
    وقتی از ماژول sim800 پیام دریافت یا ارسال میکنم یا تماس .... پورت i2c که در حال قرائت مقدار زمان و تاریخ از DS1307 در حلقه While(1) هست دچار خطای Timeout میشه و حالتی مثل overflow رخ میده برای متغیرهای درگیر با پورت i2c بدین صورت که اول همه چی صفر میشه و بعد اعداد نامربوط تو متغیرهای خروجیش میشینه.
    افزایش دادم زمان timeout رو اما توفیقی حاصل نشد...
    از کجا فهمیدم timeout مشکلمه؟ از تابع HAL_I2C_GETERROR
    چه باید کرد؟
    با سپاس
    درود

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

    در سیستم فوق اگر از i2c سخت افزاری استفاده شده باشه نباید جایی مشکلی بوجود بیاد ( دو تا سخت افزار جدا داریم که اگر با dma مدیریت دیتا بشن که تقریبا پردازنده هیچ درگیری نداره ، بدون dma هم باشه باید اینتراپت های uart و i2c کنترل فرایند جابجایی دیتا رو انجام بدن )

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


    بهتره کدهای دریافت و ارسال دیتای این دو بخش ( پورت سریال و twi ) رو قرار بدید تا بشه بررسی اش کرد

    دیدگاه


      #3
      پاسخ : رفع خطای timeout در پورت i2c

      نوشته اصلی توسط Amie.s.m نمایش پست ها
      دو تا سخت افزار جدا داریم که اگر با dma مدیریت دیتا بشن که تقریبا پردازنده هیچ درگیری نداره ، بدون dma هم باشه باید اینتراپت های uart و i2c کنترل فرایند جابجایی دیتا رو انجام بدن )
      درود بر شما یار همیشگی این بخش از انجمن
      فقط ارتباط سریالم با sim بصورت dma هست و ارتباط i2c با در حالت معمولی mem_read / write نوشته شده.
      من یک مشکل ادراکی هم در مورد I2C دارم که آیا از وقفه و DMA که بصورت MASTER / SLAVE در کتابخانه HAL نوشته شدند میشه با سنسورهایی مثل DS1307 کار کرد یا فقط هنگامی استفاده میشه که با یک پردازنده دیگر داریم کار میکنیم که ممکنه تایمینگ منظم نباشه...؟
      اکثر آموزش ها و کتابخونه ها با MEM_READ/WRITE نوشتند برا سنسورها و ماژول ها و در مورد ارتباط بین پردازنده ها با IT و DMA نوشتند، میشه اینجا هم دستور قرائت از DS1307 رو با وقفه نوشت و از timeout خلاص شد؟

      مشکل دوم اینه که آیا IC DS1307 بدون باطری کار نمیکنه؟
      یا همیشه باید باطری بهش وصل باشه؟ (قاعدتا بدون باطری باید وقتی از برق تغذیه استفاده میکنه کار کنه) اما من وقتی باطری رو برمیدارم از کار میفته و error code = 4 رو میده.
      گاهی میشه که اصلا ثانیه نمیشمره با اینکه تا لحظاتی قبل همه چی اوکی بود رو همون کد ! ممکنه کریستال خراب شده باشه؟
      جدیدترین ویرایش توسط m.aziz; ۱۸:۳۶ ۱۴۰۱/۱۲/۰۱.

      دیدگاه


        #4
        پاسخ : رفع خطای timeout در پورت i2c

        ببینید استفاده از dma ، وقفه ، بافر و کلا هر تکنیک سخت افزاری نرم افزاری مستقل از پریفرالی هست که داریم باهاش کار میکنیم .

        اینه که مثلا شما داری با i2c و زیر مجموعه هاش کار میکنی مهم نیست اون تجهیز RTC هست ، ایپیرامه ، سنسوره یا نمایشگر و غیره .
        پروتکل مهمه که چطور کار میکنه نه تجهیز تحت اون پروتکل .

        در مورد استفاده از وقفه های i2c و کلا استفاده از وقفه در پریفرالها روش درست اینه که تمام پریفرالها باید با وقفه کار کنید ( اگر حجم دیتا یا روند تکرار کار زیاده باید dma هم استفاده بشه ) .

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

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

        اینه که i2c رو میشه با اینتراپت و dma سرویس دهی کرد ولی تایمر هم برای اینجور شرایط باید استفاده بشه ( اینا کیس exception هستن )

        در مورد ds1307 بله بدون باتری هم کار میکنه ( بدون باتری بعد از قطع تغذیه رجیسترهاش از دست میره موقعی که روشن میشه روی حالت پیش فرض و ساعت متوقف شده بالا میاد باید ست بشه تا کار کنه ... منتهی من متوجه نشدم وقتی شما روی میکروت RTC کامل داری چرا داری از rtc اکسترنال اونم این مدل قدیمی استفاده میکنی ؟ )

        اینکه گاهی ثانیه نمیشمارد تقرببا غیر ممکنه ( کریستال ساعت اینطوری نیست که تصادفی کار کنه یا نکنه )

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

        دیدگاه


          #5
          پاسخ : رفع خطای timeout در پورت i2c

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

          دیدگاه


            #6
            پاسخ : رفع خطای timeout در پورت i2c

            نوشته اصلی توسط m.aziz نمایش پست ها
            بله درست میفرمائید در اولین فرصت کد مربوطه رو قرار میدم.
            دلیل استفادش کاور کردن خطای RTC در میکروکنترلره، کالیبره کردنشم تا جایی که تحقیق کردم چندان موفق و قابل اعتماد نیست چون کلاک کریستال تایمر خواننده ی کلاک RTC خودش متاثر از کریستاله میکروست.
            آیسی کپیه بر ا تست و از این بازی ها زیاد درمیاره و از درست کار کردنش مطمئن نیستم ، تعویضش میکنم با کریستالش.
            ببخشید این اطلاعات رو از کجا میارید ؟

            منبع اینکه میفرمایید کلاک rtc متاثر از کریستال میکرو هست چیه ؟
            آر تی سی قرار باشه کریستال جدا داشته باشه ولی متاثر از کلاک سیستم باشه که دیگه rtc ( با تعاریف سنتی اش ) محسوب نمیشه .

            rtc یک پریفرال مجزا از سیستمه ( در واقع یک کانتره که کلاکش رو از کریستال ساعت میگیره ، تغذیه اش مجددا مجزاست ... رجیسترهاش رم هست که بسته به میکرو چند ده تا چند کیلوبایت در دامین rtc داریم که نقش eprom با قابلیت نوشتن بینهایت بار رو ایفا میکنه و ... ) دقت این کانتر بستگی به دقت کریستالش داره .

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

            دیدگاه


              #7
              پاسخ : رفع خطای timeout در پورت i2c

              نوشته اصلی توسط Amie.s.m نمایش پست ها
              بخشید این اطلاعات رو از کجا میارید ؟
              منبعی چه داخلی و چه خارجی نبوده که در این مورد صحبت نکرده باشه مثلا این فایل فارسی(انتهای صفحه نکته سوم):
              در این بخش در مورد وابستگی فرکانس کریستال به دما و روش کالیبره کردن خودکار RTC برای جبران خطای تغییر فرکانس صحبت خواهیم کرد.


              شما پالس های بخش RTC رو در روش کالیبراسیون ST با یک تایمر دیگه میشمری که خود اون تایمر از کریستال تامین کلاک میکنه، شما منکر تاثیرگذاری تغییرات دما بر روی کریستال هستی؟
              این مورد رو من عملی هم تست کردم چند بار و شاهد عقب افتادن ساعت میکرو بودم وگرنه از خدام بود حذفش کنم...

              نوشته اصلی توسط Amie.s.m نمایش پست ها
              ین آپشنها در rtc های اکسترنال در دسترس نیست
              لرومی نداره در دسترس باشه وقتی تو کارخانه سازنده با بالاترین دقت کالیبره شده.
              جدیدترین ویرایش توسط m.aziz; ۱۴:۴۹ ۱۴۰۱/۱۲/۰۱.

              دیدگاه


                #8
                پاسخ : رفع خطای timeout در پورت i2c

                نوشته اصلی توسط m.aziz نمایش پست ها
                منبعی چه داخلی و چه خارجی نبوده که در این مورد صحبت نکرده باشه مثلا این فایل فارسی(انتهای صفحه نکته سوم):
                در این بخش در مورد وابستگی فرکانس کریستال به دما و روش کالیبره کردن خودکار RTC برای جبران خطای تغییر فرکانس صحبت خواهیم کرد.


                شما پالس های بخش RTC رو در روش کالیبراسیون ST با یک تایمر دیگه میشمری که خود اون تایمر از کریستال تامین کلاک میکنه، شما منکر تاثیرگذاری تغییرات دما بر روی کریستال هستی؟
                این مورد رو من عملی هم تست کردم چند بار و شاهد عقب افتادن ساعت میکرو بودم.


                لرومی نداره در دسترس باشه وقتی تو کارخانه سازنده با بالاترین دقت کالیبره شده.

                دوست عزیز من برداشتم اینه شما یکسری پیش ذهنیت داری ( کاری به درستی و اشتباه بودنش ندارم ... میشه بررسی کرد دید هر کدوم چقدر درسته یا برعکس ).

                مبتنی بر پیش ذهنیت هات میخوای مسائل رو تحلیل کنی و تجربیات شخصی هم بکنی مدرک اثبات ادعا ، که اینجوری نمیشه .

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

                در مورد کالیبراسیونی که فرمودید در کارخانه با بالاترین دقت انجام میشه ! فکر کنم اصل موضوع رو اشتباه برداشت کردی .

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

                کالیبراسیون مورد اشاره در rtc های میکرو برای اصلاح این موارده ، در آی سی های rtc ساده اصلا بخشی برای انجام اینکار تعریف نشده که حالا کارخونه بخواد با سناریوی فرضی انجامش بده یا کاربر در دنیای عملی نسبت به مرجع مجزا خطاش رو محاسبه و بعد کالیبره اش کنه

                اگر مثلا فکر میکنی غیر از اینه همین rtc مورد استفاده ات رو با ساعت جی پی اس همزمان کن ( وقتی بخوای انجامش بدی متوجه میشی اصلا شمارنده میلی ثانیه نداره که بتونی سینکش کنی ... متوسط موقع ست کردن مثبت و منفی یک ثانیه خطا داری چون رزولوشونت ۱ ثانیه است .

                دو روز بعد ببین همزمان با ساعت جی پی اس هست یا نیست .

                دیدگاه


                  #9
                  پاسخ : رفع خطای timeout در پورت i2c

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

                  نتیجه فرمایشات جنابعالی اینه که این آیسی ها جنبه تجاری دارند و RTC میکرو از اینها دقیق تره؟ عرض کردم بالاتر من از خدامه حذفش کنم اگر راهی داره بفرمائید جسارتا حاضرم هزینه هم پرداخت کنم خدمتتون اگر با روشی موثرتر از کالیبراسیون ارائه شده توسط شرکت ST بشه این IC رو حذف کرد.

                  البته اینم اشاره کنم که DS1307 خودش کریستال خارجی داره که دقتش رو زیر سئوال میبره، تا جایی که میدونم بهتره از IC های کریستال داخلی نسل جدید سنسور دما دار استفاده شه منتها چون من برای شروع میخواستم تست بگیرم رو برنامه از این IC استفاده کردم برای ارتقا مهارت در کد زنی و کار با شبکه I2C بصورت موازی با سایر پریفرال ها وگرنه میتونم از همون SIM800 از اپراتور سیم کارت این اطلاعات رو بخونم، قابل کتمان نیست که مخاطبی که با دیسکاوری بتازگی شروع کرده حرفه ای نیست و تمام اطلاعاتش بدست اومده از این مباحثات و آموزش های رایجه و آزمایشلات شخصی مشروط به اصولی بودن.
                  جدیدترین ویرایش توسط m.aziz; ۱۶:۰۳ ۱۴۰۱/۱۲/۰۱.

                  دیدگاه


                    #10
                    پاسخ : رفع خطای timeout در پورت i2c

                    خیر نتیجه صحبتهای من اینه که : کریستالها مثل تمام مراجع کلاک دیگه خطا دارن »

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


                    مشکلات اسیلاتور یا کریستال که دریفت دمایی دارن ( از کریستالهای tcxo با دقت حدود ۲.۵ ppm استفاده میکنن که دریفت دمایی کمترین مقدار باشه ولی بازم در هر یک میلیون ۲.۵ قسمت خطا داره ) ... دریفت زمانی دارن و سایر خطاهای ساختاری رو شما نمیتونی با تعویض مثلا آی سی rtc اصلاح کنی .

                    هر چقدر خطای کریستال داشته باشی روی rtc شما که مرجعش این کریستال هست اعمال میشه ( صرفنظر از نوع و برندش )

                    اینکه چرا ds1307 حدود ۳۰ سال پیش ساخته شده و کجا استفاده میشه یک موضوعه .
                    اینکه شما بخوای با این استدلال که لابد یه چیزی بوده که این آی سی رو ساختن پس روی میکروهای جدید هم بسطش میدیم یک موضوع دیگه است .

                    آی سی های rtc اکسترنال برای میکروها و کلا سیستمهای پردازنده ای ساخته شدن که rtc داخلی ندارن . ( تمام پردازنده های کامپیوتر قدیم اینطوری هستن rtc مجزا ندارن یا از بایوس باید بگیرن یا یک rtc میخوان )

                    مساله دقت بالا مطرح نبوده .

                    استفاده از ds1307 روی میکرو مثل اینه که کسی بره adc مثلا ۱۰ بیت spi با سمپل ریت ۵۰ کیلوسمپل رو روی میکرویی که adc داخلی 12 بیت ۱ مگاسمپل داشته ببنده با این توجیه که adc خود میکرو ۱ بیت ارور داشته ... این adc سریال نیم بیت ارور داره ( نیم بیت در ۱۰ بیت معادل ۲ بیت در ۱۲ بیته ! )

                    جایی دقت زمانی بالا نیاز باشه سوای اسیلاتورهای متعارف ( که در هر صورت دریفت دارن و جزو بخشهای غیر قابل رفعه ) باید از اسیلاتورهای دقیق مثل ساعتهای اتمی استفاده کرد ( ساعتهای اتمی از دوره تناوب اتم سریم استفاده میکنن که نسبت به دما و خیلی پارامترهای محیطی دیگه ایزوله است و مقدار دریفتشون اوردر ۱۰ به توان منفی ۱۶ هست ! که معادل یک ثانیه در نمیدونم چند میلیون سال میشه ... دقیق ترش هم داریم ساعت کوانتمیه که حدود ۳۷ بار دقیق تره )

                    موضوع اینه همین ساعت اتمی هم طبق قوانین فیزیک کار میکنه و زمانش نسبی هست و وابسته به گرانشه ( در ماهواره ها ساعت مرجع همین ساعت سزیمی هست ولی چون گرانش در اوربیت ماهواره خیلی کمتره به همون نسبت همون ساعت اتمی کالیبراسیون متفاوت داره که تاثیر نسبیت رو خنثی کنیم ... این کالیبراسیون اعمال نمیشد استفاده از جی پی اس روی زمین چندین کیلومتر خطا ایجاد میکنه ) .

                    سوال پیش میاد که همه نمیتونن ساعت سزیمی روی سیستم ببندن تکلیف چیه ؟

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

                    دیدگاه


                      #11
                      پاسخ : رفع خطای timeout در پورت i2c

                      همه فرمایشات شما متین، میفرمائید RTC در STM32 بدلیل تکنولوژی پیشرفته تر و تکامل ساختاری دقیق تر از DS هست یا حداقل دست کمی از اون نداره؟
                      اگر پاسخ بله است حال چه کنم حذفش کنم؟
                      خود ST جدولشو بر حسب تعداد کلاک پالس در ماه بصورت سی روزه ارائه کرده، بر حسب همون کالیبره کنم یعنی میگی؟ همونم البته خود ST تو سایتش پیروی فرمایشات بالاتر شما گفته که به چه دلیل دقیق نیست مثل اون لینکی که فرستادم به استناد همونم راسخ تر شدم برای استفاده از DS در برههه زمانی فعلی وگرنه هم جا تو مدار میگیره هم اعمال هزینه میکنه چه سخت افزاری چه نرم افزاری و چه زمانی، یکی از دلایلم هم تسریع در زمان جهت نپرداختن به موضوع کالیبراسیون بود چون اونم پیاده سازیش با توابع HAL برا من نیاز به فرصت داره.
                      بیرونم رسیدم پای کامپیوتر کد رو میفرستم امشب یا فردا، سپاس از همراهیت
                      جدیدترین ویرایش توسط m.aziz; ۱۶:۳۳ ۱۴۰۱/۱۲/۰۱.

                      دیدگاه


                        #12
                        پاسخ : رفع خطای timeout در پورت i2c

                        دقت rtc میکروی stm32 پیرو دقت کریستال 32768 مورد استفاده است ( در ds1307 هم همین شرط برقراره )

                        تبصره اش اینه در stm32 میتونی یک کلاک دقیق ۵۱۲ هرتز بعنوان مرجع زمانی خارجی به سیستم اعمال کنی میزان خطای کریستال رو در عمل و شرایط محیطی واقعی بدست بیاری بخشهای خاص کالیبراسیون داریم باندازه حدود ۱۱۰ پی پی ام میشه خطای بدست اومده کریستال رو اصلاح کرد .

                        در ds1307 نه میتونی خطای کریستال رو اندازه بگیری نه میتونی سخت افزاری ضریب اصلاح براش بگذاری ...( میشه با میکرو با یه سری تکنیک وضعیت کاری کریستال ds1307 رو بدست آورد منتهی وقتی رزولوشن نمایش ساعت در این rtc یک ثانیه است عملا اونقدر رزولوشن پایینه که اصلاحیه خطای کریستال رو در بازه های زمانی متعارف نمیشه اعمال کرد ... این رزولوشنی که میگم یعنی فرض کنیم زمان واقعی باشه 12:01:02.080 در ds1307 از 02 تا 03 ثانیه هیچ اندازه گیری نداریم متوجه بشیم 02.000 ثانیه بوده یا 02.999 ثانیه همه رو تا به ۳ نرسه ۲ نشون میده .

                        سوای این یک موضوع به اسم propagandation delay یا تاخیر انتشار داریم که فرض بر محال کریستال متصل به ds1307 خطاش صفر مطلق بود و میتونست زمان هم با رزولوشن میکروثانیه نشون بده ... تا روی باس i2c آدرس و رجیسترهای زمان داخلی آی سی رو با سرعت ۱۰۰ کیلوبیت بر ثانیه بنویسیم و اینا داخل آی سی سلکت بشن و طی چند بایت خونده بشن با بهینه ترین کدهای اسمبلی بدون تاخیر بیهوده این روند خوندن رجیسترها چند صد میکروثانیه تا چند میلی ثانیه زمان میبره .

                        زمانی که به میکرو منتقل میشه مربوط به چند میلی ثانیه قبله .

                        در میکروهایی که rtc داخلی دارن تاخیر انتشار ( خوندن رجیسترهای فوق ) در حد نهایتا چند صد نانوثانیه است ....

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


                        کدتون رو فرستادید دقیق تر میشه توضیح داد

                        دیدگاه


                          #13
                          پاسخ : رفع خطای timeout در پورت i2c

                          سلام و روزبخیر
                          مشکل تایم اوت رو با استفاده از وقفه حل کردم، اما این مباحثه باعث شد چیزی رو متوجه بشم و برم سراغ کالیبراسیون RTC میکرو بجای استفاده از RTC IC External مثل DS.
                          اینطور که متوجه شدم منظور شما از این مباحثه این بود که استفاده از RTC IC External روی میکروی STM32 که خودش واحد RTC خوبی داره کار سطح پائین و بیهوده ایه.
                          مثل این که برا یک ماشین برقی آخرین مدل روز خارجی، دلکو که رو پیکان جوانان نصب میشد بگذاریم به بهانه بهینه سازی سیستم الکترونیکیش که یه جاهایی تو سر بالایی شاید کم بیاره تو سرعت بالا...
                          درسته که دلکو کارش تقویت جریانه و برا این مسئله ساخته شده ولی مورد استفادش رو ماشین برقی آخرین مدل روز نیست!
                          درست متوجه شدم؟ اگر بله منطقی بنظر میاد این تفکر !
                          یعنی الان طراحانی که از آیسی ساعت خارجی در پروژه ها استفاده میکنند یا باید میکرویی بدون واحد RTC داشته باشند یا مثل من آماتور بازی درآوره باشند!
                          جدیدترین ویرایش توسط m.aziz; ۰۷:۴۴ ۱۴۰۱/۱۲/۰۳.

                          دیدگاه


                            #14
                            پاسخ : رفع خطای timeout در پورت i2c

                            نوشته اصلی توسط m.aziz نمایش پست ها
                            سلام و روزبخیر
                            مشکل تایم اوت رو با استفاده از وقفه حل کردم، اما این مباحثه باعث شد چیزی رو متوجه بشم و برم سراغ کالیبراسیون RTC میکرو بجای استفاده از RTC IC External مثل DS.
                            اینطور که متوجه شدم منظور شما از این مباحثه این بود که استفاده از RTC IC External روی میکروی STM32 که خودش واحد RTC خوبی داره کار سطح پائین و بیهوده ایه.
                            مثل این که برا یک ماشین برقی آخرین مدل روز خارجی، تقویت کننده جریان (دلکو) که رو پیکان جوانان نصب میشد بگذاریم به بهانه بهینه سازی سیستم الکترونیکیش که یه جاهایی تو سر بالایی شاید کم بیاره تو سرعت بالا...
                            درسته که دلکو کارش تقویت جریانه و برا این مسئله ساخته شده ولی مورد استفادش رو ماشین برقی آخرین مدل روز نیست!
                            درست متوجه شدم؟ اگر بله منطقی بنظر میاد این تفکر !
                            یعنی الان طراحانی که از آیسی ساعت خارجی در پروژه ها استفاده میکنند یا باید میکرویی بدون واحد RTC داشته باشند یا مثل من آماتور بازی درآوره باشند!

                            درود بر شما

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

                            منظور من از مباحث قبلی این بود که « با پیش ذهنیت نمیشه مسائل رو بهم تعمیم داد »

                            باید اطلاعات کافی در مورد هر سیستمی داشت ( اگر نداریم اول باید بریم سازوکار سیستم رو باهاش آشنا بشیم که مستلزم مطالعه است و اکثریت برای فرار از این بخش خیال میکنن زرنگ بودن این تیکه رو حذف میکنن )
                            بعداً تصمیم گرفت چی رو کجا و به چه روشی میشه استفاده کرد و چرا ( این وسط باید مزیت نسبی در یک یا چند زمینه برای انتخاب وجود داشته باشه )

                            مثال دلکویی که زدید تقرببا مفهوم مد نظر رو میرسونه « هر چند دلکو کارش اونی که توصیف کردید نیست » ( دلکو توزیع کننده جرقه و راه انداز کوئله که معمولا عبارت دلکو به دلکوی مکانیکی اشاره داره ، دلکوهای نسل بعد الکترونیکی شدن از موترونیک به بعد هم که کل مدیریت سیستم جرقه مثل بقیه بخشهای موتور در اختیار ای سی یو قرار گرفته ، دیگه دلکو نداریم )

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

                            اگر تجهیز خارجی مزیت نسبی نداشت قضیه میشه همون نتیجه ای که آخر موضوع گرفتین .

                            ( اگر دسترسی به پروتکلهای زمان رادیویی یا تحت شبکه دارید حتی کالیبراسیون کریستال ساعت هم دیگه موضوعیت نداره ... اون کالیبراسیون قرار بوده دریفت چند ppm کریستال رو برای کاربرد آفلاین طی بازه های زمانی چند روژه پوشش بده ... سیستمی که مثلا طی هر روز داره حداقل یکبار زمانش رو با این پروتکلها سینک میکنه دریفت اسیلاتور توش گم میشه ... مهم نیست کالیبره باشه یا نه ... ماژول GSM شما RTC داخلی داره ، با باتری بک آپ در حد چند سال و بدون باتری بک آپ در حد چند ساعت تا چند روز بوسیله یک خازن سرامیکی چند میکرو فاراد ساعت داخلی sim800 و رجیسترهای این دامین کار میکنن ... هر بار روی شبکه gsm رجیستر بشید زمان اتوماتیک تنظیم میشه یا با lts مجانی سینکش میکنید ، اگر از سرویس دیتا استفاده می کنید میتونید از ntp های پیش فرض یا دلخواهتون هم زمان رو دقیق تر بدون درگیر شدن با روند پشت صحنه مجددا سینک کنید ... ما در طراحی هایی که جی اس ام مودم ، وای فای مودم یا جی پی اس توش استفاده شده پایه باتری بک آپ میکرو رو به پایه بک آپ ماژول متصل میکنیم دیگه نیازی به تغذیه مجزای دامین بک آپ میکرو نیست بخش rtc میکرو رو در این موارد معمولا نه برای کاربرد ساعت ، برای نگهداری اطلاعات مشابه eprom زمانی که سیستم به هر دلیل پیش بینی نشده ریست یا خاموش بشه اطلاعات مهم قبل از ریست رو بدون محدودیت تعداد دفعات نوشتن حفظ میکنیم )

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

                            بعضی از مدرسین برای توجیه مدعی میشن ما از rtc های i2c در روند آموزش استفاده کردیم هنرجو با پروتکل twi هم آشنا بشه ... منتهی توضیح نمیدن برای آموزش پروتکل بجای آی سی منقرض شده و بدون کاربرد مثلا همین پروتکل رو با نمایشگرهای oled و lcd های گرافیکی یا سنسورهای mems آموزش میدادید که هم جنبه کاربرد امروزی داشته باشه هم اینکه هنرجو مساله و روش مدیریت دیتای سریع تحت پریفرال کند رو عملا تجربه کنه متوجه بشه شمای مدرس اصلا نباید بیس آموزشت رو بر مبنای حلقه و delay قرار میدادی که هر دو صد درصد غلط و ممنوعه ( در منابع فارسی به کررات استفاده میشن تا حدی که اکثرا فکر میکنن تایمر یعنی این )
                            به این مسائل میگن پارادایم ...

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

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

                            توجیه این بود که جانشین اول گفته یادمه از زمان پدرم این رسم بوده ! پس قانون کاخهای فرانسه است .
                            جدیدترین ویرایش توسط Amie.s.m; ۰۵:۰۵ ۱۴۰۱/۱۲/۰۳.

                            دیدگاه


                              #15
                              پاسخ : رفع خطای timeout در پورت i2c

                              درود بر شما

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

                              بله دلکو رو فقط اشاره ای مختصر کردم (قسمتیش اینه که برق تقویت میشه و در اختیار کوئل قرار میگیره ، نسل بعد طراحی ها در ایران انژکتوری شد و زمینه ساز حذف این قطعه) و میشه براش زیاد نوشت، هدفم تمثیل بود نه جسارتا شرح کارش برا شما یا بقیه اساتید.

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

                              استفاده کردم از فرمایشات شما بزرگوار، مجدد از مشارکت شما در این مباحثه تشکر میکنم و آرزوی توفیق دارم.
                              جدیدترین ویرایش توسط m.aziz; ۰۷:۴۵ ۱۴۰۱/۱۲/۰۳.

                              دیدگاه

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