المعهد التقني المتوسط الاول
اهلا وسهلا بكم في المنتدى

انضم إلى المنتدى ، فالأمر سريع وسهل

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

مسجلات الازاحة Shift Register

اذهب الى الأسفل

مسجلات الازاحة Shift Register Empty مسجلات الازاحة Shift Register

مُساهمة من طرف أيمن الإبراهيم الأحد مارس 02, 2014 9:20 pm

اهلا وسهلا بكم من جديد في منتدى المعهد التقني المتوسط
--------------------------------------------------
اليوم سنتحدث سنسلط الضوء على فكرة على درجة كبيرة من الأهمية تساعدنا على قيادة عدد كبير من البواعث الضوئية LED  ألا و هو مسجلات الإزاحة Shift Register
مسجلات الازاحة Shift Register Egy-tech13937951981

ا هو مسجل الإزاحة Shift Register ؟

هو مجموعة متسلسلة من القلابات flip flop التي لها نفس دور الساعة CLK , و خرجها متصل بقلاب آخر , هذا يعمل على نقل البيانات بين المسجلات بتسلسل , و تنتقل البيانات عندما يتغير دور الساعة صعوداً أو هبوطاً .

مسجلات الازاحة Shift Register Flip+flop
تنقسم مسجلات الإزاحة إلى عدة أنواع و هي 




[ltr]1.   Serial in , serial out " SISO "[/ltr]
[ltr]2.   Serial in ,parallel out "SIPO"[/ltr]
[ltr]3.   Parallel in ,serial out "PISO"[/ltr]
[ltr]Our shift register used as  " SISO " or "SIPO"[/ltr]
سنستخدم مسجل الإزاحة 74HC595  و الذي سيكون له 

استخدامات كثيرة في الدروس القادمة , نظراً لسهولة برمجته .

توزيع الأرجل لهذه الدارة المتكاملة :


مسجلات الازاحة Shift Register Pin+layout

سنشرح كل وظيفة كل مدخل من مداخل مسجل الإزاحة .
 الرجل # 14:
الرجل المسؤولة عن إدخال البيانات تسلسلياً . يتم إزاحة 

البيانات على هذا المدخل
الرجل رقم 13 "تمكين الخرج ":
هذا المدخل مسؤول عن إظهار البيانات على المخرج  ، يجب 

أن تكون هذا الرجل في وضعية منخفض  LOW   حتى 

   يظهر الخرج.

الرجل # 12 :

  Storage latch input  تقوم هذه الرجل بوظيفة إمساك 

البيانات و تخزينها عند تتحول حالتها إلى وضع مرتفع HIGH .
الرجل # 11 :

دخل الساعة , عندما تكون في وضع مرتفع HIGH تسمح 

للبيانات على الدخل التسلسلي" مدخل #14 " بإزاحة بيانات 

بمقدار 8 بت .

الرجل # 10 :

مدخل التصفير RESET 

إذا كان هذا المدخل بوضع منخفض LOW فإن الخرج يكون 

قيمته صفر .

لذلك نضع هذا المربط على الوضع المرتفع HIGH إذا أردنا 

ظهور نتائج المسجل .

الرجل# 9:
تسمى Serial Data Output  تعمل على إزاحة بيانات الخرج 

"8بت" التي تظهر باتجاه مسجل إزاحة آخر , أي بأختصار لو 

أردنا شبك أكثر من مسجل إزاحة واحد يمكننا ذلك بوصل هذه 

الرجل مع الرجل #14 في المسجل الآخر .

الأرجل 15 , 1-7 :


أرجل الخرج " 8 بت " .

يمكنك العودة إلى النشرة الفنية  الحصول على مزيد من 

المعلومات.

باستخدام مسجل الإزاحة , نحتاج فقط ل 3-4 أرجل ففقط من 

المتحكم للتحكم ب 8 بت و هذا يعتبر مفيد جداً لو أردنا 

   استخدام المتحكم في تطبيقات متعددة .




لنبدأ الآن بتجهيز معداتنا , لنبدأ استعمال هذه الدارة المتكاملة .



سنحتاج لهذه التجربة المكونات التالية : 

1) بطاقة أردوينو .

2)LED عدد 8 


3) مسجل إزاحة من النوعShift register 74HC595


4)بعض الأسلاك Some wires


5)مقاومة   100Ohm عدد 8


6)مكثق 100nF


7) لوحة تعليمية مثقوبة BreadBoard 


مسجلات الازاحة Shift Register DSCF0091




الشكل أدناه يبين توصيل الدارة كهربائيا .



مسجلات الازاحة Shift Register Shift_register_concept
صورة تبين التوصيل , مع الأنتباه إلى أن المكثق مربوط مع المدخل رقم 12و الأرضي



 و هذا مخطط الدارة لمن يستصعب من فهم المخطط أعلاه 


مسجلات الازاحة Shift Register 2




الآن و قبل البدء بالبرمجة , سأوضح امر مهم جديد , ألا وهو أمر shiftOut


قد فاتني ذكر أمر هو أن مسجل الإزاحة 74595 , تتم برمجته 

بطريقة التخاطب  الشهيرة SPI  و هي اختصار Serial 

Peripheral Interface    و هو طريقة 


لنقل البيانات تزامنياً , يمكن بداية الإطلاع على مكتبتها على 

الرابط هنا 


نعود للأمر shiftOut , هذا الأمر هو الذي سنقوم من خلاله 

بنقل البيانات من المتحكم إلى مسجل الإزاحة .


الطريقة سهلة , يكتب الكود الخاص بمقل البيانات على الصيغة 

التالية 



[ltr]    shiftOut(datapin,clockpin,bitorder,value);[/ltr]

حيث :


datapin: هو المدخل المسؤول عن إخراج البيانات بت بت .
clockpin: المدخل المسؤؤل عن دخل الساعة المنظم للمتحكم , و يتغير الخرج عندما يقدح المسجل باستخدام هذا المدخل .
bitorder: هو خيار يحدد طريقة نقل المعلومات إلى المسجل 
إما أن تكون MSBFIRST أي ابتداءاً من البت ذو القيمة الأعلى اهمية للأقل أهمية "من اليسار لليمين "
أو أن تكون  LSBFIRST  أي من البت الأقل أهمية للأعلى أهمية " من اليمين  لليسار"


الوضع الإفتراضي يكون نقل البيانات MSBFIRST 


value: هي القيمة التي ننوي إظهارها على الخرج .


مسجلات الازاحة Shift Register DSCF0080



----------------------------------------------------------------------------

// انسخ البرنامج من هنا 
الكود:

[size=18][font=Arial,Helvetica,sans-serif][/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//This program is free software: you can redistribute it and/or modify[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//it under the terms of the GNU General Public License as published by[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//the Free Software Foundation, either version 3 of the License, or[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//(at your option) any later version.[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//This program is distributed in the hope that it will be useful,[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//but WITHOUT ANY WARRANTY; without even the implied warranty of[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]// GNU General Public License for more details.[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//You should have received a copy of the GNU General Public License[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]// along with this program. If not, see http://www.gnu.org/licenses/[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]
[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//****************************************************[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//Name :Mohannad Rawashdeh .[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//Date "30/6/2012 3:00pm[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]// Description: This  Code for using a 74HC595 Shift Register           //[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]// to count from 0 to 255  , Using arduino pin # 8,10,11,12[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]// Programmed for http://genotronex.blogspot.com/[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]                [/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//****************************************************************[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//define the Pins[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//Pin connected to latch clock  of 74HC595 ""pin 12""[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]int latchPin = 8;[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//Pin connected to shift clock of 74HC595 ""PIN 11 "[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]int clockPin = 12;[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]////Pin connected to serial Data A of 74HC595 "pin 14 "[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]int dataPin = 11;[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]///Output pin controller of 74HC595""pin 13""[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]int output_pin=10;[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]//___________________________________________________[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]
[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]void setup() {[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]  //set pins to output so you can control the shift register[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]  pinMode(latchPin, OUTPUT);[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]  pinMode(clockPin, OUTPUT);[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]  pinMode(dataPin, OUTPUT);[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]  pinMode(output_pin, OUTPUT);[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]  digitalWrite(output_pin,HIGH); // this instruction to disable Output pins[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]}[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]
[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]void loop() {[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]  // count from 0 to 255 and display the number [/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]  // on the LEDs[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]  for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]    // take the latchPin low so [/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]    // the LEDs don't change while you're sending in bits:[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]    digitalWrite(latchPin, LOW);[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]    // shift out the bits:[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);  [/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]
[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]    //take the latch pin high so the LEDs will light up:[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]    digitalWrite(latchPin, HIGH);[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]    digitalWrite(output_pin,LOW);// enable OUTPUT Pins[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]    // pause before next value:[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]    delay(250);[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]    [/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]    digitalWrite(output_pin,HIGH); // this instruction to disable Output pins again .[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]  }[/font][/size]



[size=18][font=Arial,Helvetica,sans-serif]}[/font][/size]

   //----------------------------------------------------------------------




مسجلات الازاحة Shift Register DSCF0087
   
   في البرنامج هنا , قد تلاحظ استخدام مدخل إضافي هو PIN 10 من متحكم AVR و الهدف منه إعطاء تحكم اكبر بمسجل الإزاحة من حيث ظهور الخرج, فأنا أريد أن لا تضيئ كل البواعث الضوئية بمجرد تشغيل المسجل , فهذا خطأ .
   يمكنك مشاهدة الفيديو لترى تطبيق البرنامج الفعلي .
أيمن الإبراهيم
أيمن الإبراهيم
مدير الموقع

عدد المساهمات : 63
نقاط : 7706
تاريخ التسجيل : 06/01/2014
العمر : 30
الموقع : دمشق

https://reno.syriaforums.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى