راه‌اندازی I2C در میکروکنترلر WCH | قسمت دوازدهم آموزش CH32

blog
۱۴۰۳-۱۲-۱۳
7 دقیقه

با سلام، در این قسمت از آموزش‌ CH32 میریم سراغ I2C در این میکروکنترلر این قسمت از آموزش سختی خاصی نداره با کمی دقت متوجه مباحث می‌شوید.

در ابتدا بگم که ادامه‌دادن این آموزش نیازمند پیش‌زمینه‌هایی از رابط i2C و نحوه کارکرد آن هست، اگر با آن آشنایی ندارید پیشنهاد می‌کنم آموزش دوستان در این زمینه رو حتماً مطالعه کنید.

بریم یکم با ساختار داخلی واحد I2C این میکرو آشنا بشیم:

 

واحد I2C این میکرو قابلیت‌های زیادی داره مثل SMBus و آدرس 10 بیتی و ساپورت کردن از سرعت 400 کیلوهرتز که مناسب است برای دستگاه‌هایی مثل LCDهایی که با I2C کار میکنن، از DMA و وقفه هم پشتیبانی میکنه.

بلوگ دیاگرام وقفهاین درخواست‌های وقفه‌ای هست که ساپورت میکنه.

این i2c بدون ACK هم میتونه کار کنه ولی توصیه نمی‌کنم در این مود ازش به‌عنوان I2C استفاده کنید.

آموزش DMA در جلسات بعد داریم، اما داستان اصلی DMA همیشه مقصد و مبدأ هست، پس اگر خواستید I2C را با DMA راه‌اندازی کنید تنها کاری که لازم هست مشخص‌کردن مبدأ و مقصد هست که داخل آموزش DMA در موردش صحبت می‌کنیم.

این میکرو از PEC هم ساپورت میکنه، سعی کنید داخل پروژه‌های حساس حتماً ازش استفاده کنید. حالا شاید سؤالی براتون پیش بیاد که PEC چی هست؟

در پروتکل I2C ،PEC مخفف عبارت “Packet Error Checking” است. PEC یک مکانیزم برای بررسی و تأیید صحت داده‌ها در طول انتقال است. این مکانیزم به‌منظور کاهش خطاهای ناشی از نویز الکتریکی و دیگر مشکلات احتمالی در خطوط ارتباطی استفاده می‌شود.

نحوه کار PEC

PEC از یک روش (Checksum) استفاده می‌کند که به آن “Cyclic Redundancy Check” یا CRC گفته می‌شود. در پروتکل I2C، معمولاً از الگوریتم CRC-8 استفاده می‌شود. این الگوریتم یک بایت اضافی را به بسته‌های داده اضافه می‌کند که شامل نتیجه محاسبه CRC-8 بر روی تمامی بایت‌های داده‌ای است که در بسته انتقال داده شده‌اند.

مزایای استفاده از PEC

  • افزایش قابلیت اطمینان: با اضافه‌کردن PEC، احتمال تشخیص و تصحیح خطاهای انتقال داده افزایش می‌یابد.
  • کاهش خطاها: استفاده از CRC به کاهش خطاهای تصادفی که ممکن است در طول انتقال داده رخ دهد، کمک می‌کند.
  • تشخیص خطاهای چندگانه: الگوریتم CRC-8 توانایی تشخیص خطاهای چندگانه در داده‌ها را دارد.

استفاده از PEC در پروتکل I2C

در پروتکل I2C ،PEC معمولاً به صورت یک بایت اضافی در انتهای هر بسته داده اضافه می‌شود. گیرنده پس از دریافت داده‌ها و PEC، محاسبات CRC-8 خود را بر روی داده‌های دریافت شده انجام می‌دهد و نتیجه را با PEC دریافت شده مقایسه می‌کند. اگر نتایج یکسان باشند، داده‌ها صحیح در نظر گرفته می‌شوند؛ در غیر این صورت، داده‌ها دارای خطا هستند و باید دوباره ارسال شوند.

به طور خلاصه، PEC در I2C یک ابزار مؤثر برای افزایش صحت و اطمینان در انتقال داده‌ها است و استفاده از آن می‌تواند به بهبود کارایی و قابلیت اطمینان سیستم‌های مبتنی بر I2C کمک کند.

با بیشتر قابلیت‌های واحد I2C این میکرو آشنا شدیم، حالا نوبت کدنویسی برای این واحد هست.

اولین کار برای راه‌اندازی‌اش فعال‌کردن کلاک واحد I2C هست و GPIO که قرار است واحد I2C ما بهش وصل بشود، برای تغییر پایه‌های پیش‌فرض I2C می‌تواند از واحد AFIO استفاده بکنید که یک جدول داخل دیتاشیت دارد که مشخص می‌کند با تعیین کدام بیت‌ها این فانکشن‌ها روی کدام پایه‌ها سوئیچ می‌شوند و پایه‌های GPIO رو به‌صورت Alternate function تعریف می‌کنیم و راه‌اندازی می‌کنیم، به‌صورت زیر:

 

