# استفسار عن الاتصال بين الحاسب ومايكروكنترولر بيك من المنفذ التسلسلي rs-232



## zamalkawi (27 يوليو 2010)

السلام عليكم
أستعمل مايكروكنترولر من نوع PIC16F876A وأريد أن أتبادل المعلومات بين المايكروكنترولر والكمبيوتر
ونويت أن أتمم هذا الاتصال من خلال المنفذ التسلسلي RS-232 حيث أنني أعتقد أن هذا هو أسهل الحلول
المشكلة هي أن معلوماتي في المايكروكنترولر بوجه عام محدودة
أريد أن أسأل أولا، هل سأحتاج إلى هاردوير إضافي؟ وما هو؟
وأين أجد أمثلة برامج لإتمام الاتصال، حتى أستطيع تغييرها لتناسب التطبيق الخاص بي؟
ومن ناحية الكمبيوتر، هل سأحتاج إلى كتابة برنامج لقراءة وكتابة المنفذ أم أنه يكفي (كمرحلة أولى على الأقل) استعمال برنامج الطرفية الفائقة Hyper Terminal؟ جدير بالذكر أن نظام التشغيل لدي هو Windows XP
وكيف يمكن برمجة الاتصال ليتم في الزمن الحقيقي؟
لقد بحثت في الإنترنت، ووجدت الكثير من النتائج، ولكن ضعف معلوماتي منعني من أن أفهمها جيدا، لذا أحتاج إلى بداية مبسطة وبعدها سأحاول أن أعثر على المعلومات بنفسي، ولهذا لجأت إليكم
شكرا مقدما
السلام عليكم​


----------



## mustafamogh (20 أغسطس 2010)

الله وكيلك نفس المشكلة تواجهني


----------



## zamalkawi (20 أغسطس 2010)

لقد وصلت إلى بعض المعلومات، ولكني لم أبدأ التطبيق بعد
بالمناسبة لقد فتحت الموضوع في مكان آخر وهذا هو رابطه
http://www.arab-eng.org/vb/t211761.html
وتطوع أحد الأخوة بمساعدتين ولكني لم أبدأ بالتنفيذ كما ذكرت
بالمناسبة، هل لديك تطبيق معين؟ أم أنك تريد عمليها فقط للتعلم واكتساب خبرة؟
أنا لدي تطبيق معين وهو التحكم في محرك كهربائي
وهل تعرف كيف أكتب برنامج بسيط (بلغة سهلة كالفيجوال بيزك مثلا) لتبادل المعلومات مع المايكروكنترولر وتخزينها؟
أنا أعرف أنه يمكن استعمال الhyperterminal ولكن لا أدري كيف أتحكم بها
أفكر في استخدام الماتلاب، لأني أعتقد أنه سيكون أسهل من البرمجة بلغة عادية
فهل فكرت في هذا الأمر؟


----------



## أحمدبيك (22 أغسطس 2010)

أرجو أن تكون تجربتي مفيدة.

اسمح لي أوﻻً أن أفترض بعض الإفتراضات، وهي الملونة باللون الأزرق، ويليها الشرح.

أوﻻً، سأفترض أنك تعرف أن ثمة Module في هذا الـ PIC تسمى الـ USART، وسأفترض أنك قادر على برمجتها للتواصل مع أي PIC آخر.

في عملية التوصيل بشكل Serial ، ثمة عدة بروتوكوﻻت، والـ RS232 منها. لكي تتم عملية الربط بين الحاسب وبين الـ PIC بشكل صحيح، يجب أن يتم ضبط إعدادات الإتصال بحيث تكون متوافقة، ولكنني أقضل أن تبقي على الإعدادات بشكلها الإفتراضي 9600,8,N,1

وبما أنني أفترض أنك تعرف كيف تربط بين معالجين (PIC) بواسطة الـ USART، فأفترض أنك تعرف معاني تلك الرموز (9600,8,N,1).




أوﻻً، أجل، ثمة قطعة تسمى MAX232، تعمل على تكييف الإتصال بين الـ PIC والحاسب، يمكنك شرائها من محل الإلكترونيات، ويتم توصيلها كما بالصورة











للعلم، المكثفات مهمة، وليست كمالية، حيث أن عدم وجودها يسبب تشويش في الإتصال، وقمت بتجربة ذلك عملياً.




ثانياًً، أجل، يمكنك استعمال برنامج الـ Hyper Terminal في عملية إرسال البيانات، ولكن قم بإنشاء إتصال جديد، وقم بتخصيص الإعدادات في الـ Hyper Terminal لتتوافق مع تلك التي قمت بتخصيصها في برنامج الـ PIC.

إذا كنت تبرمج بالـ Visual Basic، ثمة Component تسمى MSComm ، يمكنك استعمالها للتحكم في الاتصال.

