16‏/05‏/2012

الـ rs232 بالتفصيل



RS232
سوف نتعلم في هذا الدرس إن شاء الله ما يلي 
1- ما هو الـ RS232 ؟
2- العتاد للـ RS232 أو ما يسمى بالـ Hardware .
3- الوثيقة المستخدمة في عملية الاتصال أو ما تسمى بالـ protocol .
4- مفاهيم أساسية Bit Rate & Baud Rate.

5- المحاكاة في برنامج الـ Proteus 7.7 .
6- البرمجة بلغة MikroC Pro .
_____________________________________________________________

1- ما هو الـ RS232 ؟



نشاهد الصورة التالية 



RS232 (Recommended Standard)-232 ports

قبل الخوض بها يجدر بنا أولاً التحدث عن Serial Ports و الذي يعتبر الـ RS232 من ضمنها .

Serial Ports

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

particular asynchronous protocol

و كذلك تتميز بأنها bidirectional أي أنها ترسل و تستقبل في نفس الوقت و في حالة الإرسال و الاستقبال في الوقت نفسه تسمى

full-duplex و لكن تستخدم سلك للإرسال و سلك للاستقبال أما إذا تم الإرسال و الاستقبال بنفس السلك تسمى half-duplex أي تعتبر إرسال و استقبال لكن ليس في نفس الوقت. و بما أنها ترسل بت بت فهي تعتبر خصلة غير مرغوب فيها لكن يميزها أن أسلاكها طويلة و غير مكلفة و كذلك برمجتها سهلة و أيضا آمنة فهذا النوع من الاتصال لا يعرف ما بداخل البيانات أما الـ USB فهي تمتلك برامج متطورة لمعرفة البيانات المرسلة .

و تسمى منافذها بالـ 

COM ports

(communication Ports)



و بهذا ننتهي من القسم الأول 
_____________________________________________________________

2- العتاد للـ RS232 أو ما يسمى بالـ Hardware .

صورة تصف الأطراف


1- Carrier Detect
يحدد ما إذا كان الجهاز متصل بخط حي . 
2- Receive Data
الكمبيوتر يستقبل البيانات المرسلة من الجهاز.
3- Transmit Data
الكمبيوتر يرسل المعلومات للجهاز .
4- Data Terminal Ready
الكمبيوتر يخبر الجهاز انه جاهز لعملية المراسلة .
5- Signal Ground
للتأريض 
6- Data Set Ready
الجهاز يخبر الكمبيوتر بأنه جاهز للمراسلة .
7- Request To Send
الكمبيوتر يخبر الجهاز لو أنه قادر على الإرسال .


8- Clear To Send

الجهاز يخبر الكمبيوتر بأنه يستطيع الإرسال .

9- Ring Indicator

عندما تكون هناك مكالمة صوتية على الخط فإن الجهاز يرسل رنة للكمبيوتر و بدوره الكمبيوتر يتعرف عليها و هذا في التطبيقات الصوتية.

قد لا يهمنا إلا ثلاث أطراف فقط 5 و 3 و 2 .

_____________________________________________________________

3- الوثيقة المستخدمة في عملية الاتصال أو ما تسمى بالـ protocol .

الـ Serial Ports تحتوي على قسم هاردوير مهم يسمى 

Universal Asynchronous Receiver/Transmitter (UART)

و هو عبارة عن شريحة صغيرة (IC)





و هي المسؤولة عن تحويل من Parallel communication (من الكمبيوتر) إلى Serial communication ليتم نقلها على السلك .



ننتقل لجزء مهم و هو



Buffer



هو باختصار ذاكرة تخزين البيانات المرسلة و المستقبلة لفهم مبدأ العمل شاهد الصورة التالية






و كما تعلمنا أن هذا النوع يرسل البيانات بت تلو بت و لذلك سمي متسلسل .



لنتخيل المسألة مسجل الإزاحة أو ما يسمى بالـ shift register يمتلك بايت واحد و المنفذ يرسل بت تلو بت حتى ينتهي البايت بعد ذلك يطلب المنفذ من الـ CPU بايت جديد من خلال أمر المقاطعة أو ما يسمى بالـ interrupt request (IRQ) . في الحقيقة المعالج مشغل جدا و قد لا يستجيب بشكل مباشر لطلب المنفذ ما العمل المنفذ يريد أن يرسل البايت بت تلو بت عن طريق مسجل الإزاحة و المعالج قد لا يستجيب مما قد يسبب تأخير في عملية النقل الحل هو



Buffer



