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

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

robota
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: الخرطوم_السودان
المشاركات: 926
نشاط [ robota ]
قوة السمعة:103
قديم 26-01-2010, 12:21 PM المشاركة 1   
افتراضي عدة طرق لزيادة مداخل الميكروكنترولر(الرقمية والتماثلية) Twitter FaceBook Google+



السلام عليكم جميعا ...
قبل مدة قصيرة وأثناء تنفيذي لأحد المشاريع الخاصة بالدراسة والمتعلقة بالميكركنترولر فقمت باختيار صديقى الرائع 16f877A ولان المداخل الخاصة بالمشروع كانت كثيرة جدا تورطت فى مشكلة كبيرة تتمثل فى انه لم يتبقى لدى الا ثلاثة اطراف فى البيك وفى الطرف الاخر تبقى 12 مفتاح (Button) كان على توصيلها بالبيك .
فققرت ان ابحث عن الحل فجمعت عدد لا باس به من المعلومات فاحببت ان اشارك به اخوانى فى المنتدى .
وقمت بتقسيم الطرق الى قسمين رقمى وتماثلى ساذكر هذه الطرق تباعا بشئ من التفصيل.
والله الموفق.

1-زيادة المداخل الرقمية :
يمكن زيادة المداخل الرقية بعدة طرق منها:
1-استبدال الميكركنترولر باخرى ذات مداخل اكبر:
وهو افضل الحلول ويشمل المداخل الرقمية والتماثلية ودائما يُُنصح به خاصة عندما يتعلق الامر بالمتحكم من نوع البيك حيث ان فارق الاسعار غالبا يكون بسيط.
الفوائد:
1- يقلل التكلفة (خاصة البيك) مقارنة بالطرق الاخرى باستثناء الطريقة الاخيرة (سنذكرها لاحقا).
2- يقلل التشويش (noise) حيث ان الايسيهات تعمل كانتينا تستقبل الاشارات المغنطيسية مما يعنى ان استخدام اكثر من (IC) كالريجسترات يزيد من الضجيج.
3- الحصول على امكانيات افضل فالزيادة غالبا لا تشمل المداخل فقط بل ايضا تكون هناك اضافة اخرى يمكن الاستفادة منها كزيادة حجم الذاكرة وزيادة الملحقات.
4- يصبح الكود اكثر سهولة .
العيوب:
1- لا تصلح عندما يتطلب الامر عدد مداخل كبير جدا .
لا تحتاج الى امثلة توضيحية.

اعلانات

robota
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: الخرطوم_السودان
المشاركات: 926
نشاط [ robota ]
قوة السمعة:103
قديم 26-01-2010, 12:24 PM المشاركة 2   
افتراضي


2-طريقة الماتريكس :
وهى معروفة وتستخدم غالبا مع المفاتيح .
وهذا مثال لكيباد 4*4
ويتم فيها وضح المفاتيح على شكل مصفوفة يتم تغذية الاعمدة بالجهد من المتحكم بالتتابع (العمود الاول ثم الثانى وهكذا) وانتظار الخرج من جهة الصفوف وبمقارنة الصف مع العمود يمكن معرفة المفتاح المطلوب.
الفوائد:
1- لاتحتاج الى دوائر متكاملة اضافية .
العيوب:
1- لا توفر عدد مداخل كثير ففى حالة الكيباد (4*4) توفر 8 مداخل فقط من 16 . ويمكن تخطى هذه المشكلة باستخدام الدائرة المتكاملة EDE1144 ونقوم بتوصيل الصفوف والاعمدة بهذه الدائرة ويكون الخرج تسلسليا وبالتالى سنحتاج الى طرف واحد من اطراف المتحكم. وهذه الدائرة لها مزايا اخرى رائعة
ويمكن تحميل الداتا شيت من هنا
2- تحتاج الى متابعة دائمة من المتحكم ويمكن تخطى هذا العيب بعدة طرق منها استخدام الدائرة المتكاملة أعلاه.
3-محدودة . لأنه كلما زادت الأعمدة زادت نسبة الخطأ خاصة اذا كانت عملية المسح بطيئة.

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


التعديل الأخير تم بواسطة : robota بتاريخ 27-01-2010 الساعة 12:11 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

robota
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: الخرطوم_السودان
المشاركات: 926
نشاط [ robota ]
قوة السمعة:103
قديم 26-01-2010, 12:30 PM المشاركة 3   
افتراضي


3. استخدام مسجلات الازاحة Registers :
وبكل تاكيد سيتم استخدام الريجسترات من نوع دخل توازى _خرج توالى parallel in serial out وسنستخدم النوع 74165 ويمكن ايضا ايضا استخدام النوع 74HC597
ولتحميل الداتا شيت للاول من هنا

ولفهم طريقة عمل هذا المسجل ساقتبس هذه المشاركة لاخى فادى (genious01)

