قسمت بیست و چهارم : رابط I2C

قسمت بیست و چهارم : رابط I2C

قسمت بیست و چهارم : رابط I2C
قسمت بیست و چهارم : رابط 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

 

منبع

لینک‌های دانلود

مطالب مرتبط

 

 

حمایت از electronic girl

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

1 نفر

پــــســنــدیـده انـد

توجه

electronic girl
electronic girl

دوستدار الکترونیک

دیدگاه ها

14 دیدگاه

  • پویا
    ۷ اسفند ۱۴۰۰

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

    • Zeus ‌
      Zeus ‌
      ۵ اردیبهشت ۱۴۰۱

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

  • آروین
    ۱۶ مهر ۱۳۹۹

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

    • Kamin Jalili
      ۱۷ آبان ۱۳۹۹

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

  • نعمتی
    ۲۹ دی ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۳۰ دی ۱۳۹۸

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

      • نعمتی
        ۱ بهمن ۱۳۹۸

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

        • Zeus ‌
          زئوس Zeus
          ۵ بهمن ۱۳۹۸

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

  • حسین
    ۵ آبان ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۵ آبان ۱۳۹۸

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

      • حسین
        ۲ آذر ۱۳۹۸

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

        • Zeus ‌
          زئوس Zeus
          ۳ آذر ۱۳۹۸

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

          • حسین
            ۳ آذر ۱۳۹۸

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

            0
          • Zeus ‌
            زئوس Zeus
            ۴ آذر ۱۳۹۸

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

            0

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 10 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

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

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک