# كيفية ربط الكمبيوتر بالميكروكنترولر عن طريق السيريال بورت وتصميم interface بلغتي Java و c#



## طه عمارة (12 فبراير 2013)

*بسم الله الرحمن الرحيم
​ان شاء الله في هذا الموضوع سأتكلم عن كيفية ربط الكمبيوتر بالميكروكنترولر عن طريق برتوكول السيريال , وكيفية التحكم به إرسالا و استقبالا, وكذلك سنتعلم سويا كيفية عمل برنامج "interface" بالجافا و السي شارب وهذا ما نتكلم عنه في نهاية الموضوع وهذه هي أهدف الموضوع .
**المقدمة​• ماذا نعني بكلمة برتوكول؟
البرتوكول"protocol" : هو إتفاقية بين نقطتين أو أكثر يتم على أساسها التخاطب و التعامل – إرسالا أو إستقبالا للبيانات – بينهم .
مثال ذلك :-
USB , SErail, Parallel , SPI , I2C , HTTP, PS/2,…etc))
لكل واحد من تلك البرتوكولات استخدام معين في مكان معين , و لكن يوجد منها من يؤدي تقريبا نفس الاستخدام الذي نحن بصدده و هما USB, **SErail**, ومن هنا نأتي إلى سؤال .
• ما الفرق بينهما؟ و لماذا يلجأ الكثير إلى إستخدام ال **SErail**؟
إجابة الشق الأول من السؤال مبين في الجدول التالى بإختصار.



​


ملاحظة: آخر جزء من المقارنة " "Hot Swapable :يعنى عند حدوث اي تغيير لا نحتاج الى اعادة تشغيل النظام مثال ذلك كنا في الماضي اذا خلعنا سوكيت الفارة "PS/2" كنا نحتاج الي اعادة التشغيل لتفعيلها من جديد اما في USB فلا.
نأتئ إلى إجابة الشق الثاني من السؤال لماذا يلجأ الكثير إلي استخدام ال **SErail**بدلا من USB بالرغم من كل المزايا الموضحة في الجدول الا ان لل USB عيب في صعوبة برمجة البرنامج "Interface" المثبت جه الكمبيوتر المنوط به التعامل مع ال USB Port استقبالا و ارسال من خلاله . وكذلك لسبب آخر هو ان معظم الحساسات و كثير من " wireless communication modules" مثل Bluetooth,xbee,wifi,..etc وكذلك بعض بطاقات ال cncيجب التعامل معها بهذا البرتوكول "مع العلم ان منها من ينزل السوق بنسختين لل **SErail**, USB مثل xbee module" .

• إذا كيف يعمل ال **SErail **protocol ؟
مثال :- لو فرضا اني اريد ان ارسل حرف "A" من الميكرو الى الكمبيوتر عبر المنفذ التسلسلي"**SErail** port" فماذا يحدث :-
1- يتم ارسال 1 بت "start bit" لتنبيه المستقبل لاستقبال البيانات
2- يتم ارسال ال 8 بت " 1100101" المكافئة لكود ال acii للحرف "A"
3- يوجد 1 بت اختيارية اسمها parity bit تستخدم لتصححيح الاخطاء
4- يتم في النهاية ارسال ا بت "stop bit " عادةا تكون بعرض نبضة و نصف او نبضة او نبضتين



​




بعد شرحنا للبرتوكول يجب ان نعرف ان لبرتوكول **SErail**عدة تشكيلات "configurations" موضحة في الجدول التالي منها تشكيلات جاءت لتحسين العيوب الموجودة في الجدول السابق:-



​


ولكن ما يهمنا منها و المشهور ايضا هي Uart,RS232 :-
الفرق بينهما في كيفية تمثيل الحالة المنطقية كفولت و الجدول التالي يبين ان Uart تتعامل بمنطق TTL.



​


من المنطقي جدا بعد رؤيتنا للجدول أن التشكيلة "configuration " المستخدمة في عالم الميكروكنترولر هي ال UART لان الميكرو كونترولر يعمل بنفس منطقها TTL.


