میکروکنترلرهای AVR یکی از مهم ترین و پرکاربردترین میکروها، حتی با وجود اعلام بازنشستگی از سوی سازنده، به شمار می روند. این میکروها در بازار ایران بسیار پر طرفدار هستند. این میکروها در شرکت های مختلف ساخت هود آشپزخانه، ماشین لباسشویی و… به کار می روند. یکی از کوچکترین نوع میکروکنترلرها، میکرو ATTINY است. این میکرو ابعاد بسیار کوچکی دارد. جهت کار با این میکرو، یک کتابخانه به منظور پیاده سازی I2C توسعه یافته است. در این آموزش به کتابخانه TinyMegaI2C می پردازیم.
نصب کتابخانه TinyMegaI2C
به منظور استفاده از کتابخانه، ابتدا میبایست آن را نصب کنیم. در این قسمت به نصب کتابخانه با جستجو در مخازن آردوینو میپردازیم. به همین منظور، ابتدا در نرم افزار آردوینو بر روی گزینه Tools و سپس Manage Libraries را کلیک کنید. پس از کلیک بر روی این گزینه، با تصویر زیر رو به میشوید. این منو کتابخانه های در دسترس را به شما نشان می دهد. شما نیز می توانید با جستجوی نام کتابخانه مورد نظر خود، آن را در مخازن آردوینو یافته و سپس نصب کنید.
مطابق فلش مشخص شده در تصویر فوق، در کادر جستجو عبارت TinyMegaI2C را تایپ کنید. پس از چند لحظه با تصویر زیر رو به رو می شوید. در این مرحله، کتابخانه را با کلیک بر روی گزینه install، نصب کنید.
پروتکل I2C
ارتباط I2C (Inter-Integrated Circuit) یک روش ارتباطی سریالی بین دستگاهها است که امکان ارتباط بین میکروکنترلرها، سنسورها، ICها و سایر قطعات الکترونیکی را فراهم میکند. این روش ارتباطی بر پایه ارسال و دریافت دادهها با استفاده از دو خط ارتباطی، خط SDA (Serial Data) و خط SCL (Serial Clock) استوار است. در کنترل باس I2C، یک دستگاه به عنوان ماستر (Master) و دیگر دستگاهها به عنوان اسلیو (Slave) شناخته میشوند. دستگاه ماستر مسئول رها کردن و تضمین ترتیب دستورات و همچنین مدیریت ارتباط با دستگاههای اسلیو است. فرآیند ارتباط I2C عموماً به صورت زیر است.
- آغاز ارتباط: دستگاه ماستر ابتدا باید خط SDA را به حالت منطقی پایین (Low) ببرد و سپس خط SCL را به حالت منطقی پایین برده و ارتباط را آغاز کند. این عمل به عنوان آغاز ارتباط (Start) شناخته میشود.
- آدرس گیری: پس از آغاز ارتباط، دستگاه ماستر آدرس دستگاه اسلیو مورد نظر را به این ارتباط ارسال میکند. هر دستگاه اسلیو دارای یک آدرس منحصر به فرد است که ماستر باید برای ارتباط با آن ارسال کند.
- ارسال داده: بعد از آدرس گیری، ماستر میتواند دادههای مورد نیاز خود را به دستگاه اسلیو ارسال کند. دستگاه اسلیو بعد از دریافت هر داده، با یک ACK (تأیید) یا NACK (عدم تأیید) به ماستر پاسخ میدهد.
- دریافت داده: اگر ماستر نیاز دارد از دستگاه اسلیو داده دریافت کند، ابتدا باید درخواستی برای دریافت داده بفرستد. سپس دستگاه اسلیو دادههای مورد نیاز را به ماستر ارسال میکند.
- پایان ارتباط: بعد از اتمام تبادل دادهها، دستگاه ماستر باید ارتباط را به پایان برساند. این عمل به عنوان پایان ارتباط (Stop) شناخته میشود.
مزایای استفاده از ارتباط I2C عبارتند از: امکان اتصال چندین دستگاه به یک خط داده، کابلهای کوتاهتر و ارزانتر نسبت به RS232 یا UART، قابلیت انتقال داده با سرعتهای مختلف، انتقال داده بدون نیاز به تعداد زیاد پینها، به عنوان مثال، با استفاده از کتابخانه Wire در آردوینو، شما میتوانید به سادگی از ارتباط I2C با سنسورها، نمایشگرها، حافظهها و سایر دستگاهها استفاده کنید.
الزامات و نکات فنی کتابخانه TinyMegaI2C
کتابخانه TinyMegaI2C، همانطور که گفته شد باس I2C را برای میکروکنترلر ATTINY فراهم میکند. به کمک این کتابخانه می توانید به سادگی به تبادل داده از طریق I2C با سنسورها و یا نمایشگرها بپردازید. به عنوان مثال شما می توانید نمایشگرهای I2C نظیر OLED را به ATTINY متصل کنید. توجه داشته باشید که این کتابخانه با میکروکنترلرهای سری جدید ATTINY سازگاری دارد. به عبارت دیگر، این کتابخانه با بردهای زیر سازگار است:
NANO EVERY
WIFI REV2
توابع کلیدی و کاربردی کتابخانه
پس از بررسی الزامات و نکات فنی، نوبت به تحلیل و بررسی توابع کلیدی و کاربردی کتابخانه می رسد. جدول زیر لیست توابع را به همراه شرح هر یک، نمایش میدهد.
شرح | ورودی ها | تابع | |||
این تابع وظیفه راه اندازی اولیه را بر عهده دارد. | بدون ورودی | void init(void) | |||
این تابع یک بایت از باس I2C خوانده و در خروجی خود قرار می دهد. | بدون ورودی | uint8_t read(void) | |||
این تابع آخرین بایت موجود در باس I2C را خوانده و در خروجی خود قرار می دهد. | بدون ورودی | uint8_t readLast(void) | |||
این تابع وظیفه نوشتن داده بر روی باس I2C را بر عهده دارد. | ورودی از نوع بدون علامت ۸ بیتی | bool write(uint8_t data) | |||
این تابع انتقال داده را شروع می کند. ورودی اول آدرس وسیله و ورودی دوم ظاهرا تعداد بایت های ارسالی را مشخص می نماید. | ورودی اول آدرس
ورودی دوم تعداد بایت ها |
|
|||
این تابع ارتباط و انتقال را ریست می کند. | ورودی اول آدرس
ورودی دوم تعداد بایت ها |
bool restart(uint8_t address, int readcount) | |||
این تابع ارتباط i2c را قطع می کند. | بدون ورودی | void stop(void) |
پس از بررسی توابع، نوبت به اجرای یک نمونه برنامه می رسد. برنامه زیر یک عبارت ساده، ۰X12 را به باس سریال I2C ارسال می کند. لینک برنامه نمونه، کلیک کنید.
لوازم مورد نیاز
جمع بندی
در این آموزش به تحلیل و بررسی کتابخانه TinyMegaI2C پرداختیم. به کمک این کتابخانه می توانیم به سادگی برای تراشه TinyMegaI2C یک سریال نرم افزاری I2C بسازیم. بدین ترتیب به سادگی و بدون نیاز به درگیر شدن با پیچیدگی های سخت افزاری، می توان این قابلیت را به این میکرو اضافه نمود.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.