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 منبع

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

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

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

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

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

  1. Nemati2008 نعمتی گفت:

    سلام
    من میخواهم میکرو stm8s003 را به عنوان i2c-slave پیکربندی کنم و دیتاهای دریافتی را توسط یه نمایشگر که به stm8 متصل است را نمایش بدهم لطفا راهنمایی کنید

    1. زئوس Zeus زئوس Zeus گفت:

      فکر میکنم با یه سرچ ساده بتو نید به جواب برسید
      البته خوندن داکیومت هم پیشنهاد میکنم – برای شروع کد زیر رو ببینید
      https://github.com/joaquimorg/STM8SProjects/tree/master/FWLib/examples/I2C/I2C_10bitsCommunication/slave

      1. Nemati2008 نعمتی گفت:

        سلام
        ممنون از پاسخ شما این لینک را قبلاً رفتم ولی مشکلی که دارم و در مورد مثال های شما هم همینطوره اینه که فقط چند تا فایل در فولدر هست و اصلا توضیحی داده نشده که برای وارد کردن این مثال داخل کامپایلر چه روندی را باید انجام داد من از stvd استفاده میکنم وقتی یه پروژه میسازم و سعی میکنم از فایل های مثال درون پروژه استفاده کنم با یه مجموعه خطا مواجه میشوم که راه حلی هم برایش نمیدانم مثلا در مورد استفاده از وقفه i2c در حالت slave و تنظیماتی که دارد و باید درون هدر فایل های مربوطه انجام داد .

        1. زئوس Zeus زئوس Zeus گفت:

          خوب فکر میکنم مشکل شما بیشتر درک ساختار برنامه نویسی است
          برای این که یه برنامه روی میکروکنترلر اجرا بشه لازمه یه مقدمات اولیه انجام بشه مثل پیکر بندی سخت فزار و و مقدار دهی صحیح وکتورتیبل !!!
          وقتی شما یه برنامه چشمک زن رو ران میکنید – یعنی تمام این کار ها انجام شده خوب بعدش چی؟
          باقیه تنها کتابخانه نویسی است و استفاده از سخت افزار میکرو – پس خیلی خلاصه بگم – شما لازمه این فایل ها رو به پروژه چشمک زنتون اضافه کنید و از فانکشن ها استفاده کنید
          به همین خوشمزگی

  2. حسین گفت:

    سلام
    اگه امکانش هست سنسور SHT1x رو هم آموزش بدین
    ممنون

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      تا اونجا که من اطلاع دارم پروتکل سنسور های sht و dht مثل هم هست
      و فکر میکنم قبلا توی سایت سنسور های dht رو راه اندازی کرده باشیم

      1. حسین گفت:

        sht رابط I2c
        DHT onewire هستش
        اگه امکانش هست یه آموزش در این زمینه بزارین
        ممنون

        1. زئوس Zeus زئوس Zeus گفت:

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

          1. حسین گفت:

            سنسور SHT پروتکل I2c هست و با DHT متفاوت هستش

          2. زئوس Zeus زئوس Zeus گفت:

            ببخشید الان متوجه منظورتون شدم
            خوب ببینید dht درواقع نمونه چینی ساخته شده از روی sht هست و دقیقا جای هم میخورن تا اونجا که به خاطر دارم و البته پروتکل هم i2c نیست – یع چیز الکی است که تنها شباهت هایی با i2c داره.