معلومة مهمة، في الحاسب، ﻻ يمكنك إنشاء أكثر من اتصال، أي ﻻ يمكنك استخدام المنفذ من برنامجك (المنشأ بالفيجوال بيسك) ومن الـ Hyper Terminal في نفس الوقت، فإذا ظهرت لك رسالة خطأ، فذلك قد يعني أن برنامجاً ما يستعمل المنفذ.

يمكنك مشاهدة أحد تطبيقاتي التي قمت بتوصيل الـ PIC مع الحاسب بواسطة الـ RS232 على الرابط هنا.

وفي هذا التطبيق، تحكمت في المنفذ بواسطة الفيجوال بيسك.

حظاً موفقاً.


----------



## zamalkawi (22 أغسطس 2010)

عرفت بالفعل أنني يحب أن أستعمل MAX232 وبالفعل وضعتها في الدائرة
المشكلة أنني نشاطي بطييييييء جدا بسبب انشغالي بالعمل

للأسف أنا مبتدئ، وأسمع فقط عن ال USART وأعرف أنه المسئول عن الاتصال التسلسلي، لكني لم أعرف الكثير عنه
على كل حال، حيث أنك تقول أن معرفة الUSART أساسية، فسأحاول القراءة عنها
بالمناسبة، وجدت مشروع على موقع اسمه microchipc ولكني لم أجربه بعد
وها هو المشروع
http://www.microchipc.com/sourcecode/PIC_Hi-Tech_C_PIC16F87x_serial_comms_and_VB6_sample.zip
ربما أبدأ بهذا المشروع لأنه كود جاهز، ثم أحاول تغييره ليناسب التطبيق الذي أريده
فما رأيك؟؟
أم الأفضل هو الفهم المتعمق لUSART رغم ما قد يمثله من صعوبة؟

أما السؤال الآخر، ماذا عن الجانب الآخر، أي جانب الحاسب الآلي
فكرت في استعمال الفيجوال بيزيك لأنها لغة سهلة وسبق لي استعمالها (قديما) ولكن كل الأمثلى التي وجدها كانت لنسخ قديمة مثل VB6 بينما ما لدي الآن هو فيجوال ستوديو 2008، ولم أجد المتحكمات الموجودة في الأمثلة
فكرت أيضا في استعمال الهايبر ترمنال بصورة مبدئية لأنها لا تتطلب برمجة، وربما أبدأ بها بالفعل
وفكرت أيضا في الماتلاب حيث أعتقد أن برمجته أسهل كثيرا من البرمجة باللغات العادية
فماذا تقترح؟؟

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


----------



## أحمدبيك (24 أغسطس 2010)

يمكنك إرسال البيانات بفترة زمنية متساوية، ولكن عليك الأخذ بالنقاط التالية في عين الاعتبار:

1- إخراج البيانات من الجهاز لا يؤثر على البيانات التي يستقبلها. في عملية الإرسال التسلسلي، ثمة غشاء (Buffer) للمخرجات وآخر للمدخلات في كل جهاز متصل، أي أنه يمكنك أن ترسل بيانات دون أن تقرأ أبداً، وتبقى تلك البيانات التي استلمها الجهاز في الـ Input Buffer كما هي مالم تتم قراءتها، أو يتم التعديل عليها، أما عند استقباله لبيانات جديدة، فإن البيانات التي كانت مخزنة في الـ Input Buffer لا تبقى كما هي، بل تكتسب القيمة الجديدة، وتضيع منك إذا لم تقم بقراءتها من الـ Input Buffer.

2- بناءً على ما ذُكر في النقطة (1)، عليك أن تختار الفترات الزمنية المتساوية بحيث تكون كافية للمستقبل لكي يقوم بقراءتها ومعالجتها، وذلك لتجنب ضياع البيانات. وفي الحقيقة، أنا أتبع طريقة -قد لا تعجبك-، وهي أن لا يقوم المرسل بإرسال البيانات الجديدة إلا بعد تلقيه رسالة من المستقبل أنه استلم البيانات السابقة، أي لا تعتمد على الزمن فقط.

بالنسبة للغات البرمجة، أنا من جديد -وذلك لانشغالي في الفترة السابقة- دخلت في المرحلة الانتقالية من الفيجوال بيسك 6 إلى الفيجوال بيسك دوت نت، أو تلك المتوفرة في الفيجوال ستوديو 2008. وأذكر أنني استعملت نفس الأداة MScomm ، ولكنني لست متأكداً، لأنني لم أنتقل إلى الـ 2008 بشكل يعتمد عليه، فقط ما أعتقد أنني أذكره أنني استعملت نفس الأداة. أذكر أنني واجهت مشكلة مع هذه الأداة مع الفيجوال ستوديو 2008، ولكنني لست متأكداً، هل كان سبب المشكلة الويندوز 7 أم الفيجوال ستوديو 2008، أضف إلى ذلك أن الويندوز 7 لا يحتوي على أداة الـ Hyper Terminal.

وفي النهاية، أتمنى لك التوفيق..


----------



## zamalkawi (24 أغسطس 2010)

اشكرك جزيلا أخ أحمد على التفاعل
بالفعل windows 7 لا يحتوي على hyper terminal ولكني لا زلت أستعمل نظام التشغيل windows xp وأعتقد أنني سأظل عليه لفترة، إلى أن أقرر تغييره، إما بالويندوز الأحدث أو لينوكس أو غيره، ولكن حاليا أنا مع ويندوز إكس بي لفترة
ما أريده من جعل الاتصال يتم على فترات متساوية هو التالي:
يتم تكوين أوامر الحركة للموتور داخل الكمبيوتر، بحيث يتم إنشاء المسار المطلوب للحركة كدالة في الزمن، ثم يتم تقسيم هذه الدالة على فترات زمنية متساوية، وبالتالي يكون لدي عن كل فترة زمنية أمر موضوع، أو موضع مفترض، ويمكن أن يتم تخزينها على شكل متجه (أو مصفوفة) مثلا
على فترات زمنية متساوية (نفس الفترة الزمنية التي تم تقسيم دالة الموضع بها) يطلب المايكروكنترولر من الكمبيوتر أن يرسل له أمر الحركة، فيقوم الكمبيوتر بإرسال الأمر، وهو في هذه الحالة أمر الموضع المفترض الجديد، أي أن الكمبيوتر لا يرسل المصفوفة كلها مرة واحدة، وإنما يرسلها عنصرا بعد الآخر على فترة زمنية متساوية، بحيث يتلقى المايكروكنترولر كل فترة زمنية (1 مللي ثانية مثلا) الموقع المفترض الجديد
يرسل المايكروكنترولر موقعه الفعلي إلى الكمبيوتر، ويقوم الكمبيوتر باستقباله ثم يقوم بتخزينه و/أو عرضه
جدير بالذكر أن الكمبيوتر يتلقى الموضع الفعلي للرؤية والعرض فقط، ولا يتدخل في التحكم، لذا ليس مطلوب منه أن يعمل في الزمن الحقيقي، باستثناء الإرسال والاستقبال، لذا كما ذكرت سابقا، تكوين أوامر الحركة قد يتم مسبقا 
يقوم المايكرونترولر بتنفيذ حلقة التحكم حيث أن لديه الموقع المفترض والموقع الفعلي فيمكنه أن يحسب الخطأ ويعطي الأمر لدائرة التحكم
جدير بالذكر أن تنفيذ حلقة التحكم يجب أن يتم في الزمن الحقيقي، أي أن حساب الخطأ وتفيذ خوارزم التحكم يتم في مدة أقل من الفترة الزمنية المتساوية، والتي قد تكون 1 مللي ثانية كما ذكرت سابقا
على كل حال، أنا لم أبدأ فعليا بعد، أنا حاليا في مرحلة تجميع المعلومات، وربما أبدأ فعليا بعد رمضان بإذن الله


----------



## منتصر المالكي (31 أغسطس 2010)

الشكر الجزيل لهذا الشرح الوافي


----------



## جهادعقاب (1 سبتمبر 2010)

اريد من حضرتكم مساعدتي لتحمل برنامج الhyperterminal
وشكرا لكم


----------



## أحمدبيك (3 سبتمبر 2010)

أتمنى لك التوفيق أخي المهندس زملكاوي.

الأخ جهاد عقاب، أذكر أنني حينما واجهت هذه المشكلة وجدت طريقة لتثبيت برنامج الـ Hyper Terminal على الويندوز 7 في ملف التعليمات. 

وإذا بحثت في الإنترنت، ستجد العديد من النتائج، وبما أنني لا أملك الويندوز 7 في الوقت الحالي، فلم أجرب أي طريقة، ولكن هذه إحدى النتائج على الرابط.

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

أخبرني إن نجحت معك هذه الطريقة، وحظاً موفقاً.


----------



## سعيد الشايب (16 سبتمبر 2010)

السلام عليكم

لو حد عايز يعرف ربط الميكروكنترولر بالكمبيوتر من خلال برناج اللاب فيو يخبرنى


----------



## سعيد الشايب (16 سبتمبر 2010)

السلام عليكم

لو حد عايز يعرف ربط الميكروكنترولر بالكمبيوتر من خلال برنامج اللاب فيو يخبرنى


----------



## zamalkawi (16 سبتمبر 2010)

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


----------



## سعيد الشايب (17 سبتمبر 2010)

السلام عليكم اخى الحبيب
الماتلاب ليس لى خبره به 
ولكن ماعرفه عن اللاب فيو هو سهولة التعامل حيث ان الربط بين الميكروكنترولر و الكمبيوتر بسيط جدا 
ويمكنك الانضمام للجروب الذى انشأته على موقع الفيس بوك
http://www.facebook.com/?ref=logo#!/group.php?gid=157486894277488
سوف اقم بأذن الله بوضع فيديوهات عن السريال بورت مع اللاب فيو


----------

