@Mehrad#4060
فایل c مهم نیست من میخوام ایجاد یک شبکه کنم با چند تا میکرو که برای مثال یکی master و 3 تا slave میخوام با RS485 یک پیامی از MASTER به سمت یک SLAVE بفرستم و اون طرف SLAVE دریافت کنه و یک جواب برای MASTER بفرسته
چنین چیزی امکان پذیر هست؟
دوست عزیز، منطقی که شما دارید پیاده میکنید به نظر درست میاد. دیگه میمونه پیاده سازی که میگید انجام دادید. مشکلی هم که در ارتباط بهش بر خوردید رو با اطلاعاتی که دادید نمیشه حل کرد. پیشنهادی که دارم اینه که از پروتئوس برای شبیه سازی هایی که ساده نیستن استفاده نکنید. ممکن هست که همین مدار رو در دنیای واقعی ببندید و جواب بده و همینطور مدار هایی که در پروتئوس جواب میدن ولی در دنیای واقعی کاملا اشتباه هستن. من در دورانی که با دانشگاه در ارتباط بودم به علت محبوبیت این برنامه در دنیای آکادمیک ایران، تعداد خیلی خیلی زیادی پروژه دیدم با این شبیه ساز و انقدر اشتباه و غلط داره که به نظر من اصلا ارزش وقت گذاشتن رو نداره و یک راست برید سراغ تست واقعی.
نکته دوم اینکه شما دارید سعی می کنید یک شبکه بین چند دستگاه بسازید و دارید از RS485 استفاده می کنید. نکته خوبی که RS485 داره اینه که شما می تونید به راحتی باهاش شبکه بسازید. RS232 فقط بین دو تا دستگاه ارتباط full duplex برقرار می کنه و RS485 میتونه تا ۳۲ تا دستگاه رو به صورت half duplex به هم وصل کنه. ارتباط دستگاه ها هم بسیار ساده هستن. شکل زیر رو ببینید:
بر اساس همین rs485 شبکه های modbus که در صنعت معروف هستن شکل میگیرن. بنابراین پیشنهاد می کنم با توجه با اینکه مقصود شما به صورت خیلی حرفه ای و صنعتی توسط بزرگان صنعت قبلا انجام شده، در اینترنت، پیاده سازی modbus توسط avr رو سرچ کنید و از اون استفاده کنید. برای اینکه کمی کارتون راحت تر بشه، می تونید modbus rtu arduino رو سرچ کنید. چون معمولا کتابخانه ها برای آردوینو راحت تر پیدا میشه.
با تهیه dev board های مختلف، حتی آردوینو هم می تونید در دنیای واقعی تست کنید کدها رو و خیلی مطمئن تر به طراحی تون ادامه بدید.
سلام دوست عزیز، اگر ممکن هست، کد ها رو به صورت فایل های c بفرستید که من بتونم ببینم. اینطوری که ارسال شده برام قابل خوندن نیست.
نکته مهمی که به نظرم میرسه اینه که حتما باید در فرستنده و گیرنده، baud rate رو ست کنید که یکی باشن. آیا اینکار رو انجام دادید؟ ارتباط سریال یک سری تنظیمات دیگه هم داره مثل تعداد استاپ بیت و تعداد بیت و پریتی و … که اینها هم دقیقا باید در فرستنده و گیرنده، برابر باشن.
@Mehrad#4060 خودم نوشتم ولی در پروتئوس یه ارور دارم
RX FARME ERROR وجود داره
نمیدونم چرا این میاد هر تغییری میدم باز این وجود داره.نمیدونم مشکل از کجا.
دکتر جان عرض کنم
1- من دو تا میکرو دارم که میخوام با rs 485 بهم وصل کنم بعد اومدم
2- از atmega 64 که دوتا کانال یوزارت داره استفاده کردم که از یه کانالش برای دریافت و نمایش اطلاعات استفاده کردم و از یه کانال دیگه برای برقراری ارتباط بین دوتا میکرو استفاده کردم
3-یه پورت اخصاص دادم به اینکه این میکرو الان فرستنده است یا گیرنده که با یک شدن rs485 فرستنده و با صفر شدن rs485 در نقش گیرنده می باشد. (که پورت PORTD.4را اختصاص دادم به این کار)
4- بعد فرستنده الگوریتمش به صورت زیر
*ابتدا RS485 را در نقش فرستنده قرار میدم (PORTD.4=1)
*چیزی که از کانال صفر دریافت کردیم رو از طریق کانال یک برای میکرو دومی میفرستیم
*بعد میره تو نقش گیرنده (PORTD.4=0)
*چیزی رو که از کانال یک دریافت کرد از طریق کانال صفر نمایش میده
5- گیرنده
*ابتدا میره درنقش گیرنده
دریافت میکنه از کانال یک
میره تو حالت فرستنده
@Mehrad لطفا اگه میشه یه راهنمایی کنید
تشکر
یک نکته دیگه : RS485 به صورت half duplex هست و این یعنی در هر لحظه فقط یک نفر اجازه داره حرف بزنه و بقیه باید گوش بدن. یک احتمالی وجود داره که به دلیل مشکل در کد، در یک لحظه، هر دو میکروی شما با هم حرف می زنن و این ایجاد مشکل می کنه. اگر خواستید با همین روشی که تا الان اومدید، ادامه بدید، در کد دنبال مشکلی بگردید که باعث میشه در یک لحظه هر دو میکرو با هم داده ارسال کنن همزمان.