توجد تشكيلتان :-
* الاولى هيuart "universal asynchronous receiver transmitter"
تنقل البيانات "bits" بدون نبضات "clock "
* اما التشيكلة الثانية فهي usart "universal synchronous asynchronous receiver transmitter"
تنقل البيانات "bits" بنبضات "clock " او بدونها وهذا المطبق في معظم الميكروكنترولر مثل pic
فمثلا في pic 16f877a نختار الوضع من خلال ال SYNC bit الموجودة في TXSTA register
SYNC: USART Mode Select bit
1= Synchronous mode
0= Asynchronous mode




​


>>> في حالة ال Synchronous mode يكون الطرف RC7 طرف البيانات "DATA" و RC6 طرف النبضات التي تولد داخل ال PIC "ClK"

>>> في حالة ال Asynchronous mode يكون الطرف RC7 طرف الاستقبال للبيانات "RX" و RC6 طرف الارسال للبيانات "TX"

ملاخطة مهمة في حالة Synchronous mode يكون نوع الاتصال half duplex"لا يجوز له ان يرسل و ستقبل في نفس الوقت"
لانه لا يوجد الا طرف واحد للبيانات
وفي حالة Asynchronous modeيكون نوع الاتصال full duplex "يرسل و يستقبل في نفس الوقت لان طرف الاستقبال غير طرف الارسال "
طبعا سيكون عملنا ان شاء الله علي ال Asynchronous mode .



************************************************** *****

الجانب التطبيقي​
لو انك ستسخدم كمبيوتر شخصى فستجد به المنفذ التسلسلي "**SErail** port "








ملاحظة كل ما يهمنا هو ثلاثة اطراف فقط 2و3و5 ال ground ,RX,TX​
1- اي نوع من انواع ال Pic الداعمة لل uart وليكن مثلا pic 16f877a
2- الدائرة المتكاملة max232 للتحويل من ال uart لل rs232 لان الكمبيوتر يتعامله به.
3- 4 مكثف 1uf و ليدات و مقاومات "في الرسمة استخدم مكثفات 10uf لكن في الداتا شيت لل max232 استخدم 1uf"
4- Rs232 connector
5- Rs232 female socket المتصل بال max 232
نكون الدائرة كالشكل التالي



​


اما لو انك تمتلك لاب توب -الانواع الجديدة منه ليس بها المنفذ التسلسلي- فما الحل؟
امامك حلان يؤدون نفس الغرض ألا و هو usb to **SErail**converter :-
الحل الاول :
ان تشتري الدائرة المتكاملة FT232BL "USB to UART (USB to *
*SErail ** 
35جنية مصري و توصله كالشكل التالي.
توصل بال pic مباشرة دون استخدام max232 لانها تتعامل بال TTl



​

الحل الثاني :
ان تستخدم نفس الرسمة السابقة في الكمبيوتر الشخصي الفرق الوحيد اننا سنستبدل ال rs232 connector
ب USB2 to **SErail **RS232 Converter Cable - 40 جنية مصري- وله driver خاص به يجب تثبيته و شكله كالتالي.
الطرف الusb يوصل بالكمبيوتر و الطرف الاخر بال max232 female socket








***********​ملاحظة يوجد max232 module جاهز يوصل بالpic مباشرة ب 35 جنية مصري وتصله بال rs232 connector مباشرة و الطرف الاخر في الكمبيوتر او توصله بال USB2 to **SErail **RS232 Converter Cable و الطرف الاخر في منفذ ال usb في اللاب توب













************************************************** *****
رسمة مختصرة للتوضيح 







التكملة ان شاء الله في التعليق القادم​

*

​


----------



## طه عمارة (12 فبراير 2013)

*بسم الله الرحمن الرحيم​
نبدأ بمثال:

عندما نرسل قيمه 1 نضئ ليد على portd.b1و لو ارسلنا 0 نطفئها .

* 

