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

رابط I2C در STM 8 در STM8 | قسمت بیست و چهارم آموزش STM8

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

سیسوگ در قسمت بیستم و سوم آموزش میکروکنترلر 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

 

نمونه کد 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

 

منبع

مطالب مرتبط

 

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

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

16 دیدگاه در “رابط I2C در STM 8 در STM8 | قسمت بیست و چهارم آموزش STM8

  1. Avatar for ممدم ممدم گفت:

    سلام وقت بخیر
    به دلیل تحریم ها امکان دانلود stm32cubemx 1.5.0 وجود نداره – اگر ممکنه لینک دانلود مستقیم رو براش فراهم کنید ممنون میشم.

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

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

  2. Avatar for پویا پویا گفت:

    سلام وقت بخیر، ممکنه کد یا کتابخانه ای برای راه اندازی ds3231 با stm8 قرار بدهید

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

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

  3. Avatar for آروین آروین گفت:

    سلام من با stm32f103 و keil میخوام راه اندازی کنم دستور های i2c مثل I2C_GenerateSTART(ENABLE); رو error implicit declaration میده. رابط i2c هم فعاله. مشکل از کجاست ممنون.

    1. Avatar for Kamin Jalili Kamin Jalili گفت:

      سلام آروین جان. خب این میکرو STM8 هستش و کلا با STM32 که شما دارید باهاش کار می‌کنید کلا فرق داره. شما برای راه‌اندازی I2C در STM32 بهتر است که از کتابخانه HAL یا LL استفاده کنید.

  4. Avatar for نعمتی نعمتی گفت:

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

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

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

      1. Avatar for نعمتی نعمتی گفت:

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

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

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

  5. Avatar for حسین حسین گفت:

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

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

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

      1. Avatar for حسین حسین گفت:

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

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

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

          1. Avatar for حسین حسین گفت:

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

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

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

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

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