# برنامه نویسی میکروکنترلر (MicroController) ها و MicroProcessor ها > برنامه نویسی سیستم های Embeded > سوال: راهنمایی برای ارتباط دو میکرو با هم

## KING AMIN

سلام
میخواستم بدونم میشه دو میکرو را از طریق 2 ارتباط همزمان مثل( rs232و ارتباط 3سیمه )به هم متصل کرد.

----------


## farzadsw

سلام
اگر منظورتون استفاده از پروتکل سریال سه سیمه (tx,rx.gnd) هست، بله با واحد uart میکرو ها می تونید این کار رو انجام بدید. فقط اتصال ضربدری و باوود ریت یکسان فراموش نشه.

----------


## SEZAR.CO

بستگی داره چه کار بخواهی بکنی چقدر فاصله ی دو میکرو باشه و...
مثلا با i2c میشه و تا فاصله ی 80 سانت هم جواب میده
پیوست رو نگاه کن (کار من نیست)

----------


## farzadsw

چون I2C میکروی AVR به عنوان master استفاده میشه و به طور "سخت افزاری" قابلیت slave شدن رو نداره، بهتره که برای ارتباط 2 مبکرو از uart به جای I2C استفاده کنید. در مثالی که دوستمون گذاشتند، با دستور bitwait امکان استفاده از باس در حالت slave به صورت " نرم افزاری" ایجاد شده که در این مثال مشکلی ایجاد نمی کنه ولی در کل، نگه داشتن برنامه توسط دستورهایی مثل bitwait می تونه مشکل ساز بشه.

----------


## Abbas Amiri

> چون I2C میکروی AVR به عنوان master استفاده میشه و به طور "سخت افزاری" قابلیت slave شدن رو نداره، بهتره که برای ارتباط 2 مبکرو از uart به جای I2C استفاده کنید. در مثالی که دوستمون گذاشتند، با دستور bitwait امکان استفاده از باس در حالت slave به صورت " نرم افزاری" ایجاد شده که در این مثال مشکلی ایجاد نمی کنه ولی در کل، نگه داشتن برنامه توسط دستورهایی مثل bitwait می تونه مشکل ساز بشه.


سلام
از حضور مجدد شما خوشحالم
شما میگویید حالت Slave بصورت سخت افزاری پشتیبانی نمیشه ، ولی اینتراپت TWI در زمان Slave عمل میکنه واین یعنی بصورت سخت افزاری پشتیبانی میشه.

----------


## farzadsw

سلام
ممنون از لطف شما
بله حق با شماست، تو بعضی از میکرو های سری تاینی اینطور بود. البته باز استفاده از i2c وقتی ارتباط دوطرفه (دو طرف امکان شروع ارتباط رو داشته باشند)  مد نظر باشه باید بین حالت slave و مستر دائم سوییچ بشه و این سوییچ شدن رو باید نرم افزاری انجام داد (رجیستر twcr باید مدام مقدارش تغییر کنه). ولی خب اگه یک طرف دائم slave و طرف دیگه دائم master باشه مشکلی پیش نمیاد. 
البته من همچنان توصیه می کنم برای ارتباط 2 میکرو از uart استفاده بشه چون ارتباط full-duplex هست و حداقل مراحل نرم افزاری رو هم لازم داره (دستور استارت، آدرس دهی، مقدار دهی، اکنالج و استاپ رو نداره).

----------


## hamid-nic

با اجازه ی آقا فرزاد 
اما در TWI یا همون I2C چه برای Master شدن و چه برای Slave شدن حالت سخت افزاری خاصی مثلا مثل SPI نداریم . همون طور که بهتر از من می دونید و در تصویر شکل زیر هم نشون داده شده فقط دو خط SDA  و SCL را داریم که برای master و Slave شدن بصورت نرم افزاری باید اقدام کرد همون قضیه ی سوییچ شدن است که فرمودید .



پس منظورتون از این جمله چیه ؟



> I2C میکروی AVR به عنوان master استفاده میشه و به طور "سخت افزاری" قابلیت slave شدن رو نداره


البته با شما کاملا موافقم که بهتره از Uart برای ارتباط 2 میکرو استفاده کرد .
استفاده از I2C صرفا برای ارتباط چندین میکرو که قراره باهم تبادل اطلاعات کنند بسیار مفید خواهد بود .
همچنین از SPI هم نباید در ارتباط چند میکرو در فواصل کوتاه و سرعت بالا غافل بود .

----------


## farzadsw

بله، همونطور که عرض کردم:



> بله حق با شماست، تو بعضی از میکرو های سری تاینی اینطور بود.


بعضی از میکرو های تاینی قابلیت آدرس گرفتن رو نداشتند (قدیم ندیما) روی همون حساب و اینکه بعد از اون همیشه از I2C برای ارتباط با سنسورها (slave) استفاده می کردم، اینطور تو ذهنم مونده بود(البته اون کد بسکام هم شکم رو بیشتر کرد!). ممنون که تصحیح کردید.

----------


## mehran901

سلام بر دوستان 
از اونجایی که دیدم دوستمون FarzadSW تمرکز نظرشون درمورد استفاده از usart/uart بوده گفتم جا داره ی مطلبی رو هرچند کوتاه عرض کنم
دوست عزیز King amin من درصورتی که بخوام یک ارتباط مطمئن ایجاد کنم که  نیم دوطرفه هم به خوبی پشتیبانی بشه و بین usart و i2c حق انتخاب داشته باشم قطعا i2c رو انتخاب می کنم چرا که  من تا فاصله حدود 1 1.5 متر ( طول باس i2c ربات بنده بود ) به راحتی بدون حتی یک دفعه خطا ازش جواب گرفتم ولی ! usart دهن ما رو آسفالت کرد (البته برای فاصله های خیلی کم و کلا با واسط های استریپ لاین و روی برد بدک جواب نمی ده ) ،در کل  مشکلات مختلفی داره ....
اگه از usart/uart درحالت آسنکرون بخای استفاده کنی من شخصا به این نتیجه رسیدم هیچ تضمینی بر انتقال موفق اطلاعاتت نیست...!! و به راحتی سیستم دچار اختلال میشه 
ولی
درحالت سنکرون و با استفاده از وقفه نسبتا خوب کار میکنه 
از طرفی : چرا عاقل کند کاری که باز آرد پشیمانی 
اگه حق انتخاب داری بین ارتباط های مختلف ، SPI ، البته با گراندت 3 سیم نیس !  و i2c ( با گراند 3 سیمه ! ) استفاده کنی خیلی عالیه 
شما به راحتی می تونی یک رشته رو توسط i2c بدون کوچکترین خطا انتقال بدی و اگه از لحاظ آدرس دهی سخت افزاری مشکل داری همه آدرس ها رویکی بده و داخل رشتت 2 رقم کد بذار ... میکرو ها به راحتی به تفکیک این 2 رقم کد آدرس دهی میشن...! و مابقی رشته هم میتونه شامل اطلاعات عددی یا رشته ای مورد نیازت باشه.....
مطمئن باش خیلی بهتره تا usart ! البته برا استفاده از usart هرچی کریستال زیادبذاری خطا کمتری داری به شکلی که فرکانس کلاکت رو 11052200 هرتز بذاری خطا صفر میشه! اونوقت شاید کمیبشه بهش اعتماد کرد...!! بهش رسیدم که میگما....!

موفق باشی

----------


## farzadsw

بر خلاف نظر شما، بنده معتقد هستم که ارتباط uart برای اتصال دیتای دو میکرو کنترلر بهتر از I2C عمل می کنه.
اول اینکه I2C سربار اطلاعاتش خیلی بیشتر از uart هست،به همین جهت نرخ ارسال و دریافت اطلاعات در UART "می تواند" خیلی بیشتر از I2C باشد(حدود 1 مگابیت در ثانیه و یا بیشتر)
I2C برای ارتباطات داخل مداری طراحی شده (معنی اسمش هم همینه) و برای این موارد هم خوب جواب میده ولی برای مسافت های زیاد، اتفاقا مناسب نیست. شما uart رو نباید بدون لایه فیزیکیش درنظر بگیرید، همین uart رو میشه با rs232 یا rs485 استفاده کرد.با rs232 میشه تا 20 متر و باوود ریت 115200 ارتباط داشت و اگه باوودریت رو کمتر هم بکنید، بورد تا 50 متر هم خواهد رسید. با rs485 علاوه براین که تو محیطهای نویزی خیلی بهتر عمل میکنه، بورد مفیدش تا 1 کیلومتر هم می تونه برسه. البته بورد i2c رو هم میشه افزایش داد ولی نیاز به نصب ریپیتر در میان مسیر داره که هم هزینه رو افزایش میده و هم کار رو مشکل میکنه.
نکته دیگه اینه که uart نسبت به سایر پروتکل ها استاندارد "استاندارد تری" هست! فرضا اگر بخواید ارتباط بدون سیم داشته باشید، می تونید به راحتی اطلاعات رو به صورت بی سیم به مودم یا ماژول وایرلس بدید و در طرف دیگه (مثلا 2 کیلومتر اونطرف تر) تحویل بگیرید. ماژولهای GPSو GSM نمونه های دیگه ای هستند که ارتباط uart به عنوان یک استاندارد در اونها استفاده میشه (البته این مورد زیاد به موضوع بحث مرتبط نیست). یکی از دلایلی که از I2C در محیطهای صنعتی کمتر استفاده میشه اینه که اگر یک نود روی باس مشکلی براش ایجاد بشه، کل باس از دست میره و بجای این پروتکل از پروتکلهایی مثل CAN استفاده میشه.

در کل هر پروتکل ارتباطی برای یک کاری ساخته شده و پروتکل بهتر وجود نداره. در این مورد ارتباط "دو" میکرو، ارتباط سریال uart ارتباط مناسب تری هست. بعضی از کاربردهای اصلی این پروتکلها به صورت زیر هست:
UART: برای ارتباط در مسافت کوتاه با میکروکنترلر و ماژولهای ارتباطی شامل : مودم، IRDA، کارت خوان (کارت هوشمند)، GPS، سیستمهای مخابراتی GSM 
UART+RS232: ارتباط بین دو دستگاه (میکرو-میکرو، میکرو-کامپیوتر،کامپیوتر-مودم و...) در مسافت های نسبتا بلند.
UART+RS485: ایجاد شبکه با بورد بالا و یا سرعت بالا (بورد کم) در محیطهای نویزدار
I2C: ارتباط با چنیدین وسیله ارتباطی (عموما سنسورها) در مسافت های کوتاه 
SPI: ایجاد ازتباط با وسایل مختلف با سرعت بسیار بالا در مسافت کم
CAN: ایجاد شبکه با قابلیت اطمینان بسیار بالا در میحطهای صنعتی و پرنویز
1Wire: برای ارتباط با سنسورها (باس)در محیطهای صنعتی ولی با سرعت کم (جایگزین i2c در محیطهای صنعتی)

*از نظر صحت اطلاعات رسیده هردوی i2c , uart تضمینی ندارند ولی بازم uart یه پریتی چک داره لااقل!

----------


## mehran901

حق با شماست من بدون در نظر گرفتن rs232 , rs485 و همین طور فرکانس و سرعت انتقال اطلاعات  usart، پست قبلی رو نوشتم و بهتر هست این طوری تصحیح کنم ، من در ارتباط usart خاطره خوبی نداشتم، و ممنون بابت اطلاعات جامعتون
البته یادم اومد به یکی از کاربرد های i2c در صنعت خودرو ها اشاره کنم که i2c در خودرو 206 به عنوان مهمترین باس انتقال اطلاعات استفاده میشه ...ولی خب ی سری معایبش رو هم شما مورد بررسی قرار دادین 

تشکر

----------


## parsdc

با سلام
از مناظره شما در پست بالا حسابی استفاده کردم و اطلاعات کسب کردم
از هر دوی شما تشکر میکنم
دوستان در مورد ارتباط i2c در خودرو 206 اگر اطلاعاتی دارید لطفا راهنمایی کنید
من در این مورد دوست دارم اطلاعاتی کسب کنم و برای اولین بار در اینترنت دیدم که شما گفتید این ارتباط i2c است
دوستان چینی با یه مگا8 یه کانورت ساختند که اطلاعات ارسالی از ریموت کنترل رادیو پخش 206 در کنار فرمان خودرو را دریافت میکنه و این اطلاعات را تغییر داده و به پخش مارک sony میده تا اون هم با یه پروتکل دیگه قابل کنترل باشه این قطعه که حدود 40 تومن هست اگر اطلاعاتی از پروتکل 206 داشتم و شیوه ارسال اطلاعات میتونستم یه جورایی شخصی سازی کنم و اون تغییراتی که دوست دارم را انجام بدم

----------

