# زيادة عدد ال outputs عن عدد ال pins للميكروكونترولر



## ahmelsayed (28 أغسطس 2010)

السلام عليكم ورحمة الله وبركاته 
=====================​ 
فى هذا الموضوع سيتم إيضاح كيفية زيادة عدد الخرج عن عدد أرجل الميكروكونترولر المخصصة كخرج .
مثلا إذا اخذنا هذا الميكروكونترولر الشائع الإستخدام PIC 16F84A فإن له عدد 13 رجل تصلح كدخل و كخرج وباعتبارهم كلهم كخرج سنلاحظ ان أكبر خرج ( وليكن على LEDs ) هو 13 LEDs
وبطريقة أخرى يمكن ان تكون 26 LEDs .​ 
ولكن ماذا لو أردنا عدد أكبر 50 - 60 -70 LEDs أو أكثر (طبعا أنا لا اقول هذا العدد ارتجالا وانما له علاقة رياضية سنعرفها فيما بعد )​ 
وفى هذه الطريقة لن نستخدم أى دوائر متكاملة أخرى , فقط مجموعة الخرج (LEDs ) وال PIC .
وتسمى هذه الطريقة ب :-​CharliePlexing​ 
وهى مسماة نسبة لصاحبها Charlies Allen 
( عذرا لإطالة ولكنها مقدمة لابد منها أرجو أن تتحملونى)​==========================================​كما هو معروف أن أى رجل فى الميكروكونترولر لها ثلاث احتمالات:​


1 تعنى high أى أن هناك 5 فولت على هذه الرجل(Vdd).
0 تعنى low أى أن الجهد على هذه الرجل صفر (Vss) .
X تعنى High Impedance أى أن هذه الرجل يمكن تمثيلها بمقاومة كبيرة جدا جدا أو أنها 
Open Circuit ولكن ليس عليها 5V أو 0V .​============================================​ 
لتوصيل LED واحدة فقط كما هو المعروف يتم عن طريق مقاومة الغرض منها تقليل الجهد الخارج من رجل البيك للوصول الى الجهد اللازم لتشغيل الليد وهو تقريبا بين و 2.2 1.9 فولت وقيمة هذه المقاومة تقريبا بين 150 و 330 أوم وتحسب من خلال قانون أوم .​



R=(Vpin-Vled)/If 
=============================================​لتوصيل 2 LEDs على رجل واحدة :-​

 
وبالتالى عندما يكون خرج البيك على الرجل 1(high-5V) يضىء LED 1 فقط وعندما يكون الخرج 0 (low-0V) يضىء الليد 2 فقط .​==========================================​أما لأكثر وهذا هو موضوعنا :-
نحاول نفهم الشكلين التاليين​

يعنى لو Pin A = 1 و Pin B = 0 سيضىء LED 1 فقط لأن شروط عمله تحققت .​ 


لو Pin A = 0 و Pin B = 1 سيضىء LED 2 فقط لأن شروط عمله تحققت .​======​طيب أكيد هناك أحد ما يسأل ويقول أنا عملت ايه كده طيب ما انا اوصل 2 LEDs على رجل واحدة فقط كما سبق ............. هارد وأقوله اصبر إن الله مع الصابرين .​ 
انظر هذا الشكل​

هنا استخدمنا ثلاث أرجل للتحكم فى 3LEDS .
طبعا كما تم ذكره فى السابق أن هناك ثلاث احتمالات للرجل الواحدة ,انه لعمل أى LED نحتاج فقط الى رجلين فسيتم جعل الرجل الثالثة high impedance أى ان لها قيمة مقاومة عالية جدا بالميجا اوم.
ويتم ذلك عن طريق جعلها دخل وليس خرج .​ 
وكما بالشكل تم جعل الرجل الثانية (الوسطى) high impedance وجعل الاولى والثالثة كخرج لذلك لن يعمل سوى LED 5 و LED 6 . وسيعمل أى منهم على حسب حالة كل من الرجلين الاولى والثالثة وتوافر شروط عمل أى منهم .
والجدول التالى يوضح عمل كل من 6LEDs :-​

أكيد هتقول طيب وايه يعنى منا ممكن اتحكم فى 6LEDs بثلاث رجول بطريقة على كل رجل 2LEDs كما سبق.
طيب انظر ال الدائرة التالية:​

يعنى عن باستخدام هذه الطريقة تحكمنا فى 12LEDs باستخدام 4 أرجل فقط .​

 
============================​ 
وما هى العلاقة التى تحدد عدد ال LEDs والأرجل ؟؟؟؟؟؟؟؟​ 
LEDs = Np*(Np-1)​LEDS -----> العدد .
Np --------> عدد الأرجل .
أى ------------- عدد الأرجل مضروب فى عدد الأرجل ناقص واحد​ 
تخيل مثلا مع PIC 16F84A التى تحتوى على 13 رجل دخل/خرج باعتبارهم خرج جميعهم .​ 
LEDs = 13*12 = 156 led
:59: Just Imagine​ 
وطبعا كما هو معروف عند مستخدمى ودارسى الميكروكنترولر أن LED يمكن استبدالها بأى خرج اخر
======================================================​أتمنى أن أكون نفعت من لا يعرف وذكرت من يعرف وأثرت له الحماس لإخراج ما يعرف لينفع الجميع
وإذا وجد خطأ فهو ذلة وسهو منى 
======================================================
:73:وعذرا للإطالة وشكرا منكم لتحملى​


----------



## ksmksam (28 أغسطس 2010)

انت ممكن تستخدم نفس الشيء مع دوائر logic وراح تلاقي نفس الشيء
يس المشكلة الرايسية ما راح تقدر تشغل مخرجين في نفس الوقت كما بالنسبة لمخارج pic في الوضع الاعتيادي


----------



## ahmelsayed (29 أغسطس 2010)

طبعا كلامك صحيح 100% والطريقة دى مش مستخدمة فى كل حاجة
بس لو طبيعة الخرج معروفة ومحسوبة تمام من حيث الوقت والترتيب ممكن أرتب أنا الخرج على الأرجل زى منا عايز
وشكرا على مرورك أخى الكريم


----------

