سورس کد I2C (کد حالت اول)

این کد به زبان Cدر محیط  codevision نوشته شده است.

برای شروع آسانترین حالت ممکن فرض شده است یعنی master(atmega32  یک عدد 8 بیتی میفرستد و slave آن را میگیرد.

حالت بعدی حالتی است که master میفرستد و slave هم در جواب یک سری دیتای دیگر میفرستد.

توجه داشته باشید ایجاد حالت شروع و پایان در حوزه اختیارات master است و آی سی slave هیچ نقشی در این مورد ندارد.

برای دانلود سورس کد اینجا کلیک کنید

دانلود

I2C BUSS چیست؟

I2C یک پروتکل ارتباطی است که ۱۲۸ وسیله را از طریق تنها ۲ خط داده با هم ارتباط میدهد.

در هر لحظه از استفاده از این پروتکل همواره یک ماژول master (ماژول مدیر)و ماژولهای دیگر slave(ماژول فرمانبر یا برده) میتوانند استفاده کنند یعنی ما در لحظه فقط یک مدیر داریم . 

 قطعه Master (  مدیر ) می تواند از نوع میکروکنترلر ، میکرو پروسسور و حتی کامپیوتر باشد. این قطعه باید قابلیت تولید کلاک پالس ( Clock Pulse ) را داشته باشد.

روش کار به این صورت است که به تمام قطعات Slave یک آدرس اختصاص داده می شود این آدرس به صورت یک کد هگز است و آن قسمت از حافظه برای  آن Slave در نظر گرفته میشود برای مثال وقتی 0x44را برای یک slaveدر نظر میگیریم هم در master و  در slave این آدرس نوشته میشود و هنگامی که master میخواهداطلاعات به   slaveبفرستد یا از آن بگیرد ابتدا آن آدرس را داده(0x44)سپس slaveها این آدرس را با آدرس خود چک میکنند هر slaveکه آدرسش با ادرس  ارسالی از طرف slaveیکی بود یک پالس به اسم پالسackارسال میکند و master پس از دریافت این پالس می تواند اطلاعات را به slave فرستاده یا از آن ها درخواست اطلاعات کند.

این انتقال تنها با دو خط انتقال انجام می گیرد. یکی SDA ( خط ارسال داده = Serial Data Line ) و دومی SCL ( خط سریال کلاک = Serial Clock Line ).

قطعات Slave بدون اینکه بر Slave های بعدی تاثیر بگذارند روی گذرگاه قرار می گیرند و زمانی که اطلاعات برای یکی از Slave های خاص فرستاده می شود تابع زیر اجرا خواهد شد :

1 - Starting Condition : قطعه Master کلاک را تولید کرده و مقدار خط SCL = 1 می شود. همچنین سطح ولتاژ SDA از High به LOW توسط Master تغییر وضعیت می دهد و در این صورت هر دو خط مشغول می شوند.

2 - Address Transfer : پس از ارسال سیگنال کلاکCLK آدرس Slave مورد نظر توسط Master به تمام Slave ها ارسال می شود.

3 -Acknowledgement From Slave : در این مرحله هر کدام از Slave ها آدرس را چک کرده و این آدرس برای هر کدام که باشد به سمت Master یک تصدیق ارسال می کند.

4 - Data Transfer : هنگامی که تصدیق از سمت Slave رسید Master یک بایت از دیتا را ارسال می کند. ( حتی ممکن است پشت سر هم چند بایت ارسال شود. )

5 - Stop Condition : وقتی عمل ارسال اطلاعات پایان پذیرفت Master دیتایی به جهت اطلاع رسانی پایان انتقال به سمت Slave می فرستد و عمل ارسال پایان می پذیرد.


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

نکته پر اهمیت دیگر این است که سیگنال کلاک کاملا سنکرون ( Synchronization ) باشد و به طور هم زمان به Slave  ها برسد.


در پست بعدی طریقه اتصال دو آی سی (مثلا atmega8)از طریق I2C buss و همچنین source code را برای علاقه مندان ارسال میکنم