التجربة الثامنه :- توصيل مسجل الازاحه74HC595

الوصف(Description):-
تعد دارة 74HC595من الدارات المتكاملة وهذه الدارة وظيفتها استقبال اشارة من مدخل معين واخراجها على عدة مخارج (محول من ادخال تسلسلي الى اخراج تفرعي) ..اي انها فقد تاخذ الاشارة الاولى من الطرف وتحفظها ثم تاخذ الثانية وتحفظها حتى تمتلي خانات الدارة ثم تخرجها مرة واحدة..


نظره علي مسجل الازاحه 74HC595

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

المرحلة الاولى
هي مرحلة استقبال الداتا من الخارج عن طريق الطرف DS وتجهيزها على خطوط الداتا على خرج مخارج المرحلة الاولى (كما نلاحظ ان نهاية هذه المرحلة تتكون من 8 خطوط داتا اي يمكن ازاحةحتى 8 اشارات (صفر وواحد) داخل هذه المرحلة...تدعى هذه المرحلة بمرحلة الازاحة..
المرحلة الثانية
 هي مرحلة الحفظ في مسجل التخزين وهي كما نرى تحفظ الاشارات ال8 القادمة من المرحلة الاولى..
المرحلة الثالثة
 تقوم باخراج القيمة الموجودة في مسجل التخزين الى الاطراف الخارجية او عدم اظهارها الى الاطراف تبعا لما هو مطلوب من الدارة القيام به.
المرحلة الاولى
وهي مرحلة الإزاحة وحيث ان البنية الاساسية لمسجلات الازاحة تعتمد على D-Flip Flop او ما يمسى بالقلابات او النطاطات (كلها تسمية لنفس العنصر) .. حيث يعمل هذا العنصر مثل المفتاح الكهربائي اللحظي فانت عندما تضغط على المفتاح الكهربائي في البيت مثلا يصل التيار الكهربائي الى المصباح ويضيء... هنا في القلابات يحدث نفس الشيء حيث تكون الداتا موجودة على الخط (DATA) مثلا وعندما تاتي جبهة صاعدة (كما نرى في الصورة فان هناك رمز التحول من الجهد المنخفض الى الجهد المرتفع ) فانها تعمل عمل المفتاح وتوصل الداتا الموجودة الى خرج القلاب ( سواء كانت الداتا هي واحد او صفر طبعا) .. الان كما نرى فان المسجل يتكون من 8 قلابات متتالية وطرف الساعة موصل الى جميع القلابات وهكذا تصلها نبضة الساعة في نفس الوقت ... ووبالتالي فان الداتا الموجودة على دخل كل قلاب تنتقل الى خرجه (أي الى دخل القلاب التالي وهكذا اي كل ما يقوم به القلاب هو نقل الداتا من الدخل الى الخرج ( OUTPUT1-OUTPUT8) وذلك عند الجبهة الصاعدة للساعة . ومما يجعل القلاب عنصر اساسي انه حتى لو بقيت نبضة الساعة ثابته او تحولت الى الصفر فان القيمة على الخرج لا تتغير الا عند ورود الجبهة الصاعدة التالية فقط ..
مثال
الان على فرض ان لدينا العدد ( HGFEDCBA) ونريد حفظ هذا العدد في المسجل(حيث هذه الرموز بدلا من الواحدات والاصفار) ..فنضع الخانه A على خط الداتا ونعطي جبهة صاعدة على مدخل الساعة (SHCP).. وبما ان كل القلابات على مدخلها من البداية صفر فان القلاب الاول هو الوحيد الموجود على دخله القيمة A . وبالتالي تنتقل الى خرج القلاب الاول (OUTPUT1) ..الان نستطيع تغيير الداتا (ما دام لا يوجد على مدخل الساعة جبهة صاعدة) فنضع على خط الداتا القيمة B ونعطي جبهة صاعدة على مدخل الساعة (SHCP) وهكذا تنتقل القيمة B من مدخل القلاب الاول الى خرجه (مكان ال A ) وبنفس الوقت تنتقل القيمة A من مدخل القلاب الثاني الى خرجه ..طبعا بما ان باقي القلابات مداخلها اصفار فانها لن تتغير (لان نقل القيمة صفر من المدخل الى الخرج لا يغير شي ) وهكذا تستمر العملية ..نلاحظ انه حتى نستطيع نقل عدد مكون من 8 بيت يجب وضع قيمة الداتا على خط الداتا 8 مرات ويجب ايضا ان نعطة 8 جبهات صاعدة (اي 8 نبضات ساعةعلي الطرف(SHCP)
يمكن اضافة طرف يدعى MR  يكون موصل مع كل من القلابات داخليا بحيث عن تطبيق جهد معين عليه يقوم بتصفير المخارج (جعل كل المخارج بصفر) وهذا يمكن استخدامه في عدة اشياء مفيدة مثل دائرة فلاشر بسيطة وهكذا
ملاحظة :-  يمكن وصل مسجلين ازاحة بحيث يكون التوصيل من مخرج المسجل الاول (output8) الى مدخل الداتا على مدخل المسجل الثاني (DATA) وهكذا نحصل على مسجل ازاحة لـ 16 خانة وهكذا يمكن الحصول على العدد الذي نريده من الخانات عن طريق التوصيل على التوالي للمسجلات وهو ما سوف ننفذه في هذه التجربه

المرحلة الثانية
وهي مرحلة الحفظ او التخزين في مسجل التخزين...حيث يمكن الاحتفاظ بالخانات على خرج مسجل التخزين (كما قلنا فالقلاب يقوم فقط بنقل الداتا من دخله الى خرجه وبالتالي اذا نقلنا الداتا على الخرج فانها تكون كانها محفوظة حتى تاتي جبهة صاعدة جديدة .. وهي تدعي في الالكترونيات الماسك (اي يمسك الاشارة على خرجه حتى لو تغير الدخل بعد ذلك) (LATCH)...  اي ان البيانات التي تكون علي دخل مسجل التخزين الموجود بالمرحله الثانبه   تخرج علي خرج هذا المسجل (مسجل التخزين )بمجرد وجود جبهة صاعده علي الطرف (STCP).ويمكن معرفة عمل الدارة بالنظر فيديو التجربه
وبالمقارنة نلاحظ ان الاختلاف الرئيسي بين هذه الحالة والحالة السابقة ان ادخال الداتا يتم على شكل تفرعي وليس تسلسلي كما في السابق
المرحلة الثالثة
حيث فقط تقوم باظهار الداتا على الاطراف الخارجية للدارة المتكاملة او لا تخرجها.. اي يمكن ان تكون الداتا جاهزة على مخارج مسجل التخرين ولكن وقت اخراجها لم يحن بعد ...عندها نستخدم هذه الخاصية في مسحلات التخزين وهي تسمى (3( STATE OUTPUT وهي تمنع اظهار القيمة على الاطراف الخارجية للمتكاملة الا عند تطبيق اشارة محدد على طرف التحكم بالطرف ( OE) حيث انه عند تطبيق القيمة صفر فولت على هذا الطرف فان القيمة تظهر على الاطراف الخارجية وفي حال كانت 5 فولت فان القيمة لا تظهر على الاطراف الخارجية...
كما في الفيديو
ملاحظه :- في الحالات العامه مثل هذه التجربه يتم توصيل الطرف  OEبالارضي وبذلك نخرج البيانات مباشرا بمجرد وجود جبهة صاعدة علي الطرف STCPوبذلك في التجربه العمليه تكون عمل هذه الدائره مكون من مرحلتين فقط ولا نضطر الي المرحله الثالثه الا في بعض الحالات الذي نريد فيها تأخير اشاره الخرج قليلا

ولفهم هذه المراحل انظر الي الفيديو الخاص بهذه التجربه

مخطط التجربة

البرنامج (Software)

#define DS porta.f0
 #define SH porta.f1=0;porta.f1=1;
 #define ST porta.f2=0;porta.f2=1;
char const t[10][16]={
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
{0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
{0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0},
{0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0},
{0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0},
{0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0},
{0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
                    };
void time(){delay_ms(100);}
int const data_1[]={1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1};
typedef int moha;
moha v,x,y,i;
void main ()
{
trisa=0;
trisb=0b00000000;
ANSEL = 0b00000000;
portb.f0 = 0;
while(1){
for(i=0;i<16;i++){DS=1;SH ST time();}
//############################################################
for(i=0;i<16;i++){DS=0;SH  ST time();  }
//############################################################
for(y=0;y<6;y++){
for(i=0;i<16;i++){DS=1; SH} ST
 time();
for(i=0;i<16;i++){DS=0; SH} ST
time();
                }
//############################################################
 for(x=0;x<16;x++) {DS=data_1[x];SH ST time();time();}
//############################################################
for(i=0;i<4;i++){
    for(v=0;v<10;v++){
                 for(x=0;x<16;x++){DS=t[v][x];SH}
                  time(); ST}
    for(v=9;v>0;v--){
               for(x=0;x<16;x++){DS=t[v][x];SH}
                time(); ST}
                    }

for(i=0;i<16;i++){DS=0; SH} ST
time();  time();

} }

شرح البرنامج

نقوم بأرسال واحد الي مدخل البيانات ثم اعطاء نبضه صاعده وهابطه علي طرفSH_CP   ثم ايضا اعطاء نبضه صاعده وهابطه علي طرف   ST_CP ثم أستدعاء داله الوقت ()time التي تبلغ 100 مللي ثانيه كل هذا داخل حلقه تكراريه عدد حلقانها يساوي عدد اطراف الخرج لاننا هنا استخدمنا مسجلين ازاحه
تكرار ما سبق ولكن هنا نرسل صفر علي طرف البيانات للمسجل فيقوم هذا الجزء بمسح البيانات التي تم اخراجها علي طرفي المسجل كما هو بالفيديو
تتكون هذه الفقره من حلقتين تكراريتين بداخل حلقه تكراريه واحده حيث الحلقه الاولي تقوم بارسال واحد منطقي الي طرف الداتا DS ثم اعطاء نبضه علي الطرف SH_CP من خلال الامرSH وتكرار ذلك 16 مره ثم الخروج من الحلقه واعطاء نبضه علي الطرف ST_CPمن خلال الامر STوذلك لجعل الخرج كله يضئ مره واحده ثم الانتظار 100 مللي ثانيه من خلال داله الوقت time()ثم الدخول في الحلقه الثانيه التي تقوم بأرسال صفر منطقي علي طرف الداتا DSثم اعطاء نبضه علي الطرف SH_CP من خلال الامرSH وتكرار ذلك  16 مره من خلال الحلقه التكراريه ثم الخروج من الحلقه التكراريه واعطاء نبضه علي الطرف ST_CPمن خلال الامر STوبذللك يجعل الخرج كله لمسجلي الازاحه صفر اي الليدات تنطفئ و الانتظار 100 مللي ثانيه من خلال داله الوقت time() وتكرار ذلك ست مرات اي ان الخرج يكون عباره عن اضاءه الليدات كلها ثم انطفائها كلها وتكرار ذلك ست مرات

هنا يتم ادخال بيانات معينه موجوده داخل مصفوفه بيانات الي الطرف DS ثم اخراج هذه البيانات مباشرا علي خرج المسجلات من خلا اعطاء النضه   SH  وSTمعا والانتظار200 مللي ثانيه لاننا سوق نستدعي داله الزمن مرتين وتكرار  وهنا فقط صممنا هذا الجزء لفهم استخلاص البيانات من المصفوفات الاحاديه والمعرفه في بدايه البرنامج كما يلي



هذا الجزء  نوضح فيه كيفيه استخدام المصفوفات الثنائيه  حيث اننا سوف نعرض بيانات هذه المصفوفه تنازليا ثم تصاعديا او بمعني اخر نعرض بيانات المصفوفه من اول المصفوفه الي اخرها ثم من اخرها الي اولها ولذل استخدمنا حلقتين تكراريتين بداخل حلقه تكراريه حيث ان الحلقه التكراريه الاولي  تعرض  بيانات المصفوفه من اولها الي اخرها عن طريق المتغير v و المتغير x ثم الحلقه التكرايه الثانيه تعرض بيانات المصفوفه من اخرها الي اولها ايضا عن طريق نفس المتغيرين ولكن هنا النتغير v سوف يبدأ من 9 ويتناقص بعد كل حلقه ليصل الي بدايه المصفوفه  مع ملاحظه ان المتغير v هو المسئول عن جلب ا لبيانات رئسيامن المصفوفه اما المتغير x فهو المسئول عن البيانات الموجوده بالمصفوفه رئسيا كما بالصوره التاليه

ملاحظه هامه

في بدايه البرنامج تم استخدام الموجه define# وذلك لتعريف لتغير تعريف داخل برنامج الميكرو سي او بمعني اخر استبدال امر بتعريف معين فمثلا هنا تم استبدل porta.f0  ب DS وذلك لتسهيل عمليه فهم البرنامج وبالمثل عرفنا كلا من porta.f1=0;porta.f1=1; ب SH كما بالاوامر التاليه



استخدام السفن سجمنت مع 74HC595

مخطط التجربة

البرنامج (Software)


 #define DS porta.f1
 #define SH porta.f0=0;porta.f0=1;
 #define ST porta.f2=0;porta.f2=1;
    unsigned int const t[]={0b00000010,0b10011111,0b00100100,0b00001100,
                            0b10011000,0b01001000,0b01000000,0b00011111,
                            0b00000000,0b00001000,0b00010000,0b11000000,
                            0b01100010,0b10000100,0b01100000,0b01110000};
void time(){delay_ms(1000);}

int ah,o,rest_divisible,i;

 void convert_data(unsigned int da) {
  ah=da;for(o=0;o<8;o++){rest_divisible=ah%2;
DS=rest_divisible;SH ah=ah/2;}}


void main ()
{
trisa=0;
ANSEL = 0b00000000;
  while(1){
for(i=0;i<16;i++){convert_data(t[i]); ST time();}
} }


شرح البرنامج

برنامج بسيط لعرض الاعداد من 1 الي 15 علي السفن سجمنت مثل التجربه السادسه ولكن هنا سوف نستخدم مسجل الازاحه 74HC595والاختلاف يكمن في شئيين الاول ان هنا سوف يتغير مسك الارقام فمثلا الرقم واحد في التجربه الخامسه كان (0b11111001) اما هنا سوف يكون(b10011111)  والشئ الاخر اننا هنا وفرنا اطراف للميكرو حيث نستخدم ثلاث اطراف فقط بدل من سبعه في التجربه السادسه
داله التحويل

وظيفه الداله
تقوم هذه الداله بتحويل البيانات من النظام السداسي أو العشري الي النظام الثنائي ولكن بشكل متتالي علي طرف واحد من الميكرو ليدخل الي طرف مسجل الأزاحهDSوالذي يقوم بتحويل البيانات من الشكل المتتالي الي الشكل المتوازي علي خرج مسجل الأزاحه

عمل الداله

وضع البيانات المراد تحويلها داخل المتغير ah
ah=da;
حلقه تكراريه عدد حلقاتها مساوي لعرض البيانات وهنا عرض اليبانات 8 بت لان بيانات المسك  للسفن سجمنت 8 بت
for(o=0;o<8;o++)
قسمه ما بداخل المتغير   ah  علي  2 ووضع باقي القسمه في متغير باقي القسمه rest_divisible
rest_divisible=ah%2
جعل ما بداخل المتغير rest_divisible علي خرج الميكرو وهوالطرف المغذي لطرف   DS  لمسجل الأزاحه
DSd=rest_divisible
أعطاء نبضه علي الطرفSHلمسجل الأزاحه الخاص بالبيانات حتي يتم تخزين البت المحول داخل مسجل الأزاحه
SH
جعل قيمه المتغير الجديده ah هي  القيمه القديمه مقسومه علي 2 وبذلك بعد كل حلقه تكراريه يتم التخلص من بت من البتات الثماني الخاصه بالبيانات مع ملاحظه وضع ناتج القسمه في المتغير بدون كسر
ah=ah/2

الجدول التالي يوضح مثال لرقم 20 كيفيه تحويله في الداله الي رقم ثنائي متتالي علي طرف واحد للميكرو
Ah-new
rest_divisible
Ah-old
o
10
0
20
0
5
0
10
1
2
1
5
2
1
0
2
3
0
1
1
4
0
0
0
5
0
0
0
6
0
0
0
7












اذا الملخص انه اي بينات سوف توضع بهذه الداله سوف يتم وضعها علي طرف  واحد للميكرو الموصل بطرف البيانات لمسجل ومن ثم أظهار هذه البيانات المتتاليه علي طرف الميكرو علي هيئه بيانات متسلسله علي أطراف المسجل وضع بيانات المصفوفه tعلي داله التحويل لتحويل بيانات هذه الداله الي بيانات يتم عرضها علي مسجل الازاحه74HC595مع ملاحظه ان بتغير قيمه المتغير(i) يتغير معها البيانات المعروضه وبذلك نعرض البيانات من صفر الي 9 ومن A الي Fوهذه البيانات الموجوده بالمصفوفه  t   والتي تسمي بالمسك للسفن سجمنت

فيديو التجربة


ليست هناك تعليقات :

إرسال تعليق