التجربة التاسعه :- الاتصال التسلسلى الغير متزامن Asynchronous serial communication

الوصف(Description):-

يمتلك الكثير من الميكروكونترولر PIC أجهزة hardware  ارسال واستقبال عامة غير متزامنة USART ضمن بنائها الداخلى والتى تسمح بالاتصال على مدى واسع بالأجهزة التسلسلية كذاكرات الشرائح ووحدات العرض LCD والكومبيوتر الشخصى ..ألخ .


الوحدة (الموديول) USART  لها نظامان للعمل :
النظام المتزامن synchronous: يحتاج لنبضات ساعة للتزامن بين المرسل والمستقبل . (اي خط لنبضا ت ا لساعه وخط للبيانات)
النظام الغير متزامن asynchronous : لا يحتاج لنبضات ساعة للتزامن بين المرسل والمستقبل . وهذا النظام هو الأكثر شيوعا لذلك سوف يتم التركيز عليه ونقوم بإنشاء ربط للبيانات التسلسلية بين الميكروكونترولر PIC وبين الكومبيوتر الشخصى(البيانات والتزامن سوف يكون علي خط واحد)


المعلومات النظرية المطلوبة  ( Required Theory)


تستخدم الاتصالات التسلسلية فى النظم المبنية على أساس الميكروكونترولر ويرجع ذلك في معظمه إلى ندرة أطراف المداخل / المخارج المتاحة . وبالاضافة الى إمكانية الاتصالات لمسافات طويلة فإن نقل البيانات تسلسليا هو الأكثر بساطة وفعالة من حيث التكلفة لأن توصيلات الأجهزة المطلوبة لربط البيانات يمكن أن تخفض إلى ثلاثة , هى وصلة الإرسال Tx ووصلة الاستقبال Rx والأرضى المشترك Gnd .
هناك نوعان مختلفان من الاتصالات التسلسلية : النوع المتزامن والنوع الغير المتزامن. ويتمثل التحدي الرئيسي في وجود صلة (ربط)  للبيانات التسلسلية هو الحفاظ على التزامن بين المرسل والمستقبل .
يستخدم الأسلوب الغير متزامن بروتوكول ذو خانة بدء start bit وخانة إيقاف stop bit للتزامن بين طرفى (نهايتى) الوصلة .
يتم إرسال كل بايت لحرف character byte  في إطار يتألف من خانة بدء start bit  يليها خانات الحرف character bits  يليها (اختياريا) خانة التماثل (التطابق)  parity bit ويتم الانتهاء بخانة توقف واحدة أو أكثر stop bits.
لابد من تهيئة (إعداد) كل من المرسل والمستقبل بنفس معدل البيانات وبنفس عدد خانات البيانات وبنفس عدد خانات التوقف.
في حالة الخمول(السكون )  idle condition يكون خرج الارسال فى الحالة المنطقية المرتفعة .عندما يكون المرسل على استعداد لإرسال بايت الحرف فإنه يشير (يعطى إشارة) إلى المستقبل عن طريق سحب خط الارسال للحالة المنخفضة لفترة زمنية واحدة لنبضات الساعة . هذا هو بت (خانة) البدء start bit  وهو يخبر المستقبل بأن القادم هو إطار بايت البيانات . يقوم المستقبل بقراءة عدد خانات الحرف المتوقع حسب البروتوكول المعتمد (والذى تم التهيئة له من قبل) حتى يتم سحب الخط إلى المنطق المرتفع بواسطة المرسل (يمثل بت توقف واحد أو أكثر) ويكون هذا هو نهاية الإطار. يتم تكرار العملية برمتها في كل مرة يكون المرسل جاهزا لإرسال بايت لحرف.
ويسمى هذا النوع من الارسال التسلسلى بالغير متوامن لأن المستقبل يقوم بعمل إعادة تزامن لنفسه مع المرسل في كل مرة يتم إرسال البيانات باستخدام بت البداية start bit. ومع ذلك، فإنه داخل كل إطار يكون الطرفين متزامنين .
من ناحية أخرى، فإنه فى الاتصال التسلسلى المتزامن يتم إرسال الحروف فى مجموعات أو كتل  blocks مع عدم وجود خانات إطار تحيط بها . تتم مزامنة الارسال والاستقبال بخط منفصل لنبضات الساعة أو في بعض الحالات يتم تضمين إشارة نبضات الساعة مع الحروف المرسلة .
في كلا النوعين من الاتصالات التسلسلية،يعرف معدل البيانات المرسلة والمستقبلة بمعدل البود baud rate  ( عدد النبضات فى الثانية ).
على سبيل المثال موديول USART الموجود داخل الميكروكونترولر PIC16F88 يعتمد كلا النوعين من الاتصالات التسلسلية ولكنه أكثر ملائمة للطريقة الغير متزامن asynchronous .
فى النظام الغير متزامن يعمل الطرف RB5 كمخرج إرسال TX ويعمل الطرف RB2 كمدخل استقبال RX .
ترسل بايت البيانات كسلسلة نصية مكونة من 10 خانات : خانة البدء start bi و 8 خانات بيانات
eight data bits  وخانة إيقاف stop bit كمل فى الشكل التالى :
المنفذ التسلسلى بالكومبيوتر الشخصى (والمعروف باسم COM port) يستخدم النظام القياسى  RS232-C للاتصال التسلسلى . والذى يحدد خواص الكهربائية والميكانيكية والإشارات والخطوات المتبعة للربط عن طريق الاتصال التسلسلى .
المنطق المرتفع فى RS232-C هو إشارة بجهد فى المدى -3 V to -15V ( عمليا -12V) والمنطق المنخفض يكون فى المدى +3 V to +15 V (عمليا +12V) . أى أنه لا يماثل المستويات المنطقية للميكروكونترولر PIC لأنه فى  RS232-C الحالة المرتفعة سالبة والحالة المنطقية المنخفضة موجبة .
الجدول التالى يبين التوصيلات القياسية لنظام RS232-C للسوكيتات 25-pin و9-pin و RJ-45  .

