ارتباط های آسنکرون سریال یکی از کاربردی ترین نوع ارتباط در بین سخت افزار های مختلف است . در این ارتباط دیتا در تعدا بیت های مشخصی و بر اساس یک زمان بندی دقیق و از قبل مشخص شده انتقال می باشد . یکی از کاربردی ترین پروتکل های ارتباط سریال غیر همزمان ، پرتکل RS232 می باشد . این پروتکل شامل لایه های سخت افزاری و نرم افزاری خود است . در لایه های نرم افزاری نحوه ارسال بیت های داده و سایر پارامتر ها مشخص می شود و در لایه سخت افزاری شامل پورت های 9 پایه با عنوان پورت های DB9 می باشد . در این ارتباط مسیر های ارسال و دریافت دیتا مجزا از همدیگر می باشند . به طور گسترده ای از RS232 در کامپیوتر های صنعتی و… استفاده می شود . RS232 امکان ارتباط باسیم تا مسافت های تقریبا 15 متری را فراهم می ساز . اما به دلیل مسافت کم RS232 در ارتباط های با فاصله دور تر از پروتکل RS485 استفاده می شود . ساختار نرم افزاری و نحوه ارسال دیتا در این پروتکل همانند RS232 است با این تفاوت که سطح ولتاژ در این ارتباط با RS232 متفاوت است . RS485 امکان ارتباط های باسیم تا فواصل 1200 متر را فارهم میسازد . لذا در شبکه هایی که اجزا در وفواصل دوری از هم قرار دارند از RS485 استفاده می شود . برخلاف RS232 در ارتباط RS485 هیچ سخت افزار معینی برای استفاده در خروجی ها تعریف نشده است ( پورت سخت افزاری ). به همین دلیل خروجی و ورودی های RS485 در برد های مختلف به شکل های مختلف است مانند ترمینال و یا حتی پورت های DB9 . یکی از مهم ترین تفاوت های RS232 و RS485 کانال های ارتباطی آن ها می باشد . ارتباط RS232 به صورت تمام دو طرفه است ولی ارتباط RS485 به صوت نیمه دو طرفه می باشد که از دیفرانسیل خطوط برای انتقال منطق های 0 و 1 استفاده می کند .  در این آموزش قصد داریم به نحوه راه اندازی ماژول MAX485 بپردازیم . MAX485 یک مبدل UART به RS485 است . لذا به راحتی توسط این ماژول دیتای سریال ارسال شده از برد آردوینو را می توان از طریق پروتکل RS485 منتقل نمود . این کار امکان ارتباط سیمی چندین برد را در فواصل دور فراهم می سازد .

 

در تصویر زیر پایه های ماژول MAX485 نشان داده شده است :

شماتیک اتصال ماژول به آردوینو :

 

برنامه فرستنده :

#define SerialTxControl 2 // contact # 2 will switch receiver / transmitter mode
#define RS485Transmit HIGH
#define RS485Receive LOW

void setup (void) {
    Serial.begin (9600); // set the serial port to 9600baud speed
    pinMode (SerialTxControl, OUTPUT);
    digitalWrite (SerialTxControl, RS485Transmit); // put the device into transmitter mode
}
 
void loop (void) {
    Serial.print ("ping"); // send text
    delay (500);
}

برنامه گیرنده :

#define SerialTxControl 2
#define RS485Transmit HIGH
#define RS485Receive LOW

char buffer [100];
byte state = 0;

void setup (void) {
    Serial.begin (9600);
    pinMode (13, OUTPUT); 
    pinMode (SerialTxControl, OUTPUT); 
    digitalWrite (SerialTxControl, RS485Receive); // put the device into receiver mode
}
 
void loop (void) {
    int i = 0;
    if (Serial.available ()) {// if any data came to the port
        delay (5); // wait a bit for the entire data packet to be accepted by the port
        while (Serial.available ()) {
            buffer [i ++] = Serial.read (); // read data and write it to the buffer
        }
    }
    if (i> 0) {// if there is something in the buffer
        buffer [i ++] = '\ 0'; // convert the buffer contents to a string by adding a null character
        if (strcmp (buffer, "ping")) {// if the accepted string is equal to the ping text
            digitalWrite (13, state); // blink LED
            state =! state;
        }
    }
}

پس از پروگرام کردن دوتا برد آردوینو ، در محیط آردوینو IDE در قسمت Tools پورت را برد روی پروتی که گیرنده به آن متصل است قرار داده و سپس وارد محیط Serial Monitor شوید .

Tags:
About Author: USER_4