ARM, STM, STM8, آموزش, توصیه شده, مقاله

آموزش میکروکنترلر STM8 قسمت 24 : رابط I2C

آموزش میکروکنترلر STM8 - I2C

آموزش میکروکنترلر STM8 – قسمت بیست و چهارم ;

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

I2C یکی دیگر از روش‌های ارتباطی محبوب در ارتباطات سریال سنکرون است که توسط NXP توسعه یافته است. فقط از دو سیم برای ارتباط استفاده می‌کند و به همین ترتیب، رابط دو سیم (TWI) نامیده می‌شود. درست مانند SPI، رابط I2C به طور گسترده در ارتباط با ساعت‌های زمان واقعی (RTC)، سنسورهای دیجیتال، تراشه‌های حافظه و غیره استفاده می‌شود. این ویژگی‌ها با SPI مشترک هستند. اما در مقایسه با SPI، آن را کندتر و محدودتر می‌کند. تا 127 دستگاه میتواند در یک باس I2C همکاری کند.

ارتباط I2C بین دستگاه‌هایی که سطح ولتاژمنطقی متفاوتی دارند امکان‌پذیر نمی‌باشد.

در I2C دو سیم ارتباطی بطور مستقیم به هم وصل می‌شوند یعنی SDA به SDA و  SCL به SCL.

 

ارتباط I2C

 

 

باس I2C نیز مانند SPI، دارای یک میکروکنترلر مستر و یک یا چند Slave است. میکروکنترلر مستر مسئولیت ایجاد سیگنال‌های ساعت و برقراری ارتباط را بر عهده دارد. زمانی‌که مستر شناسه Slave را با دستور خواندن / نوشتن ارسال کند ارتباط برقرار می‌شود. Slave با پردازش درخواست مستر و ارسال داده به این فرمان پاسخ می‌دهد.

 

اگر تمایل دارید اطلاعات بیشتری درباره باس I2C بدست آورید لینک‌های زیر مناسب هستند:

 

پروتکل های دیگر مانند SMBus و I2S شباهت‌های بسیاری با I2C دارند، بنابراین با یادگیری I2C می‌توانید با دیگر پروتکل‌ها نیز ارتباط برقرار کنید.

 

اتصالات سخت‌افزاری

اتصالات سخت‌افزاری I2C

 

نمونه کد

این کد نشان می‌دهد، چگونه ارتباط سنسور نور دیجیتال BH1750 I2C را با STM8 برقرار کنیم. LCD نیز برای نمایش خروجی سنسور نور در لوکس استفاده می‌شود.

 

main.c

 

  BH1750.h

 

BH1750.c

 

توضیحات

در ابتدا CPU و کلاک داخلی را تنظیم می‌کنیم.

 

ورودی / خروجی‌های I2C به عنوان خروجی‌های open drain تنظیم شده است، زیرا دارای مقاومت پول-آپ خارجی هستند که ورودی / خروجی‌های باس را به VDD وصل می‌کنند. پین SCL همیشه به عنوان خروجی میکروکنترلر میزبان است، اما جهت پین SDA با توجه به عملیات خواندن و نوشتن متفاوت است. که به طور خودکار توسط سخت‌افزار I2C انجام می‌شود.

 

 

I2C دارای پارامترهای زیادی است که نیاز به تنظیم دارد. اولاً سرعت باس I2C ، شناسه I2C، کلاک duty cycle، مد آدرس، تایید نوع و سرعت کلاک داخلی. در اینجا شناسه مستر و Slave تنظیم می‌شوند، ما از STM8 به عنوان یک Slave استفاده نمی‌کنیم.

 

اکثر نمونه‌ایی که برای I2C در اینترنت وجود دارد، I2C را فقط با 24 مجموعه EEPROM نشان می‌دهند. در اینجا کار متفاوتی انجام می‌دهیم و به جای تکرار نمونه‌های EEPROM  از سنسور دیجیتال BH1750 I2C استفاده می‌کنیم.

 

 

همانند SPI، اول باید آزاد بودن سخت‌افزار I2C را بررسی کنیم. سپس، نخستین قدم برای  ارتباط I2C را برداشته و وضعیت مستر و Slave بودن را چک می‌کنیم. سپس، با فرمان خواندن آدرس یا شناسه Slave را ارسال می‌کنیم، که نشان می‌دهد، می‌خواهیم از روی Slave بخوانیم. مجدداً قبل از ادامه پرچم بررسی می‌شود. سپس سنسور 16 بیت خروجی می‌دهد که باید به صورت دو مقدار 8 بیتی آن را استخراج کنیم. این عملیات در حلقه “while” انجام می‌شود. درنهایت، دو بایت به هم متصل می‌شوند که نشان دهنده خروجی نور است.

 

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

 

 

I2C with BH1750

منبع

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *