نمایش نتایج: از 1 به 5 از 5
Like Tree2 لایک
  • 2 Post By hesam.time

موضوع: Master Writer/Slave Receiver

  1. #1
    Senior Member
    تاریخ عضویت
    Mar 2013
    محل سکونت
    Iran
    نوشته ها
    138

    Lightbulb Master Writer/Slave Receiver

    در برخی از شرایط، راه اندازی دو (یا بیشتر) برد آردینو برای اشتراک اطلاعات با یکدیگر می تواند مفید باشد. در این مثال ، دو آردینو برای برقراری ارتباط با یکدیگر در یک پیکربندی Master Writer/Slave Receiver از طریق پروتکل سنکرون I2C پروگرم شده اند. چندین توابع از کتابخانه Wire آردینو در انجام این کار استفاده شده اند. آردینو 1 ، به عنوان Master ، برای فرستادن ، 6 بایت از داده ی در هر ثانیه به آدرس منحصر به فرد آردینو Slave پروگرم شده است. به محض اینکه پیام دریافت شد، می تواند پس از آن در serial window آردینو مشاهده شود.
    پروتکل I2C شامل استفاده از دو سیم برای ارسال و دریافت داده است: یک پین کلاک سریال (SCL) که پالس های آردینو در یک فاصله منظم است و یک پین دیتا سریال (SDA) دیگر ، که داده ها بین دو دستگاه فرستاده می شود. همانطور که پالس کلاک از پایین به بالا(شناخته شده به عنوان لبه بالا رونده کلاک) تغییر می کند، یک بیت از اطلاعات شامل آدرس یک دستگاه به خصوص و یک درخواست برای داده، از آردینو به دستگاه I2C بر روی خط SDA منتقل می شود. وقتی که پین کلاک از بالا به پایین (لبه پایین رونده کلاک) تغییر می کند. بر روی انتقال دستگاه نامیده می شود. داده های آن بر روی خط یکسان به آردینو دیگر برمی گردند. هشت بیت اولیه (یعنی هشت پالس کلاک) از Master به Slave شامل آدرس دستگاه Master که از آن داده
    می خواهد. بیت های بعدی شامل آدرس حافظه روی Slave که Master می خواهد داده از آن بخواند یا که بنویسد، و داده های نوشته شده،اگر باشد.
    هر دستگاه Slave باید آدرس منحصر به فرد خود را داشته باشد و هر دو دستگاه master و slave برای برقراری ارتباط روی خط داده یکسانی به نوبت
    قرار بگیرند. در این راه، امکان دارد آردینو شما با بسیاری از دستگاه ها یا آدینو های دیگر ، تنها با استفاده از دو پین از میکروکنترلرتان و با استفاده از آدرس منحصر به فرد هر دستگاه ارتباط برقرار کند.
    سخت افزار موردنیاز
    (2) برد آردینو
    سیم
    مدار
    پین 4 (پین کلاک ،یا SCL) و پین 5 (پین Data یا SDA) روی آردینو master به مقابل آن برد slave متصل کنید. ممطمئن باشید که هر دو برد به اشتراک گذاشته شده ؛ زمین مشترک داشته باشند. به منظور فعال کردن ارتباط سریال ، آردینو master باید به کامپیوترتان از طریق USB متصل باشد.
    اگر تأمین تغذیه آردینو ها مستقلا دارای مشکل شد، خروجی آردینو Master را به پین VIN روی Slave وصل کنید.
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Master_Sender_bb.jpg
مشاهده: 69
حجم: 19.2 کیلو بایت
    شماتیک
    برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Master_Sender_sch.jpg
مشاهده: 82
حجم: 13.0 کیلو بایت
    کد:
    Master Writer Code - Program for Arduino 1 // Wire Master نویسنده // by Nicholas Zambetti <http://www.zambetti.com> // Demonstrates use of the Wire library // Writes data to an I2C/TWI slave device // Refer to the "Wire Slave Receiver" example for use with this // Created 29 March 2006 // This example code is in the public domain. #include <Wire.h> void setup() { Wire.begin(); // join i2c bus (address optional for master) } byte x = 0; void loop() { Wire.beginTransmission(4); // انتقال به دستگاه #4 Wire.write("x is "); // پنج بایت را ارسال می کند Wire.write(x); // یک بایت را ارسال می کند Wire.endTransmission(); // توقف انتقال x++; delay(500); } Slave Receiver Code - Program for Arduino 2 // Wire Slave Receiver // by Nicholas Zambetti <http://www.zambetti.com> // Demonstrates use of the Wire library // Receives data as an I2C/TWI slave device // Refer to the "Wire Master Writer" example for use with this // Created 29 March 2006 // This example code is in the public domain. #include <Wire.h> void setup() { Wire.begin(4); // پیوستن به درگاه I2C // با آدرس #4 Wire.onReceive(receiveEvent); // event رجیستر Serial.begin(9600); // شروع به کار سریال برای خروجی } void loop() { delay(100); } // تابعی که هر دیتا دریافت شده از مستر را اجرا می کند // this function is registered as an event, see setup() void receiveEvent(int howMany) { while(1 < Wire.available()) // حلقه سراسری به جز آخر { char c = Wire.read(); // receive byte as a character Serial.print(c); // print the character } int x = Wire.read(); // دریافت بایت به عنوان اینتیجر Serial.println(x); // چاپ اینتیجر }
    لینک سایت:Arduino - MasterWriter
    ویرایش توسط hesam.time : 04-04-2013 در ساعت 07:15 AM

  2. #2
    Junior Member
    تاریخ عضویت
    May 2015
    نوشته ها
    7
    با تشکر از دوست عزیز
    آیا برای اشتراک دوسیمه حتما میبایست از پین sda و scl اردوینو استفاده شود یا میتوان از هر پایه ای جهت ارسال اطلاعات استفاده کرد؟

  3. #3
    Junior Member
    تاریخ عضویت
    Mar 2015
    نوشته ها
    2
    با تشکر از مطلب بسیار ارزشمندی که گذاشتید.
    سوالی داشتم و اونم اینکه آیا در ارتباط i2c یک دستگاه می*تواند هم master باشد و هم slave ؟
    هدفم از این سوال اینه که میخوام یه سنسور imu رو با یه آردوینو پرو مینی راه اندازی کنم با پروتکل i2c. در این ارتباط کاملا واضحه که آردوینو پرو مینی باید master باشه. اکنون میخام اطلاعات بدست آمده از imu توسط pro mini رو به همراه چندتا دیتای دیگه با همین ارتباط i2c بفرستم به یه برد آردوینوی دیگه مثل due. که در این ارتباط پرو مینی باید slave باشه و due باید مستر باشه. ممنون میشم اگر بفرمایید که چطور این کار امکانپذیر خواهد بود؟
    ارادتمند همه شما

  4. #4
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط mohsen.mgha نمایش پست ها
    با تشکر از دوست عزیز
    آیا برای اشتراک دوسیمه حتما میبایست از پین sda و scl اردوینو استفاده شود یا میتوان از هر پایه ای جهت ارسال اطلاعات استفاده کرد؟
    روی همین پایه ها فقط بدونید که بیش از یک ماژول i2c میتونه به این پایه ها وصل بشه

  5. #5
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط Soleimani_m نمایش پست ها
    با تشکر از مطلب بسیار ارزشمندی که گذاشتید.
    سوالی داشتم و اونم اینکه آیا در ارتباط i2c یک دستگاه می*تواند هم master باشد و هم slave ؟
    هدفم از این سوال اینه که میخوام یه سنسور imu رو با یه آردوینو پرو مینی راه اندازی کنم با پروتکل i2c. در این ارتباط کاملا واضحه که آردوینو پرو مینی باید master باشه. اکنون میخام اطلاعات بدست آمده از imu توسط pro mini رو به همراه چندتا دیتای دیگه با همین ارتباط i2c بفرستم به یه برد آردوینوی دیگه مثل due. که در این ارتباط پرو مینی باید slave باشه و due باید مستر باشه. ممنون میشم اگر بفرمایید که چطور این کار امکانپذیر خواهد بود؟
    ارادتمند همه شما
    دوست من از این لینک ها استفاده کن
    I2C between Arduinos

    https://www.arduino.cc/en/Tutorial/MasterWriter

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO