جلسه هشتم: راه اندازی RTC (ساعت دیجیتال واقعی) با آی سی DS3231 توسط پروتکل I2C

40,000 ریال

پروتکل I2C ، پروتکل کنترل شده توسط دو سیم و پروتکل خاصی است. اولین سیم SDA (Serial DAta)‌ است و دوم SCL (Serial Clock)  است. داده ها به طور عمده بر روی سیم SDA منتقل می شود. سیم دوم عمدتا برای زمان سنجی است.

توضیحات

پروتکل I2C ، پروتکل کنترل شده توسط دو سیم و پروتکل خاصی است. اولین سیم SDA (Serial DAta)‌ است و دوم SCL (Serial Clock)  است. داده ها به طور عمده بر روی سیم SDA منتقل می شود. سیم دوم عمدتا برای زمان سنجی است، انتقال همیشه با شروع یک وضعیت START در پروتکل توسط Master آغاز می شود. پروتکل I2C در واقع ادغام شده از بهترین ویژگی های SPI  و UART می باشد. توسط I2C امکان اتصال چند slave به یک master  مانند و یا استفاده از چند master برای کنترل یک یا چند slave وجود دارد. این ویژگی زمانی که شما می خواهید از چند میکروکنترلر برای ارسال داده به یک کارت حافظه و یا نمایش بر روی LCD استفاده کنید، بسیار مناسب می باشد.

در شروع تبادل داده یه وضعیت START ارسال می شود و در پایان تبادل داده یه وضعیت STOP ارسال می شود.

SDA (Serial Data)  : خطی برای ارسال و دریافت داده بین master و slave

SCL (Serial Clock)  : خطی که حامل سیگنال کلاک می باشد.

I2C  یک پروتکل ارتباطی سریال می باشد، لذا داده ها به صورت بیت به بیت از طریق خط SDA منتقل خواهند شد.

همانند SPI، پروتکل I2C نیز به صورت همزمان می باشد، لذا بیت های خروجی با بیت های نمونه توسط سیگنال کلاک همزمان می باشند. سیگنال کلاک توسط master کنترل می شود.

بعد از ارسال وضعیت START یا Reapeted START میایم و آدرس اسلیو و بیت تعیین جهت داده رو ارسال می کنیم، ممکن است  به یه i2c جندین IC وصل باشد و هر IC یه آدرسی برا خودش داشته باشد، لذا باید اول آدرس آیسی رو ارسال کنیم تا آیسی مد نظر ما فقط دیتا رو دریافت کند و یا در عوض به ما دیتا بدهد.

 

SlaveAddress در مدل معمولی 7 بیت و در مدل های بهبود یافته I2C حدود 10 بیت است و یه تک بیت هم به نام R/Wbit داریم که به آن بیت تعیین جهت داده می گویند، که اگر 0 باشد یعنی نوشتن یا WRITE یا مختصرا W و اگه 1 باشد یعنی خوندن یا READ یا مختصرا R، حالا اگه 0 باشد یعنی می خواهیم به SLAVE دیتا بفرستیم و اگه 1 باشد یعنی داریم به SLAVE گفته می شود که برای ما دیتا بفرست ( دارید درخواست دیتا می کنید )

آیسی یا میکرویی که master است وظیفه تامین کلاک رو بر عهده دارد، معمولا یه master داریم و حداکثر 127 تا slave ( که در مدل های بهبود یافته I2C تعداد slave ها تا 1023 عدد میتونن باشد) که به این حالت میگن  Single Master، البته تو بعضی موارد ممکن است دو یا چند تا master داشته باشیم که به این حالت   Multi Master گفته می شود.

منظور از 127 داده مربوط به SlaveAddress+R/Wbit قسمت SlaveAddress  است که می تواند 7 بیتی باشد یا 10 بیتی که اگر 7 بیتی باشد حداثر 127 تا آدرس رو شامل می شود و اگه 10 بیتی باشد حداکثر 1023 تا آدرس رو شامل می شود.

نحوه عملکرد I2C:

در I2C داده ها به صورت پیام هایی فرستاده شده و پیام ها نیز خود به چند بخش تقسیم می شوند. هر پیام شامل یک بخش آدرس بوده، که همان آدرس باینری مربوط بهslave  است. یک یا دو بخش مربوط به داده نیز در پیام های ارسالی وجود دارد. پیام همچنین شامل شرایط اولیه و پایانی، بیت های read/write و بیت های ACK / NACK بین هربخش از پیام می شود.