```
unsigned short value;  void main() {       TRISD=0X00; PORTD=0; UART1_Init(9600);     // Initialize USART module )  // 8 bit, 19200 baud rate, no parity bit)   while (1) {         if (UART1_Data_Ready()) {  // If data has been received     value = UART1_Read();     // read it      PORTD.b1=value; }// end if }//end while }//end main
```


​****************************​*نوصل الدائرة كما تكلمنا من قبل .​*نتكلم الآن البرنامج المثبت علي الكمبيوتر :-​ قبل كل شيء يجب ضبط اعدادات الويندوز للتعامل مع البورت و توضحه الصورة التالي​ 


​

هذه الصورة توضح لمن سيعمل على usb to rs232 converter cabel وان شاء الله لن يكون الاختلاف كبيرة في الاعدادت اذا كنت تمتك كمبيوتر يحتوي على منفذ تسلسلي.​ 
بعد الضبط يبقى لنا نرسل البيانات من الكمبيوتر الي ال pic كيف ؟​يوجد في برامج جاهزة لعمل "interface" مع السيريال بورت مثل hyper terminal
و teraterm و real term و هذا ما افضله
و نضبط اعدادات ال real term كما في الشكلين التاليين:-​ 




 لابد ان يكون ال baud rate المكتوب في كود الميكروسي = الموجود في اعدادات البورت في الويندوز = المختارة في برنامج ال real term



​
*​*
*
لعمل simulation في برنامج ال proteus

للعمل علي السيريال بورت من خلال ال proteus لعمل simulation للبرنامج المذكور سابقاو كذلك لمن لا يريد ان يشتري كل الادوات السابقة 

*virtual ****** port and proteus - YouTube
*​ 

 ان شاء الله في التعليق القادم نبدأ باستخدام الجافا
* 






*​

​​



​


----------



## طه عمارة (12 فبراير 2013)

*بسم الله الرحمن الرحيم​ان شاء الله سنبدأ الان في الاعداد لعمل برنامج يتعمل مع السيريال بورت ارسالا و استقبالا بلغة الجافا :-
البرامج المستخدمة ووظيفة كل واحد منها مبين في الصورة التالية :-




الرسمة التالية تبين اجزاء ال jdk :-
Jdk= jre + compiler
Jre=libraries +jvm





ملاحظة مجموعة ملفات بصيفة .class "ملف الاصفار و الوحايد" مع باقي اجزاء ملفات المشروع تكون ملف بصيغة .jar الصيغة القابلة للتنفيذ"executable " في الجافا.
يبقى لنا في المقدمة عن الجافا حاجة واحدة و هيا تعتبر اهم ميزة في الجافا إلا و انها لا تعتمد علي منصة التشغيل "platform" – منصة التشغيل في علوم الحاسب تكافئ معالج "processor" + نظام تشغيل "operating system" –
باختصار انك تكتب كود و تحوله الي ملف بصيغة .jar هذه الملف يمكن لك ان تشغله علي لينكس او ماك او اي نظام تشغيل
و المسئول عن ذلك ال jvm فان لكل منصة تشغيل jvm خاصة بها او بالاحرى لكل منصة تشغيل jdk خاصة بها .




ان شاء الله سنعمل علي jdk-7 SE
للتحميل من هنا
http://www.oracle.com/technetwork/ja...s-1880260.html




وكذلك سنعمل على netbeans
http://netbeans.org/downloads/
نحمل الاصدار الخاص ب SE 77mb
ملاحظة يتم تثبيت ال Jdk اولا ثن تثبيت ال

و ان شاء الله سيكون التصميم كالتالي:-








* 


​


----------



## طه عمارة (12 فبراير 2013)

بسم الله الرحمن الرحيم​
*التكملة​*










​



​

و ان شاء الله الفديو شرح التطبيق و لا تنسوا الجزء الموجود في ال description في اليوتيوب به الملفات و البرامج المطلوبة ...


*How to make a java program sends data from PC to PIC via ****** port ? - YouTube*​
في التعليق القادم سنكمل جزء الاستقبال من البيك للكمبيوتر 

​


----------



## طه عمارة (12 فبراير 2013)

*بسم الله الرحمن الرحيم​*

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

*How to make a java program receives data from PIC to PC via Serial Port ? - YouTube*​


----------



## طه عمارة (12 فبراير 2013)

*بسم الله الرحمن الرحيم *​
بعدما وفقنا الله و انجزنا مهمتنا و هي برمجة "interface" يتعامل مع ال srial port ارسالا و استقبالا من ال PIC بلغة الجافا , الآن سنعيد عمله بلغة السي شارب 
و ان شاء الله ستجدون ان الموضوع في السي شارب اسهل بكثيررررررر من الجافا
اولا كما اعتدنا ان نبدأ بمقدمة -نظري- تعريفية باللغة :-
لكن قبل البدء اود ان اقول نصيحة و اعتقد انها مهمة جدا . 
لاحتراف مجال الميكرو كنترولر لابد ان تكون ملما بمجالين هما البرمجة و الالكترونيات, البرمجة عادة تكون بالسي او ما تسمي بال" embeded c" كال miKro c فنصيحة مني انك لابد ان *تحترف* احدي لغات البرمجة لتزويد مهارتك في برمجة الميكروكنترولر وهذا عن تجربة . وايضا ان تكون ملما بلغة التجميع"assembely " لفهم الميكروكنترولر بتعمق اكثر 
نعود الى موضوعنا:-​*السي شارب*
أحد لغات بيئة الدوت نت(.NET) يرمز اليها بالرمز c# وتنطق "سي شارب"، تم الاعلان عنها في عام 2000 تزامنا مع الاعلان عن بيئة الدوت نت. تتميز سي شارب بأنها أحد لغات البرمجة الشيئيه -"object oriented programming"-.استمدت هذه اللغة صفات عديدة من عدة لغات مثل (java–Delphi) .

استفادت لغة السي شارب الى حد كبير من جهود مطوري الجافا وتشاركها في كل مزاياها ومبادئ التصميم وتفوقها في بعض الاجزاء- توجد اقوال كثيرة جدا في اي اللغتين اقوي ولكن للعلم ان الجافا اقدم 1995 - . لغة السي شارب كباقي لغات الدوت نت تعمل علي انظمة تشغيل ويندوزفقط . والجافا تنتج برامج لاتعتمد على بيئه معينه مثل برامج موجهه للينكس او ويندوز او ماك..الخ . هي لغة كائنية بالمعني الحقيقي للكلمة حيث كل شيء في اللغة هو عبارة عن كائن تم تعريفه مسبقا , لذلك لا تسمح هذة اللغة بالكتابة الحرة .
بقى شيء مهم اريد ان اذكره و هو ما هي بيئة الدوت نت لاننا نسمع عن هذه الكلمة كثيرا؟ 
الاجابة في هذا المقال–بارك الله فيمن كتبه- لتحميل المقال 
ما هي الدوت نت.docx

خطوات تجميع الكود للسي شارب :-