کد های استفاده از PEC در پروتکل I2C

 

کد های استفاده از PEC در پروتکل I2C

 

پس از راه‌اندازی این بخش میریم سراغ کانفیگ کردن خود واحد I2C که به شکل زیر است:

کد های استفاده از PEC در پروتکل I2C

 

سرعت کلاک روی 100 کیلو هرتز تععین شده، نحوه آدرس دهی 7 بیتی است،پارامتر DutyCycle برای مود سریع I2C مورد استفاده قرار میگیره و عملا اینجا در کد ما تاثیری ندارد، ولی گذاشتمش که یک توضیح مختصری در موردش برای کسایی که میخوان در مود سریع کار کنن بدم،

طبق استاندارد I2C، در حالت Fast Mode، نسبت زمان‌بندی به‌صورت زیر است:

  • حداقل tHIGH = 600 نانوثانیه
  • حداقل tLOW = 1300 نانوثانیه

در پروتکل I2C، “Duty Cycle” به نسبت زمانی که خط کلاک (SCL) در وضعیت بالا (High) یا پایین (Low) است، اشاره دارد. این نسبت در حالت‌های مختلف سرعتی I2C، به‌ویژه در حالت “Fast Mode”، اهمیت زیادی دارد.

Duty Cycle در حالت Fast Mode

در حالت “Fast Mode” که سرعت انتقال داده‌ها تا 400 کیلوهرتز است، نسبت‌های Duty Cycle به گونه‌ای تنظیم می‌شوند که زمان‌بندی دقیق‌تر و بهینه‌تری برای انتقال داده‌ها فراهم شود. در Fast Mode، زمان‌بندی و Duty Cycle‌ها به گونه‌ای طراحی می‌شوند که سازگاری و کارایی در انتقال داده‌ها افزایش یابد.

کدی که برای پیاده‌سازی این عمل نوشته آن به‌صورت زیر هست:

کد های استفاده از PEC در پروتکل I2C

سپس مد رو روی I2C می‌زاریم، ACK رو لازم داریم پس فعالش می‌کنیم، مد کاری ما مستر هست  و تعیین‌کردن Ownaddress تأثیری روی کار ما ندارد و برای حالت Slave استفاده می‌شود.

بعدش هم با I2C_CMD و I2C_Init واحد I2C را فعال می‌کنیم.

مثال عملی با آی سی DS3231

ما برای مثال می‌خوایم ثانیه رو از آی سی DS3231 بخونیم.

در اینجا ترتیب کدها مهم بود و کمی حجمشون بالا برای همین تبدیل به تابع کردم که خواناتر باشن.

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

نکته بعدی این است که خود توابع این توابع رو به‌صورت پیش‌فرض دارند و میتونید ازشون استفاده کنید، اینجا من برای اینکه یک ارتباط I2C رو از شروع ارتباط تا پایانش رو ببینید و نوشته باشید، خودم این تابع‌ها رو نوشتم، البته ناگفته نماند که اون توابع آماده همه کار رو انجام نمیدن و شروع‌کردن و پایان‌دادنش با خودتون هست که در ادامه آموزش یاد می‌گیریم.

این کد برای ارسال دو بار دیتا و یک بار آدرس هست، اول آدرس رو میفرسته سپس آدرس رجیستری که میخوایم داخل اون چیزی بنویسیم، سپس خود دیتا رو ارسال میکنه. Whileهایی که استفاده شده برای تأیید دریافت ACK هست؛ ولی شما میتونید این رو عوضش بکنید تا برنامه‌تون قفل نکنه اینجا چون صرفاً فقط راه‌اندازی یک ای سی خالی بود از While استفاده شده. بهتر است یک روتین جدا که به روتین برنامه اصلی کاری نداشته باشد برای چک‌کردن ارورها داشته باشد.

کد های خواندن ثانیه رو از ای سی DS3231

این هم برای خواندن از رجیسترهای DS3231 هست:

کد های خواندن ثانیه رو از ای سی DS3231

خب برای استفاده از این توابع  هم به این صورت عمل می‌کنیم:

کد های خواندن ثانیه رو از ای سی DS3231

 

اینجا سه رجیستر ثانیه و دقیقه و ساعت مقدار 0 و 0 و 12 داخلشون قرار گرفتن.

کد های خواندن ثانیه رو از ای سی DS3231

در اینجا مقدار رجیستر 0 که آدرس ریجستر ثانیه هست رو هر 100 میلی ثانیه میخونیم.

برای خواندن دقیقه رجیستر 1 رو میخونیم و برای ساعت ریجستر 2.

برای تنظیم بقیه مواردش هم میتونید در بقیه رجیسترهایش بنویسید و بخونید.

این هم کد کامل این قسمت از آموزش:

تا قسمت بعدی موفق باشید.

اطلاعات
0
0
لینک و اشتراک
profile

عرفان رفیعی

متخصص الکترونیک

erixson.elc@gmail.com

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

سیسوگ شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

سیسوگ شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

دیدگاه ها

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله