قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 02-07-2017, 07:56 PM المشاركة 1   
افتراضي الاتصالات التسلسلية Serial Communications Twitter FaceBook Google+



الاتصالات التسلسلية Serial Communications
مقدمة :
تطبيقات الميكروكونترولر قد تتطلب فى بعض الحالات تنفيذ إقامة اتصالات تسلسلية مع غيره من أجهزة نقل البيانات مثل الذاكرات memories وأجهزة الاستشعار sensors والكومبيوتر وحتى ميكروكونترولر آخر .
بغرض إجراء الاتصالات التسلسلية ، بعض الميكروكونترولر يكون بها وحدات (تسمى موديولات modules ) مثل :
I2C, SPI, USART, USB . كل من هذه الأشكال من الاتصالات يسمح بالاتصال بالوحدات الأخرى . الاتصال من خلال I2C يعتبر نموذجيا للاتصال بالذاكرات التسلسلية مثل : 24LC64, 24LC128, 24LC512 وغيرها . يستخدم البروتوكول SPI للاتصال مع أجهزة التخزين الكبيرة مثل الذاكرة SD . الوحدة USART هى أكثر الوحدات إستخداما ، هذه الوحدة تسمح بالاتصال بالأجهزة مثل أجهزة الاستشعار ووحدات الإرسال والاستقبال Xbee والكومبيوتر الشخصى ووحدات GPS والمتحكمات الآخرى . وأخيرا وحدة USB ، والموجودة ضمن بناء قليل من المتحكمات مثل 18F2550 و 18F4550 ، تسمح بالاتصال مع الكومبيوتر الشخصى من خلال منفذ USB وتعرف باسم HID " جهاز واجة الانسان" Human Interface Device .

الوحدة (الموديول) USART :
الموديول USART هو وحدة اتصال تسلسلى غير متزامن ، هذه الميزة تجعل الطلب علية كبير حيث لا يحتاج لإشارة الساعة . ميزة أخرى ، أنه ثنائى الاتجاه بمعنى أنه يمكنه إرسال واستقبال المعلومات فى وقت واحد. لهذا الغرض فهو يستخدم خطين لنقل المعلومات ، أحدهما للإرسال والآخر للاستقبال . خواص بروتوكول هذا الاتصال هى:
"نبضة بدء" start bit وهى دائما بالمنطق المنخفض logic 0 و 8 أو 9 بت من البيانات data و واحد 1 أو1.5 أو 2 بتات إنتهاء stop bits . وأخيرا يجب تحديد سرعة النقل بنفس القيمة فى كل من الجهازين المتصلين وهى فى الحالة الافتراضية 9600 bps (ليست قاعدة) .
المخطط التالى يبين سلوك نقل البيانات باستخدام هذا البروتوكول :



يستخدم هذا البروتوكول بالكومبيوتر الشخصى وبالأجهزة الأخرى وهو معروف بالبروتوكول RS232 ، ويستخدم مستويات جهد محددة والتى تختلف عن مستويات الجهد التى يستخدمها الميكروكونترولر . فى البروتوكول RS232 يكون المنطق صفر بقيمة الجهد +12 volts ويكون المنطق واحد بقيمة الجهد-12 volts . الكومبيوتر الشخصى والأجهزة الأخرى التى تتعامل مع المنفذ RS232 ، تستخدم وصلة DB9 وبها 9 طرف معرفة كما فى الشكل التالى :



للاتصال الغير متزامن يجب إعداد التوصيلات كما فى الشكل التالى :



لعمل إتصال وربط الميكروكونترولر PIC مع جهاز به RS232 ، يستخدم المحول المعروف MAX232 . يجب أن يتم تنفيذ ذلك كما فى الشكل التالى :





لاستخدام بروتوكول هذا الاتصال ، يتضمن مترجم الميكروسى المكتبة UART والتى تحتوى على الدوال الأتية :
الدالة :

كود:
UART1_Init (const unsigned long baud_rate);
تستخدم هذه الدالة لتهيئة (إعداد) الموديول USART وتحديد سرعة الاتصال عن طريق البارامتر baud_rate .
مثال :
كود:
// Initialize hardware UART1 and establish communication at 9600 bps
UART1_Init(9600);

الدالة :

كود:
char UART1_Data_Ready();
تستخدم هذه الدالة فى اختبار ما إذا كان هناك بيانات بحافز buffer الاستقبال جاهزة للقراءة فتعود بواحد (1) وإلا فإن لم توجد بيانات فى حافز الاستقبال عادت بالصفر (0) .
مثال :

كود:
// If data is ready, read it:
if (UART1_Data_Ready() == 1) { 
 receive = UART1_Read();
 }
الدالة :

كود:
 char UART1_Tx_Idle();
تستخدم هذه الدالة فى اختبار ما إذا كان مسجل الإزاحة للإرسال فارغ (أى تم إرسال البيانات) فتعود بواحد أما إذا كان هناك بيانات فى مسجل الإزاحة للإرسال والموديول جاهز لإرسال بيانات جديدة فتعود بالصفر .
مثال :

كود:
// If the previous data has been shifted out, send next data:
if (UART1_Tx_Idle() == 1) { 
  UART1_Write(_data);
 }
الدالة :

كود:
 char UART1_Read();
تستخدم هذه الدالة فى استقبال (قراءة) بايت من حافز الدخل وتعود بقيمته.

كود:
// If data is ready, read it:
if (UART1_Data_Ready() == 1) { 
 receive = UART1_Read();
 }

الدالة :

كود:
UART1_Read_Text (char * Output, char *Delimiter, char Attempts);
تستخدم هذه الدالة فى قراءة سلسلة (تتابع) الحروف المخزنة بالمتغير المشار إلية بالبارامتر Output حتى يتم كشف تسلسل بشكل محدد delimiter sequence مبين بالبارامتر Delimiter . البارامتر Attempts يحدد عدد الحروف المتوقعة (طول النص) بالتسلسل المحدد . هذه الدالة تستدعى كوحدة واحدة حيث يتم تنفيذها عند وجود تتابع سلسلة الحروف بالشكل المحدد فإذا لم يوجد التتابع بالشكل المحدد يتم الخروج من الإجراء الموجود به الدالة .
مثال :

كود:
UART1_Init(4800);                         // initialize UART1 module
Delay_ms(100);
while (1) {
  if (UART1_Data_Ready() == 1) {          // if data is received 
    UART1_Read_Text(output, "OK", 10);    // reads text until 'OK' is found
    UART1_Write_Text(output);             // sends back text 
 }
}
الدالة :

كود:
UART1_Write(char _data);
تستخدم هذه الدالة فى إرسال بايت البيانات الموجود بالمتغير _data من خلال موديول UART .
مثال :

كود:
unsigned char _data = 0x1E;
...
UART1_Write(_data);
الدالة :

كود:
UART1_Write_Text(char * UART_text);
تستخدم هذه الدالة فى إرسال نص خلال UART ويجب أن ينتهى النص بالصفر 0 . هذا النص معطى بالبارامتر UART_text .
مثال :

كود:
UART1_Init(4800);                         // initialize UART1 module
Delay_ms(100);
while (1) {
  if (UART1_Data_Ready() == 1) {          // if data is received 
    UART1_Read_Text(output, "OK", 10);    // reads text until 'OK' is found
    UART1_Write_Text(output);             // sends back text 
 }
}

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب عبدالله حجازى ( أعجبته المشاركة )
اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 02-07-2017, 08:03 PM المشاركة 2   
افتراضي


تدريب تمهيدى 1 : تدريب مكتبة UART
هذا التدريب يستعرض تبادل بيانات بسيط من خلال وحدة UART . عندما يستقبل الميكروكونترولر بيانات ، يقوم على الفور بإرسالها عائدة .

كود:
char uart_rd;

void main() {
  UART1_Init(9600);               // Initialize UART module at 9600 bps
  Delay_ms(100);                  // Wait for UART module to stabilize
  
  UART1_Write_Text("Start");
  UART1_Write(10);
  UART1_Write(13);
  
  while (1) {                     // Endless loop
    if (UART1_Data_Ready()) {     // If data is received,
      uart_rd = UART1_Read();     // read the received data,
      UART1_Write(uart_rd);       // and send data via UART
    }
  }
}



تدريب تمهيدى 2 :
لتنفيذ هذا التدريب ببرنامج ISIS يتم جلب العناصر التالية PIC 16F877A و VIRTUAL TERMINAL وتكوين الدائرة كما فى الشكل التالى :




الوحدة الطرفية التخيلية VIRTUAL TERMINAL هى جهاز لمحاكاة الاتصال التسلسلى ولها نفس سلوك إداة النوافذ Windows HyperTerminal . هذا الجهاز يسمح بتحرير خواص الاتصالات مثل : عدد بتات البيانات ، وسرعة النقل ، وعدد بتات النهاية وغيرها . مع ذلك ، فإن الجهاز معد بسرعة إفتراضية 9600 bps وجاهز للاستخدام مع موديول UART .
للتحقق من عمل هذا الموديول يمكن ترجمة ومحاكاة البرنامج التالى :

كود:
 void main (void)
 {
 	// Declaration of variables.
 	char Data;
 	UART1_Init (9600); 	//  initialize UART1 module
	Delay_ms(100);
 	// Transmitting the text: Welcome.
 	UART1_Write_Text ("Welcome to the simulator:");
 	UART1_Write (13); 	// It transmits the ASCII  CR = Crriage return
 	UART1_Write (10); 	// It transmits the ASCII NL=New line
 	// Text is transmitted with key.
 	UART1_Write_Text ("Press a key! ...");
 	UART1_Write (13); 	// It transmits the ASCII  CR = Crriage return
 	UART1_Write (10); 	// It transmits the ASCII NL=New line
 	while (1) // infinite loop.
 	{
 		// The if statement tests whether a data is ready to read.
 		if (UART1_Data_Ready () == 1)
 		{
 		 // It reads the data from the buffer.
 		 Data = UART1_Read ();
 		 // Print text feedback.
 		 UART1_Write_Text ("you pressed the key:");
 		 UART1_Write (Data); 	// received data is transmitted.
 		 UART1_Write (13); 	// It transmits the ASCII  CR = Crriage return
 		 UART1_Write (10); 		// It transmits the ASCII NL=New line
 		}
 	}
 }
أثناء المحاكاة يمكن للمستخدم إرسال بيانات من خلال الوحدة الطرفية التخيلية ومشاهدة رد الفعل الميكروكونترولر PIC .





احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب عبدالله حجازى ( أعجبته المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  
إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 08:17 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025