​ للمتابع جيدا يرى ان (Common Language Infrastructure (CLI و يطلق عليه ايضا (Common Language Runtime) CLR شبيه بال jvm في الجافا, ولكن ال Jvm يدعم لغة واحدة لعدة انظمة تشغيل , اما ال -CLI ".NET" - يدعم عدة لغات لنظام تشغيل واحد وهو ويندوز. و الكلام هنا كثير.............
************************************************************************
نعود الي هدفنا ان شاء الله ساشرح باستخدام برنامج Microsoft visual studio 2008 
صورة البرنامج المنتج



​
اولا الكود الكامل للمشروع




```
[CENTER][SIZE=3]     
     
using System; using System.Collections.Generic;// هذه هي المكتبات اللازمة لصنع البرنامج using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; namespace ******_send {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();//انشاء و عمل مكونات ال form          }          private void button1_Click(object sender, EventArgs e)         {             string[] ports = SerialPort.GetPortNames();             foreach (string port in ports)             {                 comboBox1.Items.Add(port);             }         }          private void button2_Click(object sender, EventArgs e)         {             string t = comboBox1.Text.ToString();             string s = textBox1.Text.ToString();             ******(t, s);         }          void ******(string Port_name, string data_send)         {             SerialPort sp = new SerialPort(Port_name, 9600, Parity.None, 8, StopBits.One);             sp.Open();              sp.Write(data_send);             sp.Close();         }      } } 
[/SIZE][/CENTER]
```
ثانيا شرح الكود:-




```
private void button1_Click(object sender, EventArgs e)         {
```
الدالة التى تنفذ عند الضغط علي زر البحث -button1- وبداخلها يحدث الاتي
ا- 
كود:


```
[CENTER]string[] ports = SerialPort.GetPortNames();
[/CENTER]
```
هذا السطر مسئول عن اخذ اسماء البورتات و نضعها في مصوفة من النوع string باستخدام دالة GetPortNames في كلاسSerialPort 

ب- 
كود:


```
[CENTER]foreach (string port in ports)             {                 comboBox1.Items.Add(port);             }
[/CENTER]
```
في هذه الاسطر يتم اضافة اسماء البورتات الموجودة في مصفوفة ال ports و وضعها في ال comboBox1 -هذه ال for مثل ال for المعتادة و لكن هذه ابسط في التعامل مع المصفوفات و تسمى enhanced for

3- كود:


```
[CENTER]private void button2_Click(object sender, EventArgs e)         {
[/CENTER]
```
الدالة التى تنفذ عند الضغط علي زر الارسال -button2- وبداخلها يحدث الاتي
ا- 
كود:


```
[CENTER]             string t = comboBox1.Text.ToString();
[/CENTER]
```
هذا السطر مسئول عن اخذ اسم البورت الذا اخترناه من ال comboBox1 و وضعه في string t

ب-
كود:


```
[CENTER]string s = textBox1.Text.ToString();
[/CENTER]
```
هذا السطر مسئول عن اخذ البيانات المراد ارسالها ووضعها في string s

ج- كود:

******(t, s);

في هذه السكر تنادي علي دالة قمت بعملها داخل الكلاس تسمي ******(t, s);وارسل لتلك الدالة اسم البورت و البيانات المرسلة 

التكملة في التعليق القادم​

​
​

​
​


----------



## طه عمارة (12 فبراير 2013)

في مشكلة لما بكتب كلمة السيريال بالانجليزي فهي بتظهر كانها نجوم دا للعلم فقط :68: حتى لو بالعربي بدون الالف و اللام .. علي العموم اسم الدالة wsErialw بدون ال w التي في البداية و النهاية


----------



## طه عمارة (12 فبراير 2013)

دالة ال wsErialw :-


```
void ******(string Port_name, string data_send)         {             SerialPort sp = new SerialPort(Port_name, 9600, Parity.None, 8, StopBits.One);             sp.Open();              sp.Write(data_send);             sp.Close();         }
```

السطر الاول تعريفي للدالة انها لاترجع اي قيمة "void" و تستفبل حاجتين هما اسم البورت و البيانات المرسلة 
السطر الثاني فيه اننا نعمل كائن "object" من كلاس SeriaPort ونضع بيانات البورت فيه "بمعنى اصح في ال constructor -دالة لها نفس اسم الكلاس ولا ترجع اي شيء-"
السطر الثالث نفتح البورت
السطر الرابع نرسل البيانات 
السطر الاخير نغلق البورت


*وهذا هو فيديو التطبيق *http://www.youtube.com/watch?v=dFRa6KEDJ3I

اتمنى ان اكون وفقت في الشرح و ان شاء الله سابدأ في شرح جزء الاستقبال قريبا​


----------



## محمدالقبالي (13 فبراير 2013)

اخي الكريم اشكرك جزيل الشكر على هذا الموضوع الرائع والمنسق وجعله الله في ميزان حسناتك


----------



## الطالب. (13 فبراير 2013)

بارك الله فيك


----------



## طه عمارة (17 فبراير 2013)

بارك الله فيكم و شكرا على مروركم و تقييكم


----------



## نيرر (8 مارس 2013)

موضوع شيق جدا ولك جزيل الشكر


----------