هنا سوف نتناول فقط أقل توصيلات ممكنة بين الميكروكونترولر والكومبيوتر الشخصى باستخدام خطوط الإشارات TX, RX, GND فقط .

سوف نستخدم النظام الغير متزامن لعمل اتصال مع المنفذ التسلسلى بالكومبيوتر الشخصى عن طريق RS232-C .
نظرا لأن الميكروكونترولر PIC16F88A يمتلك بالفعل ضمكن بنائه الداخلى الموديول USART والذى يعتمد النظام الغير متزامن للاتصال التسلسلى لذلك كل ما هو مطلوب وحدة خارجية لإزاحة المستوى لترجمة الإشارات ذات المستوى TTL إلى مستويات النظام RS232-C والعكس بالعكس .
يمكن تحقيق ذلك باستخدام الشريحة MAX232 المصنعة بمعرفة شركة Maxim .تحتاج الشريحة إلى قليل من المكثفات الخارجية لاستخدامها فى عملية مضخات الشحن الداخلية لكى تولد الجهود +12V و -12V المطلوبة للاتصال عن طريق RS232-C .
في هذه التجربه سوف نستعرض كيفيه التعامل مع الموديول USARTبطرقتين
الطريقه الاولي:- طريقه التوصيل الوهمي مع البروتوس وبرنامج HyperTerminal
الطريقه الثانيه :- طريقه التوصيل الفعلي وربط الميكرو بالسي شارب

الطريقة البسيطة لارسال واستقبال بيانتات من خلال المنفذ التسلسلى للكومبيوتر الشخصى باستخدام برنامج  HyperTerminal الموجود ضمن نظام الوندوز عن طريق :
Start → Menu → Programs → Accessories → Communications→Hyperterminal
حيث يمكنك إنشاء اتصال مع المنفذ التسلسلى (COM1 على سبيل المثال) واختيار معدل البود baud rate وعدد الخانات number of bits وتحديد نوع التطابق parity ..ألخ .
عند إتمام الاتصال فأن أى حرف سوف تكتبه سوف يرسل (ككود أسكى) من خلال المنفذ التسلسلى . الحروف المستقبلة سوف يتم عرضها على الشاشة أيضا

تدريب : إرسال نص

توصيل COM مع الوحدة الطرفية التخيلية

1- توصيل COMPIM بالوحدهالطرفية بالبروتوس


