I2C_slave master

سلام وقتتون بخیر

در نحوه ای اتصال دو میکروکنترلر به یک دیگر از طریق پروتکل I2C با استفاده از روش master و slave با توجه به آموزش های موجود در بسته به مشکل خوردم.
زمانی که یک بایت دیتا از طریق master ارسال میکنم و از ارسالش مطمئن هستم به این دلیل که در دیباگ برنامه به درستی کار می کند.

اما در slave با توجه به تنظیم کردن آدرس میکرو و تشابه آدرس ارسالی و دریافتی هیچ دیتایی در میکرو slave دریافت نمیکنم و خروجی تابع دریافت دیتا مقدار error برمیگرداند.

تمامی مراحل را مثل آموزش پیش رفتم ولی دو میکرو با هم هیچ ارتباطی نمیگیرند. من فکر میکنم که در قسمت slave مشکلی هست و میکرو باس دیتا را چک نمی کند. ممنون میشم برای حل این مسئله راهنمایی کنید.

IMG_20220515_131323
IMG_20220515_131308
IMG_20220515_131052
IMG_20220515_131034

سلام و وقت بخیر
به چند نکته برای دیباگ کردن I2C باید دقت کنید. یکی اینکه حتما دو سیم متصل کننده پایه های SCL و SDA باید پول آپ باشند مثل توضیحی که در آموزش داده شده و اینکه حتما اتصالات لحیم کاری اگر وجود داره بین پایه میکرو و برد و جاهای دیگه چک بشوند (ترجیحا با بیپ چک یک مولتی متر). دوم اینکه پایه SDA میکرو اول باید به پایه SDA میکرو دوم متصل شود و همینطور پایه های SCL هم باید به یکدیگر متصل شوند. سوم به شیفت پیدا کردن آدرس حتما توجه کنید مثل توضیحی که آموزش داده شده. اگر تمامی این موارد رو چک کردید حالا باید چک کنید که آیا مستر دیتای خروجی میدهد یا نه. برای چک کردن این موضوع هم میتونید از اسیلوسکوپ استفاده کنید یا لاجیک آنالایزر. در صورتی که همه این موارد اوکی بود مشکل از دریافت هستش و آمدن دیتا رو روی رجیستر های میکروکنتلر slave میتونید چک کنید و حواستون باشه که میکرو کنتلر slave در حال اجرا کردن برنامه باشه. برای مطمئن شدن این مورد میتونید بعد از پروگرم کردن میکرو یک بار ولتاژ ورودی میکرو رو قطع و وصل کنید زیرا همونطور که در آموزش ها گفته شده ممکنه reset and run در زمان پروگرم کردن میکرو فعال نباشه.

1 پسندیده