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

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

NoNSTOP
:: مهندس ::
تاريخ التسجيل: Feb 2014
المشاركات: 19
نشاط [ NoNSTOP ]
قوة السمعة:0
قديم 28-01-2018, 09:46 PM المشاركة 1   
افتراضي ضم متغيرات وارسالها عبر uart Twitter FaceBook Google+



السلام عليكم ورحمة الله وبركاته
اقوم بعمل دائرة الكترونية بها متحكمين 16f877a بسبب زيادة عدد المداخل والمخارج عن متحكم واحد
احدهما استخدمه في عرض بيانات على شاشة مع مستشعرات والاخر باقي المستشعرات واقوم بحفظ بعض هذه البيانات على eeprom
وكل ذلك بحمد الله دون مشاكل
ولكن احتاج ان ارسل بعض البيانات عبارة عن 4 متغيرات رقمية من نوع long عبر منفذ serial uart ليستقبلها المتحكم الاخر لعرضها بموضعها على الشاشة
الارسال والاستقبال ليس بهم مشكلة ولكن الصعوبة التي تواجهني في دمج المتغيرات في متغير واحد لارساله ثم القيام بفك هذا الدمج في الطرف الاخر لعرضه على الشاشة
استخدم mikroc وقمت بالعديد من المحاولات باستخدام strcat ولكن دون جدوى
هل يوجد طريقة ناجحة لفعل المطلوب ؟
او فكرة اخرى غير دمج المتغيرات يتم بها ارسال 4 متغيرات رقمية للمتحكم الاخر؟
وشكرا

اعلانات

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:408
قديم 29-01-2018, 04:30 AM المشاركة 2   
افتراضي


لا يتم دمج المتغيرات إلا فى الحاسب لأن به حاجز Buffer يمكنه أى يتسع لعدد 256 بايت معا ترسل و تشتقبل دفعة واحدة أو حتى على دفعات و عند اكتمال العدد المحدد يحدث النظام المقاطعة ليبدأ التجزئه و التحليل لكن الميكرو لا يحتوى مثل هذا القدر من الرفاهية
الحل أن ترسل متغير ثم الآخر يليه و هكذا

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

NoNSTOP
:: مهندس ::
تاريخ التسجيل: Feb 2014
المشاركات: 19
نشاط [ NoNSTOP ]
قوة السمعة:0
قديم 29-01-2018, 05:25 AM المشاركة 3   
افتراضي


لا يتم دمج المتغيرات إلا فى الحاسب لأن به حاجز Buffer يمكنه أى يتسع لعدد 256 بايت معا ترسل و تشتقبل دفعة واحدة أو حتى على دفعات و عند اكتمال العدد المحدد يحدث النظام المقاطعة ليبدأ التجزئه و التحليل لكن الميكرو لا يحتوى مثل هذا القدر من الرفاهية
الحل أن ترسل متغير ثم الآخر يليه و هكذا
كنت احاول دمج 4 متغيرات بمصفوفة واحدة لتكن مثلا
4-7537-8-363
فيكون هذا المتغير النهائي هو الذي سيتم ارساله مرة واحدة ثم تفكيكه في الطرف الثاني
هل ذلك خطأ؟


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:408
قديم 30-01-2018, 04:39 AM المشاركة 4   
افتراضي


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

بينما لو ارسلت المتغير الأول و الطرف الآخر استقبله ثم الثانى و هكذا سيكون أسرع و أأمن فلو حدث خطأ ما تكرر ارسال المتغير بدلا من المصفوفة كلها


NoNSTOP
:: مهندس ::
تاريخ التسجيل: Feb 2014
المشاركات: 19
نشاط [ NoNSTOP ]
قوة السمعة:0
قديم 30-01-2018, 05:20 AM المشاركة 5   
افتراضي


شكرا للتوضيح اخي ماجد
ومن خلال توضيحك اعتقد شخصيا ان ارسال مثلا 16 بايت مجمعين مرة واحدة سيكون اسرع وعدد دورات اقل من ارسال 4 بايت 4 مرات منفصلة


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:408
قديم 30-01-2018, 05:30 AM المشاركة 6   
افتراضي


أخى
ما قلته هو العكس تماما لكن ليس قاعدة عامة


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

فمثلا تريد ارسال نص من 12 حرف string فهذا متغير واحد و ارساله كمتغير واحد كفؤ

لكن متغير من 4 ثم آخر من 2 ثم ثالث من 4 ثم رابع من 2 مجمعة فى مصفوفة سيكون بنفس الطول لكنك ستحتاج لتجميعهم ثم إعادة تقسيمهم و تخصيص كل متغير بعدد البايت الخاص به
فالمتغير من 4 بايت ستحتاج لأربع مرات تقرأ بايت و تضعها فى المتغير


محمد إلياس
:: مهندس جيد ::
تاريخ التسجيل: Jan 2017
المشاركات: 230
نشاط [ محمد إلياس ]
قوة السمعة:0
قديم 30-01-2018, 07:21 AM المشاركة 7   
افتراضي


لو الهدف فقط توفير مخارج البيك ، ممكن تتجاوز الصعوبات بتغيير الطريقة:
الاكتفاء ببيك واحد واستخدام شاشة LCD من نوع Serial تعمل بالبرتوكول الشهير I2C.
هي شاشة تحتاج فقط طرفين اثنين في البيك هما SDAو SCL.
لو تحب الاحتفاظ بشاشة LCD عادية التي تتطلب 6 أطراف على الاقل ممكن تستفيد من نفس الفكرة بإضافة متكاملة معروفة لدى المبرمجين الذين ينفذون دوائر الماتريكس.
هي مسجل الإزاحة 74595
ويوجد غيرها..
البيك يرسل الداتا لمسجل الإزاحة بطريقة تسلسلي
و هو يتكفل بإرسال الداتا للشاشة .


abu-thabit
:: مهندس متميز ::
تاريخ التسجيل: Oct 2010
المشاركات: 339
نشاط [ abu-thabit ]
قوة السمعة:0
قديم 30-01-2018, 08:10 AM المشاركة 8   
افتراضي


لماذا لا تقوم باستخدام بروتوكولات اخرى مثل SPI , I2C ?

إضافة رد

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

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

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


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

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