توصيل العنصرالموجود بكتبه العناصر للبروتوس  COMPIM (COM port Physical Interface) ونختار الوحدة الطرفية لنظام المحاكاة ولإرفاق الوحدة الطرفية لنظام المحاكاة المستهدف :

اختار أيقونة المقاييس المتعددة Multimeter ومنها إلتقط (إجلب) الوحدة الطرفية التخيليةVIRTUAL TERMINAL وضعها فى المخطط . وصل بأسلاك (بخطوط) كل من الأطراف RX و TX إلى كل من خطوط الإرسال والاستقبال للنظام المختبر . RX هو الدخل و TX هو الخرج . إذا كان النظام يستخدم المصافحة بالاجهزة hardware handshaking وصل الأطراف RTS و CTS بالخطوط الملائمة . RTSRequest to Send " " هو الخرج ويشير (يعطى إشارة) على أن الوحدة الطرفية جاهزة لاستقبال البيانات , بينما CTS " Clear to Send " هو الدخل والذى يجب أن يكون مرتفعا ( أو غيرموصل ويسمى عائم floating ) قبل أن تقوم الوحدة الطرفية بالارسال . (كما بالشكل السابق)






 إبدأ المحاكاة بالطريقة المعتادة . تعرض الوحدة الطرفية البيانات القادمة بمجرد ما تستقبلها , لإرسال حرف إلى النظام تأكد وجود الوحدة الطرفية وانها فعالة عندئذ اكتب النص المطلوب بلوح مفاتيح الكومبيوتر الشخصى .بمجرد بدء المحاكاة تتاح وظائف إظافية عن طريق قوائم منبثقة والتى يمكن عرضها بالنقر بالزر الأيمن على النافذة المنبثقة . هذه القائمة تمكن من إيقاف العرض مؤقتا pause ونسخ ولصق النص إلى ومن الحافظة clipboard .




2- تشغيل برنامج HyperTerminal 


نشغيل برنامج HyperTerminal وتسمية للتوصيل وليكن TEST الموجود ضمن نظام الوندوز عن طريق :



tart → Menu → Programs → Accessories → Communications→Hyperterminal


وعمل الاعدادت الموجوده بالصور التاليه






لتحديد باقى الخواص من القائمة File اختار الخواص Properties
تظهر لك قائمة الخواص أنقر على مفتاحٍsettingثم انقر علي مفتاحASCII Setupوضع علامه عليEcho typedكما بالشكل

3-عمل منفذ وهمي




عمل منفذ وهمي يمكن تنفيذ ذلك برمجيا عن طريق البرنامج المعروف باسمVirtual Serial Ports Driver درايفر المنافذ المتسلسلة التخيلية ) . بعد تنصيب البرنامج وتشغيله نقوم بإنشاء منفذين متسلسلين تخيليين يمكن عن طريقهما تحقيق الاتصال المطلوب كما فى الشكل حيث يتم إضافة زوج Add pair من المنافذ التخيلية ولتكن COM3 و COM4 . 


أحد المنفذين يمثل الكومبيوتر وليكنcom3ويتم تحديد ذلك فى برنامجHyperTerminal  كما يلى :

المنفذ الآخرCom4  ويمثل برنامج المحاكاةCOMPIMويتم ذلك بالضغط علي هذا العنصر كليك يمين واختيارEdit Properties  كما بالصوره




ويتم ضبط منفذ COM ومعدل البود الطبيعى لعمل موائمة بين الجهاز المرتبط بالكومبيوتر . الضبط الافتراضى للمنفذ COM1 هو    2400 baudولكننا سوف نغيرهم الي Com4 و 9600 


فى التطبيقات الحقيقية سوف يتم استبدال VTERM بالوحدة المركزية CPU أو بجهاز UART بحيث يكون النظام المحاكى يتفاعل مع الاجهزة hardware للعالم الحقيقى. 




شغل برنامج المحاكاة وتأكد من تمام الاتصال بكتابة نص على نافذة برنامج HyperTerminal فتظهر لك النتيجة على الوحدة الطرفية

سوف نستخدم المترجمMikroC Pro for PICهذا المترجم يمدنا بمكتبة باسمUARTوالتى تعتمد نظام الاتصال التسلسلى الغير متزامن فى النظام المزدوج الكاملfull duplex الارسال والاستقبال فى نفس الوقت وهذا يؤدى إلى سهولة البرمجة بشكل كبير .
على سبيل المثال إذا رغبت فى تهيئة الموديول UARTالموجود بالميكروكونترولرPIC16F88للبدء بمعدل نبضات قدره 9600 نبضة فى الثانية فقط كل ما تحتاجه هو كتابة الدالةUART1_Init(9600)البرنامج التالى يقوم بإنشاء اتصال تسلسلى بالنظام الغير متزامن بين الميكروكونترولر PIC16F88A والكومبيوتر الشخصىيقوم الميكروكونترولر بارسال الرسالةType in a Numberأكتب عدد" والتى تعرض فى نافذة برنامجالبروتوس من خلال التطبيقVIRTUAL TERMINALالموجود بهذا البرنامج كما بالشكل

البرنامج (Software)



void newline(){
 UART1_Write(13);
UART1_Write(10);
}
void main() {
 unsigned char MyError, Temp;
 CMCON = 7;      
 TRISB = 0b00000100;
 UART1_Init(9600);
 Delay_ms(100);
 UART1_Write_Text("Testing UART! ");
 newline();
 do {
  UART1_Write_Text("Type in a Number: ");
  while(!UART1_Data_Ready());
  Temp = UART1_Read();
  newline();
  UART1_Write_Text("You entered: ");
  UART1_Write(Temp);
  newline();
 } while(1);
} 

شرح البرنامج

النتائج



هذه الطريقه تحتاج الي عنصرين اساسيين وهما
1-   هارد وير (MAX232)

2-    سوفت وير وسوف نستخدم هنا سي شارب وكيفيه ربطه بالدائره

مخطط الدائره

يتم توصيل الدائره كما يلي مع الحرص عند توصيل الدائره عمليا يكون علي النحو التالي واهم شئ في التوصيل هي الاعتناء جيدا بطرفي TX و RXوتوصيلهم كما بالشكل  مع اطراف الميكر المكتوب عليها TX و RX كما  بالشكل التالي

اولا السي شاربC#


لكي نفهم كيفيه عمل البرنامج السي شارب انظر الي الفيديو الخاص بذلك داخل المشروع

شرح  اكواد السي شارب


استدعاء مكتبه تعريف البورتات الخاصه بالسي شارب
امر تعريف رقم البورت المستخدم والسرعه الارسال ويجب ملاحظه شئ مهم وهو عندما نجرب هذا المشروع علي البروتوس نجعل ال com3 في هذا الامر اما داخل البروتوس يتم ضبط ال com 4 كما في بالشكل




مع ضبط برنامج البورت الوهمي كما بالصوره لكي يعمل البرنامج مع البروتوس



اما في حاله التوصيل العملي فيتم اعداد الامر السابق علي com1توصيل الدائره كما سبق
 هذه الاوامر الخاصه بالازرار الارقام الامر الاول خاص بفتح البورت الامر الثاني خاص ارسال اسم  الزر ارساله علي  البورت اما الامر الثالث فهو خاص بغلق البورت
هذه الاوامر خاصه بزرsendالخاص بارسال ما يكتب في صندوق الرساله علي البورت فالامر الاول خاص بفتح البورت الامر الثاني خاص ارسال ما يكتب في صندوق الرساله و ارساله علي  البورت اما الامر الثالث فهو خاص بغلق البورت

ثانيا : برنامج الميكروسي

