 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
|
|
نشاط [ F.Abdelaziz ]
قوة السمعة:333
|
|
12-08-2017, 07:26 PM
المشاركة 1
|
|
بروتوكول الاتصال RS485 والاتصال بين ميكروكونترولر PIC وآخر
البروتوكول RS485 هو شكل من أشكال الاتصال التسلسلى والذى يستخدم تقنية نقل الفرق فى الجهد بين طرفين يسميان A و B . عندما يكون فرق الجهد موجب فإن البرتوكول يمثل المنطق "1" وعندما يكون فرق الجهد سالب فإنه يمثل المنطق 0"" .
من السمات البارزة لتنفيذ النقل بالبروتوكول RS485 هو استخدام زوج من الأسلاك النحاسية الملفوفة حول بعضها twisted والتى تشكل ناقل الاتصال بمدى أقصاه حوالى 1000 متر دون الحاجة لاستخدام أجهزة تكرار النقل . كما أنه يمكنك توصيل ناقل بيانات حتى 32 عقدة nodes بطريقة النصف مزدوج half duplex ، هذا يعنى أن الاتصال ثنائى الاتجاه ولكن ليس فى نفس الوقت . يستخدم البروتوكول RS485 فى الاتصال بسرعة حتى 2.5 M bits per second .
لتنفيذ هذا النوع من الاتصالات تستخدم دوائر متكاملة كمحولات تسمح بربط الأجهزة ذات المستويات TTL مع RS485 ، الدائرة المتكاملة الأكثر انتشارا لهذه التطبيقات هى MAX485 وهى فى غلاف ذات 8 أطراف ، الشكل التالى يبين الأطراف الطبيعية لهذه الأجهزة :

الأطراف A و B هى ناقل البيانات ثنائى الاتجاه ، الأطراف RE وDE هى أطرف تمكين المخزن المؤقت buffer لكل من الإرسال والاستقبال على الترتيب . الأطراف DI و RO هى أطراف الإرسال والاستقبال على الترتيب . كخطوة إضاقية ، يتطلب وجود زوج من المقاومات 120 على التوازى لكل من الطرف A والطرف B فى نهايتى الناقل RS485 .

لاستعراض هذا النوع من شبكات الاتصال سوف نقوم فى هذا الدرس بعمل اتصال نصف مزدوج بين اثنين من الميكروكونترولر ، وسوف نستخدم لهذا الغرض الموديولات USART مع مزيد من التحكم لطرف التمكين .
لإدراك استخدام RS485 يمكنك مراقبة وتحليل كود المصدر للبرنامج التالى الذى يقوم بإرسال حالة مقاومة متغيرة للتحكم فى شدة الإضاءة لمصباح بالجهة المقابلة :
كود:
void main( void )
{
//Declaration of variables.
unsigned short DATA;
//Port settings.
TRISB = 0b11111110;
PORTB = 0; //MAX485 is configured as a receiver.
//Activated pull-up resistors.
OPTION_REG = 0;
//USART module is configured to 250000 bps.
UART1_Init(250000);
//PWM module is configured with a frequency of 1K Hz
PWM1_Init(1000);
//PWM module starts with 0%.
PWM1_Start();
PWM1_Set_Duty(0);
while(1) //Infinite Loop.
{
//Evaluates if a data has arrived.
if( UART1_Data_Ready() )
{
DATA = UART1_Read();
//Evaluates whether the data arrival equals the flag 170.
if( DATA==170 )
{
//waits for the next data.
while( !UART1_Data_Ready() );
DATA = UART1_Read();
//Updates the duty cycle of the PWM.
PWM1_Set_Duty(DATA);
}
}
//Evaluates whether the button was pressed.
if( Button(&PORTB, 1, 50, 0) )
{
PORTB = 1; //MAX485 is configured as a transmitter.
//Reads the analog channel with voltage
//potentiometer, and saved the 8 most significant bits
// in the variable DATA.
DATA = (ADC_Read(0)>>2)&0xFF;
//Transmits the flag 170, to synchronize communication.
UART1_Write(170);
//Pauses for 1 m seconds between data.
delay_ms(1);
//Transmitting the value of the variable DATA.
UART1_Write(DATA);
//Wait until the button is released.
while( Button(&PORTB, 1, 50, 0) );
PORTB = 0; //Set MAX485 as receiver .
}
}
}
البرنامج السابق متناظر ، أى يتم تحميل كل ميكروكونترولر بنفس البرنامج . الدائرة الإلكترونية تستخدم مصباح متوهج من أجل إظهار التحكم فى شدة الأضاءة الذى نحصل علية من موديول PWM وذلك بعد تحويل نتيجة فرق الجهد التناظرى من على المقاومة المتغيرة إلى عدد يستخدم كدورة خدمة لنظام PWM .
لأغراض المحاكاة يتم تغيير مقاومة المصباح المتوهج من القيم الافتراضية وهى 24 إلى 100K وجهدها المقنن من 12V إلى 5V .

لإجراء المحاكاة يلزم جلب الأجهزة الآتية :
16F877A, RES, MAX487, LAMP, BUTTON, CAP, POT-HG
وتكوين الدائرة الكهربية التالية :

عند تشغيل المحاكاة يتم إعداد موديولات MAX كمستقبلات ، وعندما تقوم بالضغط على المفتاح الضاغط يقوم الميكروكونترولر بالتحويل من تناظرى لرقمى ، ويرسل هذه المعلومات الخاصة بتحديد شدة إضاءة المصباح إلى الجهة المقابلة .


|