پاسخ : شبکه ای از میکروکنترلرها
جناب قاسم پور خدمتتون سلام عرض می کنم و از اینکه دوباره در پاسخ به پست هام تاخیر داشتم شرمنده ام شرمنده شرمنده :redface: :redface:
اجازه بدید یه بحثی بکنیم روی نکات مهمی که در مورد I2C باید بهش توجه بشه و بعد بریم سراغ بحث شما...
ببینید برای شبکه کردن device های مختلف از طریق این پروتکل ، اول باید بدونیم که Master و slave کدوم ها هستن، به این دلیل که شریان ارتباطی ما دست عنصر Master هستش یعنی اینکه کلاکی که برای سنکرون کردن ارسال اطلاعات استفاده میشه از اون تامین میشه . عنصر slave هم که تابع این کلاک ، به ارسال و دریافت اطلاعات می پردازه . چون در این پروتکل تنها از دو خط برای ارتباط استفاده میشه (SDAوSCL) پس سنکرون سازی ارسال برامون خیلی مهمه به این دلیل که دیتا و کلاک، هر کدوم راه خودشونو میرن و این وسط یه الگوریتمی باید وجود داشته باشه که اینها رو باهم سنکرون کنه .
نحوه ی ارسال اطلاعات در این پروتکل بر این اساسه که Master ، با فرستادن آدرس slave مورد نظرش روی SDA، اون رو مطلع میکنه که میخواد براش اطلاعات بفرسته . در این زمان slave یک بیت به نام بیت تصدیق (Acknowledge) برای Master میفرسته که دریافت آدرس و آمادگی برای دریافت اطلاعات رو تائید می کنه . حالا این بیت در پالس چندم تولید میشه؟ در واقع قالب آدرسی که برای این پروتکل پیش بینی کردن یک قالب هفت بیتیه که یک بیت ACK و یک بیت تعیین جهت هم که بهش اضافه کنیم میشه نه بیت . منظور از بیت ACK همون بیت تائیده و منظور از بیت تعیین جهت هم بیتیه که تعیین میکنه اطلاعات از Master به slave انتقال پیدا کنه یا برعکس (یعنی تعیین وضعیت فرستنده/گیرنده برای slave یا Master) . شاید این سوال پیش بیاد که مگه میشه Master گیرنده هم باشه؟!! مگه Master کارش تولید اطلاعات نیست؟!! در واقه یه تفکیکی باید برای واژه ی تولید توی این پروتکل قائل بشیم و اون هم اینه که Master وظیفش تولید پالس بر روی خط SCK هست و می تونیم برای Master هم وضعیت فرستنده در نظر بگیریم و هم گیرنده . یعنی برای مثال Master می تونه ازعنصر slave1 یک سری اطلاعات دریافت کنه و اونها رو بر حسب روال مورد نظر توی شبکه که طراح تنظیم کرده ، برچسب گذاری کنه و به slave2 بفرسته .
حالا فرض کنیم بخوایم داده ارسال کنیم . اولین کاری که باید بکنیم اینه که تعیین کنیم این اطلاعات از کجا به کجا میخواد منتقل بشه و این کار هم یعنی تعیین بیت جهت ، بعدشم ارسال هفت بیت آدرس برای تعیین slave مورد نظر و بعد هم در پالس نهم ارسال بیت ACK از جانب slave و دریافتش توسط Master . وقتی این بیت توسطMaster دریافت شد ، یعنی آدرس توسط slave تائید شد ، حاکم شروع به ارسال اطلاعات می کنه برحسب زمانبندی کلاکی که خودش روی SCK تولید کرده ، اطلاعات رو منتقل می کنه.
اما گاها در شبکه وضعیتی پیش میاد که یک پیغام عمومی رو میخوایم از Master به همه ی slave ها ارسال کنیم . این وضعیت در این پروتکل اصطلاحا فراخوانی تشخیص عمومی یا Call Recognition General نامیده میشه و براش یه آدرس رزرو شده ، در نظر گرفته شده که به آدرس صفر معروفه 0000000 . در این وضعیت همه ی slave های شبکه خطوط SDA خودشونو در وضعیت پایین قرار میدن (البته در زمانی که پالس ACK تولید شده باشه) و دیتای ارسال شده رو دریافت می کنن .
حالا فرض کنیم که یه سری slave در شبکه داریم که با یه Master کنترل میشن . برای برقراری ارتباط بین اونها کافیه که به هر slave یک آدرس معین اختصاص بدیم که این آدرس در طول ارتباط ثابته و از طرف Master هم شناخته شده هست . با این شرایط همونطورکه گفتیم ، وقتی آدرس یک slave روی SDA قرار گرفت ، slave های دیگه از ارتباط در اون لحظه خارج میشن و ارتباط بین Master و یک slave محدود میشه . فقط در این نوع ارتباط باید به یک نکته ، خیلی توجه بشه اونم اینه که اگه slave به هر دلیلی نتونه داده ی ارسالی ازMaster رو دریافت کنه ، خبری از ارسال ACK نیست و این بار بیت NACK برای Master ارسال میشه و این به اون معنا هست که ارسال دیتا دوباره باید از سر گرفته بشه و این یعنی یک تاخیر در انتقال لذا برای جلوگیری از این وضعیت پیشنهاد کردند که یک وقفه در پایان انتقال پاکت های دیتا ایجاد بشه تا از این نگرانی هم جلوگیری بشه .
فایل زیر یه توضیحی در مورد I2C هست فکر کنم به درد بخوره .
http://www.4shared.com/file/48276748...9c/I2C_me.html
قسمت 9 این فایلم حتما نگاه کنید خیلی به درد بخوره .
http://www.4shared.com/file/48276523/912811fc/I2C.html
چون من درایو C کامپیوترم به خاطر ویروس کلا پاک شده سورس برنامه هام اکثرا دود شدن و به دلیل این که شما خیلی عجله داشتید و من هم جایی بودم که نمی شد برنامه رو براتون بنویسم مجبور به نقض قانون copy-write شدم و این برنامه رو براتون گذاشتم . امیدوارم گیر کارتون برطرف بشه .
http://www.4shared.com/file/48277416...e2/Sample.html
این برنامه شبکه بندی چند تا slave رو با یه Master نشون میده (انجام میده) .
بازم به خاطر تاخیر ازتون عذرخواهی می کنم . :nerd: موفق باشید .
[hr]عاقلان نقطه ی پرگار وجودند ولی عشق داند که در این دایره سرگردانند
جناب قاسم پور خدمتتون سلام عرض می کنم و از اینکه دوباره در پاسخ به پست هام تاخیر داشتم شرمنده ام شرمنده شرمنده :redface: :redface:
اجازه بدید یه بحثی بکنیم روی نکات مهمی که در مورد I2C باید بهش توجه بشه و بعد بریم سراغ بحث شما...
ببینید برای شبکه کردن device های مختلف از طریق این پروتکل ، اول باید بدونیم که Master و slave کدوم ها هستن، به این دلیل که شریان ارتباطی ما دست عنصر Master هستش یعنی اینکه کلاکی که برای سنکرون کردن ارسال اطلاعات استفاده میشه از اون تامین میشه . عنصر slave هم که تابع این کلاک ، به ارسال و دریافت اطلاعات می پردازه . چون در این پروتکل تنها از دو خط برای ارتباط استفاده میشه (SDAوSCL) پس سنکرون سازی ارسال برامون خیلی مهمه به این دلیل که دیتا و کلاک، هر کدوم راه خودشونو میرن و این وسط یه الگوریتمی باید وجود داشته باشه که اینها رو باهم سنکرون کنه .
نحوه ی ارسال اطلاعات در این پروتکل بر این اساسه که Master ، با فرستادن آدرس slave مورد نظرش روی SDA، اون رو مطلع میکنه که میخواد براش اطلاعات بفرسته . در این زمان slave یک بیت به نام بیت تصدیق (Acknowledge) برای Master میفرسته که دریافت آدرس و آمادگی برای دریافت اطلاعات رو تائید می کنه . حالا این بیت در پالس چندم تولید میشه؟ در واقع قالب آدرسی که برای این پروتکل پیش بینی کردن یک قالب هفت بیتیه که یک بیت ACK و یک بیت تعیین جهت هم که بهش اضافه کنیم میشه نه بیت . منظور از بیت ACK همون بیت تائیده و منظور از بیت تعیین جهت هم بیتیه که تعیین میکنه اطلاعات از Master به slave انتقال پیدا کنه یا برعکس (یعنی تعیین وضعیت فرستنده/گیرنده برای slave یا Master) . شاید این سوال پیش بیاد که مگه میشه Master گیرنده هم باشه؟!! مگه Master کارش تولید اطلاعات نیست؟!! در واقه یه تفکیکی باید برای واژه ی تولید توی این پروتکل قائل بشیم و اون هم اینه که Master وظیفش تولید پالس بر روی خط SCK هست و می تونیم برای Master هم وضعیت فرستنده در نظر بگیریم و هم گیرنده . یعنی برای مثال Master می تونه ازعنصر slave1 یک سری اطلاعات دریافت کنه و اونها رو بر حسب روال مورد نظر توی شبکه که طراح تنظیم کرده ، برچسب گذاری کنه و به slave2 بفرسته .
حالا فرض کنیم بخوایم داده ارسال کنیم . اولین کاری که باید بکنیم اینه که تعیین کنیم این اطلاعات از کجا به کجا میخواد منتقل بشه و این کار هم یعنی تعیین بیت جهت ، بعدشم ارسال هفت بیت آدرس برای تعیین slave مورد نظر و بعد هم در پالس نهم ارسال بیت ACK از جانب slave و دریافتش توسط Master . وقتی این بیت توسطMaster دریافت شد ، یعنی آدرس توسط slave تائید شد ، حاکم شروع به ارسال اطلاعات می کنه برحسب زمانبندی کلاکی که خودش روی SCK تولید کرده ، اطلاعات رو منتقل می کنه.
اما گاها در شبکه وضعیتی پیش میاد که یک پیغام عمومی رو میخوایم از Master به همه ی slave ها ارسال کنیم . این وضعیت در این پروتکل اصطلاحا فراخوانی تشخیص عمومی یا Call Recognition General نامیده میشه و براش یه آدرس رزرو شده ، در نظر گرفته شده که به آدرس صفر معروفه 0000000 . در این وضعیت همه ی slave های شبکه خطوط SDA خودشونو در وضعیت پایین قرار میدن (البته در زمانی که پالس ACK تولید شده باشه) و دیتای ارسال شده رو دریافت می کنن .
حالا فرض کنیم که یه سری slave در شبکه داریم که با یه Master کنترل میشن . برای برقراری ارتباط بین اونها کافیه که به هر slave یک آدرس معین اختصاص بدیم که این آدرس در طول ارتباط ثابته و از طرف Master هم شناخته شده هست . با این شرایط همونطورکه گفتیم ، وقتی آدرس یک slave روی SDA قرار گرفت ، slave های دیگه از ارتباط در اون لحظه خارج میشن و ارتباط بین Master و یک slave محدود میشه . فقط در این نوع ارتباط باید به یک نکته ، خیلی توجه بشه اونم اینه که اگه slave به هر دلیلی نتونه داده ی ارسالی ازMaster رو دریافت کنه ، خبری از ارسال ACK نیست و این بار بیت NACK برای Master ارسال میشه و این به اون معنا هست که ارسال دیتا دوباره باید از سر گرفته بشه و این یعنی یک تاخیر در انتقال لذا برای جلوگیری از این وضعیت پیشنهاد کردند که یک وقفه در پایان انتقال پاکت های دیتا ایجاد بشه تا از این نگرانی هم جلوگیری بشه .
فایل زیر یه توضیحی در مورد I2C هست فکر کنم به درد بخوره .
http://www.4shared.com/file/48276748...9c/I2C_me.html
قسمت 9 این فایلم حتما نگاه کنید خیلی به درد بخوره .
http://www.4shared.com/file/48276523/912811fc/I2C.html
چون من درایو C کامپیوترم به خاطر ویروس کلا پاک شده سورس برنامه هام اکثرا دود شدن و به دلیل این که شما خیلی عجله داشتید و من هم جایی بودم که نمی شد برنامه رو براتون بنویسم مجبور به نقض قانون copy-write شدم و این برنامه رو براتون گذاشتم . امیدوارم گیر کارتون برطرف بشه .
http://www.4shared.com/file/48277416...e2/Sample.html
این برنامه شبکه بندی چند تا slave رو با یه Master نشون میده (انجام میده) .
بازم به خاطر تاخیر ازتون عذرخواهی می کنم . :nerd: موفق باشید .
[hr]عاقلان نقطه ی پرگار وجودند ولی عشق داند که در این دایره سرگردانند









oo:

دیدگاه