char datawrite ;
 void main() {
  TRISB = 0b00000100; 
  TRISA = 0X00 ; //
  ANSEL = 0b00000000;
    PORTb=0XFF ;
   PORTA=0XFF ;
Delay_ms(1000);
UART1_Init(9600);
  Delay_ms(100);
     while(1){
      if (UART1_Data_Ready())
      {
      datawrite = UART1_Read();
         switch (datawrite)
          {
case  '0': PORTb.f0=0;PORTb.f1=0;PORTb.f3=0;PORTb.f4=0;PORTa.f0=0;PORTb.f7=0;PORTa.f1=1;break;
case  '1': PORTb.f0=1;PORTb.f1=0;PORTb.f3=0;PORTb.f4=1;PORTa.f0=1;PORTb.f7=1;PORTa.f1=1;break;
case  '2': PORTb.f0=0;PORTb.f1=0;PORTb.f3=1;PORTb.f4=0;PORTa.f0=0;PORTb.f7=1;PORTa.f1=0;break;
case  '3': PORTb.f0=0;PORTb.f1=0;PORTb.f3=0;PORTb.f4=0;PORTa.f0=1;PORTb.f7=1;PORTa.f1=0;break;
case  '4': PORTb.f0=1;PORTb.f1=0;PORTb.f3=0;PORTb.f4=1;PORTa.f0=1;PORTb.f7=0;PORTa.f1=0;break;
case  '5': PORTb.f0=0;PORTb.f1=1;PORTb.f3=0;PORTb.f4=0;PORTa.f0=1;PORTb.f7=0;PORTa.f1=0;break;
case  '6': PORTb.f0=0;PORTb.f1=1;PORTb.f3=0;PORTb.f4=0;PORTa.f0=0;PORTb.f7=0;PORTa.f1=0;break;
case  '7': PORTb.f0=0;PORTb.f1=0;PORTb.f3=0;PORTb.f4=1;PORTa.f0=1;PORTb.f7=1;PORTa.f1=1;break;
case  '8': PORTb.f0=0;PORTb.f1=0;PORTb.f3=0;PORTb.f4=0;PORTa.f0=0;PORTb.f7=0;PORTa.f1=0;break;
case  '9': PORTb.f0=0;PORTb.f1=0;PORTb.f3=0;PORTb.f4=0;PORTa.f0=1;PORTb.f7=0;PORTa.f1=0;break;
case  'A': PORTb.f0=0;PORTb.f1=0;PORTb.f3=0;PORTb.f4=1;PORTa.f0=0;PORTb.f7=0;PORTa.f1=0;break;
case  'B': PORTb.f0=1;PORTb.f1=1;PORTb.f3=0;PORTb.f4=0;PORTa.f0=0;PORTb.f7=0;PORTa.f1=0;break;
case  'C': PORTb.f0=0;PORTb.f1=1;PORTb.f3=1;PORTb.f4=0;PORTa.f0=0;PORTb.f7=0;PORTa.f1=1;break;
case  'D': PORTb.f0=1;PORTb.f1=0;PORTb.f3=0;PORTb.f4=0;PORTa.f0=0;PORTb.f7=1;PORTa.f1=0;break;
case  'E': PORTb.f0=0;PORTb.f1=1;PORTb.f3=1;PORTb.f4=0;PORTa.f0=0;PORTb.f7=0;PORTa.f1=0;break;
case  'F': PORTb.f0=0;PORTb.f1=1;PORTb.f3=1;PORTb.f4=1;PORTa.f0=0;PORTb.f7=0;PORTa.f1=0;break;        
  }} }
   }

شرح البرنامج


بدء تهيئة موديولUART1بمعدل بود9600ثم تأخير زمنى 100 ملى ثانية حتى تستقر التهيئة  .

اختبار جاهزية UARTلقراءة البيانات فإن كانت البيانات جاهزة يتحق الشرط ويتم تنفيذ الاوامر  الخاصه بهذا الشرط
قراءه ما يتم ارساله الي الميكرو من الكمبيوتر وحفظه داخل المتغيرdatawrite

امر سوتش وتم شرحه من قبل علي حسب قيمه المتغير سوف يقفز البرنامج لينفذ الحاله المطابقه للمتغير فمثلا لو قيمه المتغير بواحد فينفذ البرنامج الاوامر


وذلك لإضائه السفن سجمت ليعبر عن الرقم واحد مع ملاحظه اننا هنا اضررنا لكتابه  هذا الامر بالشكل السابق للأننا  لم نتمكن من عمل مسك للأرقام حيث ان هذا المسك الذي تم استخدامه في التجربه السادسه  كان سهلا للأننا كنا نتعامل مع البورت كاما اما هنا فالبور B سوف لا نتمكن من استخدامه بالكامل لاننا مستخدمين منه طرفين لعمليه التوصيل بالدائره المتكامله MAX232


فيديو التجربة

هناك تعليق واحد :

  1. لو سمحت ممكن صورة عن طريقة توصيل المنفذ التسلسلي rs232 على برنامج LABVIEW من أجل ارسال واستقبال البيانات علما أنني أريد ربطها مع PROTEUS

    ردحذف