اول شي نقوم بوضع جهد منخفض (صفر فولت ) ثم جهد مرتفع (5 فولت) على الطرف رقم SH/LD وهذه العملية ستكون قد عملت ادخال من المداخل التفرعية الى داخل المسجل وايضا ستخرج القيمة الموجودة على D7 الى الخرج مباشرة ..وهكذا تكون القيمة قد دخلت السجل الداخلي ..والان حان وقت الازاحة وذلك يتم من خلال تصفير المدخل رقم 15 اي الطرف INH وهو لتفعيل مدخل الساعة ...وبعدها يتم اعطاء نبضات الساعة من صفر الى واحد على الطرف 2 وهكذا مع كل نبضة يخرج D6 ثم D5 ثم D4 وهكذا الى ان تخرج ال8 قيم للمداخل
وبعد سبع نبضات يكون كل الداتا التى تم إدخالها بالتوازي قد خرجت . ثم بعد ذلك تخرج النبضات التى تم ادخالها ضمن الطرف 10 الخاص بالدخل المتوالى يتم الاستفادة منه لاستخدام اكثر من ic اذا كان الدخل المتوازى اكثر من ثمانية اطراف.
يتبع


geniusse01
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2008
الدولة: Jordan - Amman
المشاركات: 1,139
نشاط [ geniusse01 ]
قوة السمعة:106
قديم 26-01-2010, 12:48 PM المشاركة 4   
افتراضي تحية لاخونا وحبيبنا روبوتا..


السلام عليكم

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

واخر دعوانا ان الحمدلله رب العالمين ... وصلى الله على سيدنا محمد وعلى اله وصحبه وسلم...


robota
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: الخرطوم_السودان
المشاركات: 926
نشاط [ robota ]
قوة السمعة:103
قديم 26-01-2010, 12:54 PM المشاركة 5   
افتراضي


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


التعديل الأخير تم بواسطة : robota بتاريخ 26-01-2010 الساعة 02:22 PM

robota
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: الخرطوم_السودان
المشاركات: 926
نشاط [ robota ]
قوة السمعة:103
قديم 26-01-2010, 01:16 PM المشاركة 6   
افتراضي


نواصل فى الطريقة الثالثة:
سنبدأ فى التطبيق
اولا : اذا كان الدخل اقل من او يساوى 8
سنطبق الية عمل المسجل (وهو المذكور فى الداتا شيت ) فى الكود التالى (الكود باستخدام لغة الميكروسى):
الطرف SH/LD موصل ب portb.f1 والطرف clk مع portb.f0 والخرج التسلسلى S0
مع portc.f0 ,وقمنا باضافة LCD للتاكد من عمل الكود.
كود:
  int k ; 
  char txt[5];
  int a;
  void main() {
  TRISB = 0;
  trisc=0xff;
  TRISD=0;

  Lcd_Init(&PORTD);
  Lcd_Cmd(Lcd_CLEAR);
  Lcd_Cmd(Lcd_CURSOR_OFF);
 for(;;)
 {

   portb.f1=0;
   portb.f1=1;
   if(portc.f0=1)
   a=1;
   for (k=0;k<7;k++)
       {

          portb.f0=0;
           portb.f0=1;
           if(portc.f0=1)
           a=k+2;
            }
            if(a!=0)
                       {

           lcd_chr_cp(a+48)  ;

          }
            delay_ms(200);
            a=0;
  }

 }
وهذا الدائرة بالبروتس


robota
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: الخرطوم_السودان
المشاركات: 926
نشاط [ robota ]
قوة السمعة:103
قديم 26-01-2010, 01:27 PM المشاركة 7   
افتراضي


لتحميل ملفات المشروع كاملة من هنا
نسخة البروتس 7.6
طبعا الكود واضح لكن لا مانع من شرح الكود
الاسطر الاولى من الكود يتم فيها تعريف المتغيرات و شاشة ال LCD
كود:
 portb.f1=0;
هنا يتم وضع جهد منخفض (low) على الطرف sh/ld ليتم تحميل البيانات وهى هنا اوضاع المفاتيح.
كود:
 portb.f1=1;
لابد من وضع جهد مرتفع (high) حتى يتسنى اخراج البيانات تسلسليا .
كود:
if(portc.f0=1)
هذا السطر يختبر الخرج التسلسلى . اذا كانت قيمة portc.f0 ==1 فهذا يعنى ان تم تفعيل الطرف D7 . وياخذ المتغير a القيمة 1 ليدل على انه تم ضغط المفتاح رقم 1
كود:
for (k=0;k<7;k++)
       {

          portb.f0=0;
           portb.f0=1;
           if(portc.f0==1)
           a=k+2;
            }
فى هذه الحلقة يتم اعطاء طرف ال clock سبع نبضات وبعد كل نبضة نختبر الخرج فاذا كان الخرج =1 بعد النبضة الاولى فهذا يعنى انه تم ضغط المفتاح رقم 2 وقيمة k فى هذه الحالة =0 فتكون قيمة a ==K+2 .و هكذا حتى النبضة السابعة والاخيرة.
كود:
if(a!=0)
اختبار هل تم الضغط على احد المفاتيح؟
كود:
 lcd_chr_cp(a+48)  ;
تحويل قيمة a الى ascii ثم اظهارها على ال lcd.

يتبع


التعديل الأخير تم بواسطة : robota بتاريخ 26-01-2010 الساعة 01:58 PM

الصورة الرمزية -hassan-
-hassan-
:: مهندس متميز ::
تاريخ التسجيل: Aug 2009
الدولة: syria
المشاركات: 318
نشاط [ -hassan- ]
قوة السمعة:0
قديم 26-01-2010, 01:53 PM المشاركة 8   
افتراضي


شكراً مستر روبوتا

إضافة رد

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

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

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


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

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