سرعت تبادل داده :  سرعت تبادل داده اش هم 100Kbits/s و 400Kbits/s و 1Mbits/s است که بسته به نیاز می تواند یکی را انتخاب کنید ( البته باید قبلش بررسی کنید که IC مقابل از کدوم سرعت ها پشتیبانی می کند! این محدودیت هم وجود داره )

معرفی پیام، بخش، و بیت های I2C

شرایط شروع: تغییر خط SDA از حالت high به حالت low، قبل از تغییر خط SCL به همین صورت

شرایط پایان: تغییر خط SDA از حالت low به حالت high، بعد از تغییر خط SCL به همین صورت

بخش آدرس: ارسال 7 تا 10 بیت با توالی منحصر به فرد به هر slave جهت تشخیص توسط master

 

بیت read / write : وجود یک بیت هنگامی که داده از طرف master برای slave ولتاژ سطح low و بر عکس ولتاژ سطح high فرستاده می شود.

بیت ACK / NACK : هر بخش پیام شامل یک بیت تصدیق کننده / عدم تصدیق کننده می باشد. در صورتی که بخش آدرس پیام یا  بخش داده ی پیام به درستی دریافت شود، یک بیت ACK از طرف دستگاه دریافت کننده به فرستنده ارسال می گردد.

 

آدرس دادن:

I2C  برخلاف SPI دارای خطی برای انتخاب slave مورد نظر نیست. بنابراین برای اینکه هرslave   تشخیص دهد که کدام داده برای آن ارسال شده، از روش آدرس دهی استفاده می شود. بخش آدرس همیشه اولین بخش بعد از بیت شروع در هر پیام می باشد.

Master  آدرس slave مورد نظر برای اتصال را ارسال می کند. سپس هر کدام از slave ها این آدرس را با آدرس خود مقایسه می کنند. در صورت همخوانی آدرس، یک بیت سطح پایین ACK برای master فرستاده می شود. در صورتی که آدرس هم خوانی نداشته باشد، اتفاقی نیافتاده و خط SDA در وضعیت high باقی می ماند.

بیت read / write :

بخش آدرس در انتهای خود شامل یک بیت بوده که به slave اطلاع می دهد، که master قصد خواندن اطلاعات از آن و یا ارسال اطلاعات به آن را دارد. در صورتی که master قصد ارسال اطلاعات داشته باشد، این بیت در وضعیت low و در صورتی که در قصد خواندن داشته باشد، این بیت در وضعیت high قرار خواهد گرفت.

بخش داده:

بعد از دریافت بیت ACK توسط master از طرف slave، اولین بخش داده آماده ارسال می باشد. بخش داده همیشه شامل 8 بیت بوده و بیت های باارزش تر(MSB) در ابتدا فرستاده می شوند. این بخش ها بلافاصله با بیت ACK / NACK همراه شده تا تشخیص داده شود، که داده به درستی دریافت شده است. بیت ACK قبل از اینکه داده بعدی ارسال گردد، باید توسطmaster  و یا slave دریافت شود ( بستگی دارد به اینکه کدام یک داده را ارسال کرده باشند).

بعد از ارسال تمامی بخش های پیام، master می تواند شرایط توقف را به slave ارسال کند تا انتقال اطلاعات متوقف شود. شرایط پایانی در واقع تغییر ولتاژ خط SDA از حالت low به high، بعد از تغییر خط SCL به همین صورت و باقی ماندن در وضعیت high می باشد.

قبل از استفاده از این نمودار، ابتدا START را انجام دهیم، سپس آدرس دستگاه، سپس بیت نوشتن دقیقا بنویسید، سپس آدرس ثبت شده، سپس START دوم، سپس آدرس دستگاه، سپس بیت خوانده شده یا 1، سپس منتظر اطلاعات با تایید، فاصله بالای حروف A بعد از آخرین بایت دریافت شده به این معنی است که ما برای تأیید صبر نمیکنیم یا منتظر وضعیت «بدون تأیید» هستیم، یعنی پایه SDA به وضعیت بالا و در پایان توقف است.

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

در اینجا می بینیم که هشت پایه به این مورد متصل است، همچنین پایه های SDA و SCL، VCC و GND و RST برای بازنشانی تراشه وجود دارد، ما از این پایه استفاده نمی کنیم. همچنین برای اتصال یک باتری VBAT، یک خروجی SQW وجود دارد، بنابراین ما می توانیم پالس های فرکانس خاصی را از یک تراشه مشخص برای برخی از هماهنگ سازی ها استفاده کنیم، ما از این پایه به عنوان قاعده ای برای چشمک زن استفاده می کنیم. همچنین فرکانس این پین را می توان با بیت های خاصی در یک حالت خاص کنترل کرد. و همچنین فرکانس با 32 کیلوهرتز خروجی.

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