يتم تخزين بايتات في الـ Buffer و الذي سوف يقوم بعملية الـ interrupt request (IRQ) بدلاً من المنفذ و بذلك المنفذ سوف لن يضطر للتأخير لأنه يوجد عنده بايتات في الـ Buffer فعندما ينتهي المنفذ من إرسال آخر بت سوف يكون البايت التالي مخزن في الـ Buffer و الذي سوف ينقل البايت لمسجل الإزاحة و الذي من خلاله يرسل المنفذ البايت بت تلو بت . و كلما كبر حجم الـ Buffer قلت عملية interrupt request (IRQ) و الذي من خلاله يزيد نسبة استجابة المعالج لعملية interrupt request (IRQ) . الآن انتهينا من عملية الإرسال . 

بالنسبة لعملية الاستقبال فهي مشابهة لمبدأ عملية الإرسال. في عملية الاستقبال المنفذ يستقبل البايت بت تلو بت و يضعها في مسجل الإزاحة حتى يكتمل البايت الذي من خلاله يتم إرسال البايت للـ Buffer و من خلال الـ Buffer يتم إرسال البايت للمعالج و عندما يستقبل المنفذ بتات جديدة يرسل interrupt request (IRQ) للمعالج الذي بدوره يجب أن يعالج البيانات بسرعة و هنا تكمن الخطورة عندما لا يستجيب المعالج للمقاطعة مما يسبب ما يسمى بالـ Hardware Overrun Error الذي قد يسبب كتابة بايت جديد على بايت لم يتم معالجته . و الذي يسبب هذه المشكلة صغر ذاكرة الـ Buffer . و بهذا انتهينا من نقطة مهمة جداً حتى إنني قرأت لمؤلف لمذكرة لكيفية تعامل الماتلاب مع المنافذ التسلسلية قال من لم يعرف الـ Buffer في الحقيقة لن يعرف أبداً Serial Communication و بسبب هذه العبارة أطنبت في الذكر عنه .



ننتقل لجزء مهم في عملية النقل . كيف يتم نقل البيانات في السلك ؟! في الحقيقة يجب أن تعرف أن الـ UART يرسل البيانات على شكل chunks قطع أو أجزاء كل قطعة أو جزء يسمى كلمة Word كل كلمة تحتوي على التالي



Start bit,



data bits, 
parity bit,



Stop bits.






Data bits



تمثل البيانات التي سوف نرسلها بالـ ASCII Code



Start bit & Stop bit



واضح مبدأهما و هي لبداية و نهاية عملية إرسال البايت .



Parity bit



و هي عملية فحص البايت إذا كان فيه error أو لا . وهو جزء مهم و الذي يجعلك فعلا تدرك المفاهيم لأنه يعتبر مفهوم من مفاهيم الاتصالات و عندما تدرك المفاهيم النظرية بالمبادئ العملية بهذا تكون مهندس لا يجارى في تخصصه .



هناك نوعان من الـ Parity bit



Odd Parity and Even Parity



و كما يقال بالمثال يتضح المقال



نفترض أننا نريد إرسال البيانات التالية



0000001



لو فرضنا أننا نستخدم Even Parity فإن الـ Even Parity سوف يكون 1 لأنه يجب أن يكون مجموع الآحاد مع بت التصحيح يساوي عدد زوجي من الآحاد و لو استخدمنا Odd Parity يجب أن تكون 0 لكي يكون عدد الآحاد مع بت التصحيح عدد فردي . و بهذا استطعنا ضمان نقل البيانات بشكل صحيح مع بت للتصحيح . عندما يحدث خطأ للأسف في هذا النوع من التصحيح لا يضمن تصحيح البيانات بل يطلب إعادتها فقط . في حين هناك أنواع أخرى من التصحيح تصحح الخطأ بدون طلب إعادة تصحيح .



صورة ختامية






4- مفاهيم أساسية Bit Rate & Baud Rate.



أتينا لجزء مهم في هذا النوع من الاتصال مسألة معدل النقل



Bit Rate



هو عبارة عن معدل نقل البتات في الثانية bps سواءاً كانت أصفار أو آحاد.



Baud Rate



عدد الرموز في الثانية و قد تكون أكثر من بت في الثانية و يقاس بالتردد .



طبعا أكيد لم تفهم لا تستعجل و أكمل القراءة .



الـ Baud Rate قد يساوي Bit Rate عندما ينقل كل بت في الثانية شاهد الصور التالية و الأمثلة






المثال واضح و هو أنه في كل إشارة حاملة تحمل معها 4 بتات فلو كان عندي 1000 إشارة حاملة كم معدل النقل ؟؟ الحل واضح



نأخذ صورة توضيحية أكثر






في هذه الصورة الـ Baud rate يساوي Bit rate هذا في أقل حالة .



نأخذ مثال ثاني






نأخذ صورة أخرى






هنا يبدأ الفرق واضح بين المصطلحين لاحظ أن كل Baud rate يساوي ثلاث بتات



و هكذا عزيزي القارئ تعرف الفرق .



___________________________________________________________



5- المحاكاة في برنامج الـ Proteus 7.7 .



الأدوات الضرورية لعمل المحاكاة



أولاً



RS232






تشبيكها كالتالي






الأداة التي نتأكد من أن برنامجنا يشتغل بعون الله و التي نستطيع من خلالها مراسلة البك






طريقة تشبيكها بالبك






لاحظ البنان 25 و 26 هما المسؤولان عن الـ UART لأن فيهما الـ TX و RX



سوف يكون تشبيك الـ RS232 مع البك في آخر المطاف .



__________________________________________________________



6- البرمجة بلغة MikroC Pro .



أهم جزء و أمتع جزء عالم البرمجة عالم من الخيال .



الأوامر الضرورية



الأمر الأول



UARTx_Init



صيغته





وظيفة هذا الأمر هو تفعيل خاصية الـ UART الذي تحدثنا عنها الرقم 9600 هو الـ baud rate تحدثنا عنه سابقاً و تستطيع تغييره



الـ تعني أنه إذا كان عندك ميكروكنترولر له أكثر من UART فتستطيع التحكم بهن في مثالنا هذا موضوع UART1_Init رقم واحد لأن الميكروكنترولر 16f877 له فقط UART واحد و إذا لم تضع أي رقم سوف يخرج لك error و يجب أن تكون حريص في وضع الرقم لأنه يتعلق بأطراف الميكرونترولر



الأمر الثاني



UARTx_Data_Ready



صيغته







هذا الأمر يختبر ما إذا كان هناك بيانات مرسلة من الجهاز للميكرونترولر أو بمعنى آخر البيانات المستقبلة .هذا الأمر يحتمل قيمتين إما واحد في حال تم استقبال بيانات أو صفر في حال عدم استقبال بيانات .



لاحظ التالي



If (UART1_Data_Ready()==1)



هذه جملة شرطية تقول إذا تم استقبال بيانات من الجهاز لليمكرونترولر اعمل كذا أي أنه يختبر ما إذا كان هناك استقبال بيانات في حال يساوي واحد أو صفر إذا لم يكن هناك استقبال للبيانات (لا تخف إذا لم تفهم الآن فبالمثال يتضح المقال ).



السطر الأخير سوف نتعرف عليه في الأمر التالي



الأمر الثالث



UARTx_Read



صيغته






هذا الأمر يستقبل بايت واحد فقط أي وظيفته استقبال بايت قادم من الجهاز للميكرونترولر في حين الأمر السابق UARTx_Data_Ready



كان يختبر فقط وجود بيانات أم لا . حسنا كيف نستفيد من هذا الأمر ؟ شاهد التالي



receive = UART1_Read()



كلمة receive عبارة عن متغير فقط و يجب أن يكون هذا المتغير من نوع char . و من خلال هذا المتغير اخزن البايت القادم من الجهاز عن طريق هذا الأمر UART1_Read() أي الآن استطيع مثلا لو ارسل حرف أو أو أي حرف من الكمبيوتر للميكرونترولر استطيع أن أعرضه مثلا على شاشة LCD هذا الأمر يستقبل بايت بايت .



الأمر الرابع



UARTx_Write



صيغته






هذا للكتابة على الـ UART أو بمعنى آخر إرسال بيانات من الميكرونترولر إلى الكمبيوتر هذا الأمر يرسل بايت بايت . مثلا لو أردت إرسال حرف ممكن في هذا الأمر لو أردت إرسال حرفين معاً فإن هذا الأمر لا يخولك ذلك . مثلا



كود:
UART1_Write("a")



بهذا الشكل سوف يتم إرسال حرف a



كود:
UART1_Write("aaa")



هنا سوف يخرج لك error لماذا؟ لأن هذا الأمر يرسل بايت واحد فقط و هنا ثلاثة بايتات



الأمر الخامس



UARTx_Write_Text



صيغته






هذا الأمر لإرسال أكثر من بايت دفعة واحدة لو أردت مثلا أن ارسل كلمة hello نكتبها كالتالي




كود:
UART1_Write_Text("hello")



يحتوي على حروف مثلاoutput هذا في حال لو أردت إرسال هذه الكلمة بالضبط لكن لو أردت أن أرسل متغير اسمه




كود:
char output[]="Hi World!"



لو أردت أن ارسل هذا المتغير كالتالي




كود:
UART1_Write_Text(output)



في هذه الحال سوف لن يكتب output بهذه الحروف بل يكتب ما بداخل المتغير و بهذا ننتهي من الأوامر الضرورية في هذا الموضوع .



ننتقل لفهم المبدأ بالمثال 
شاهد الكود التالي

كود:
 

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 } } }

هذا الكود يقول عندما تستقبل يا أيها الميكرونترولر أي بيانات من الكمبيوتر ارجع و ارسلها للكمبيوتر . في هذه الحال سوف نستخدم الأداة التالية لمحاكاة الكمبيوتر 



من خلال هذه الأداة سوف نكتب به حرف و سوف تقوم بارسال هذا الحرف للميكرونترولر و سوف يقوم الميكرونترولر بإعادة إرسال نفس البيانات التي استقبلها



نشاهد الصورة التالية




في الشاشة السوداء هناك كلمة وحرفين كلمة 
Start 
بسبب أنني في بداية الكود قلت للميكرونترولر اكتب هذه الكلمة من خلال الأمر التالي

كود:
UART1_Write_Text("Start");
كذلك قلت له اجعل المؤشر ينتقل لسطر جديد من خلال الأمر التالي

كود:
UART1_Write(10);
UART1_Write(13);
أو ما يسمى بلغة السي
n\
أي سطر جديد بعدها انتظر يا أيها الميكرونترولر بأن يقوم الشخص بكتابة أي حرف أو رقم في الشاشة السوداء بعدها اعد يا أيها aaالميكرونترولر ما كتبه هذا الشخص في الشاشة السوداء لاحظ في الصورة السابقة هناك حرفين
الحرف الأول أنا كتبته في الشاشة السوداء الحرف الثاني الميكرونترولر قام بإرسال ما تم كتابته و بهذا يتضح لك معنى الكود السابق و بهذا كذلك استطعت أن تكتب و تقرأ من و إلى الميكرونترولر عن طريق



Serial ports



(COM1, COM2, COM3, …etc)



قد يسأل سائل أين الـ RS232



أين هي في المثال ؟؟ أقول له رويدك يا أخ العرب هذه الأداة فقط لاختبار الكود في الحقيقة الميكروسي برو يوفر لك أداة تستطيع من خلالها التحقق من الكود و من التشبيك من خلال الأداة التالية



Tools>>USART Terminal






هنا يجب أن تعرف أن هذه الأداة تحتاج منفذ COM1 و أن الـ RS232 في دائرة البروتيس تحتاج منفذ COM2 لكي يتم التخاطب بينهما



في الحقيقة نحتاج لبرنامج يقوم بمحاكاة المنافذ أي ينشئ لنا منفذين منفذ لأداة الميكروسي و الآخر للـ اراس في البروتيس برنامجنا هو



Virtual Serial Ports Driver 6.9



شاهد الصور التالية









و بهذا البرنامج تم إنشاء منفذين الأول نجعله للميكروسي و الآخر للـ RS232 في البروتيس



للـتأكد من وجود المنفذين الذهاب لمنافذ الجهاز سوف تشاهد الصورة التالية






الآن أتى الوقت الحقيقي للمتعة و الإثارة نشبك الدائرة كالتالي






نضغط على الـ RS232 ضغطتان يتم ضبط الإعدادت كما تشاهد و أنت مهيأ الآن لمعرفة المصطلحات الموجودة في الإعدادات شاهد الصورة التالية






بعد ذلك نذهب للميكروسي برو لضبط الإعدادات و قبل عملية الإرسال تأكد أن البروتيس في وضع المحاكاة أي اضغط زر run بعدها شاهد الصورة و عمل عملية الإرسال سوف تلاحظ عملية الإستقبال






المراجع



1






2






3



ملف المساعدة في الميكروسي برو



4






5






أخيرا



احمد الله تعالى الذي أعانني على إتمام هذا الدرس .



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



هذا العمل كلفني مدة يومين من العمل و القراءة .



إهداء



لكل مسلم يحاول النهوض بأمته



حقوق النسخ محفوظة لكل مسلم



يجوز طبعه و كتابته و تصويره و نشره بكل الطرق الحديثة و يمنع استخدامه لإغراض تجارية أو نسب هذا العمل لغير كاتبه



تحياتي للجميع



أخوكم



Eng_Bandar



شعارنا



اجعلها ميسرة


المصدر :

اقرا المزيد: http://www.dbaasco.com/vb/showthread.php?t=5029#ixzz1v3EUCmiT

ليست هناك تعليقات:

إرسال تعليق

اكتب تعليقك هنا
هام : لا تكتب الالفاظ السيئة اوالكلام الفاحش