الخميس، 29 نوفمبر، 2012

مسجل الإزاحة Shift Register 74595


أهلاً و سهلاً بكم مجدداً

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





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


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


تنقسم مسجلات الإزاحة إلى عدة أنواع و هي 




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

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

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



سنشرح كل وظيفة كل مدخل من مداخل مسجل الإزاحة .
 الرجل # 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 




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

صورة تبين التوصيل , مع الأنتباه إلى أن المكثق مربوط مع المدخل رقم 12 و الأرضي


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




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

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

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

Peripheral Interface    و هو طريقة 


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

الرابط هنا 

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

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

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

التالية 

    shiftOut(datapin,clockpin,bitorder,value);
حيث :

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

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

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




----------------------------------------------------------------------------
// انسخ البرنامج من هنا 
//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//You should have received a copy of the GNU General Public License
// along with this program. If not, see http://www.gnu.org/licenses/

//****************************************************
//Name :Mohannad Rawashdeh .
//Date "30/6/2012 3:00pm
// Description: This  Code for using a 74HC595 Shift Register           //
// to count from 0 to 255  , Using arduino pin # 8,10,11,12
// Programmed for http://genotronex.blogspot.com/
                
//****************************************************************
//define the Pins
//Pin connected to latch clock  of 74HC595 ""pin 12""
int latchPin = 8;
//Pin connected to shift clock of 74HC595 ""PIN 11 "
int clockPin = 12;
////Pin connected to serial Data A of 74HC595 "pin 14 "
int dataPin = 11;
///Output pin controller of 74HC595""pin 13""
int output_pin=10;
//___________________________________________________

void setup() {
  //set pins to output so you can control the shift register
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(output_pin, OUTPUT);
  digitalWrite(output_pin,HIGH); // this instruction to disable Output pins
}

void loop() {
  // count from 0 to 255 and display the number 
  // on the LEDs
  for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
    // take the latchPin low so 
    // the LEDs don't change while you're sending in bits:
    digitalWrite(latchPin, LOW);
    // shift out the bits:
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);  

    //take the latch pin high so the LEDs will light up:
    digitalWrite(latchPin, HIGH);
    digitalWrite(output_pin,LOW);// enable OUTPUT Pins
    // pause before next value:
    delay(250);
    
    digitalWrite(output_pin,HIGH); // this instruction to disable Output pins again .
  }
}
   //----------------------------------------------------------------------


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

    الآن و بعد أن تمكنا من الإلمام بطريقة استخدام مسجل إزاحة واحد , ننتقل لسؤال مهم , هل بإمكاننا التحكم بمسجلي أزاحة باستخدام نفس عدد المداخل التي استخدمناها للتحكم بمسجل إزاحة واحد ؟ 

سأُجيب عن هذا التساؤل في البوست القادم , إلى ذلك الوقت إلى اللقاء .

16 التعليقات :

  1. موضوع مهم للغايه
    عندي ملاحظه
    i think pin connection using fritzing software has an error
    capacitor connect between pin 13 and gnd,instead of pin 12 and gnd
    it must be the second one as you mention above
    ^^

    ردحذف
    الردود
    1. صحيح .

      كنت ببرمجية Fritzing قد رسمتها بوقت سابق و لم أحفظ التصميم للآسف ,لذلك وضعت الملاحظة بشكل كتابي فقط

      نعم التوصيل للمكثف يكون بين المدخل رقم 12 و الأرضي ,و ليس 13

      شكراً لك على تفاعلك صديقي

      حذف
  2. ولازم نرجع نشكرك على المجهود الرائع في هذه المدونه

    ردحذف
  3. كيف احصل على " المايكر كنترول.؟

    ردحذف
    الردود
    1. المايكروكنترولر عباردة عن حاسوب صغير على شكل دارة متكاملة IC يمكن شراؤه من اي متجر الكترونيات قريب منك "ما هو بلد اقامتك ؟ " .

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

      حذف
  4. لو سمحت ما فائده الرجل رقم 16 vcc فلا اجد لها فائده في الشروحات ولا حتى في ال datasheet ارجو الافاده

    ردحذف
    الردود
    1. ال VCC هو تغذية الدارة , و انا لم تغذها فلن تعمل هذه الدائرة ابداً .

      حذف
  5. السلام عليكم
    ممكن سؤال // اريد تشغيل 56 سفن سكمنت بأستخدام البرتوكول SPI
    http://diy.viktak.com/2011/02/6-digit-display-module.html
    فكم ايسي 74hc595 يمكنني ربطه على البرتوكول SPI للعلم سيكون الربط كما في الرابط

    ردحذف
    الردود
    1. أزال المؤلف هذا التعليق.

      حذف
    2. أفضل استخدم max7219 فستحتاج فقط لدارة واحدة منها لكل 8 مقطعات .

      اي ستحتاج ل 7 دوائر منها " في الshift reg ستحتاج على الأقل 56 مسجل ازاحة لذلك و برمجة صعبة جداً لذلك

      حذف
    3. السلام عليكم
      اولا اريد أشكرك جزيل الشكر على ردك وسع صدرك
      وجدت فكره تستخدم 74hc595 في تشغيل سفن سكمنت يعني لكل 8 سفن سكمنت احتاج الى قطعتين فقط وعليه 56 سفن سكمنت احتاج الى 16 فقط
      لاحظ هذا مشروع بسيط
      http://up.top4top.net/downloadf-top4top_79b74601b61-rar.html

      تحياتي

      حذف
    4. مشاكل هذا الربط بسيطة :
      1) من النشرة الفنية للمسجل الازاحة يعطينا انه لا يمكننا ربط أكثر من 8 مسجلات ازاحة معاً "بوصل المدخل 9 و 14 لكل دارتين معاً " و عليه ستحتاج لتعرف أول 8 مسجلات ازاحة على مداخل ال spi و ال 8 الأخرى ستعرف لهما مداخل جديدة من الأردوينو "ستلاحظ بطء في النظام بشكل عام .

      حذف
  6. السلام عليكم
    اذا كان معلوم من نشره فنيه للسفن سكمنت تيار كل ليد 10ma ومتكامله اقصى تيار لها 35 ملي امبير وبالطبع هذا لايمكن وصول اليه فكم تيار مسموح به لضمان عدم تلف متكامله (74hc595)
    وهل نضع ترانزستور لتقليل تيار لاني لاحظت بهذا التصميم لم يستخدم ترانزستور
    http://www.electrodragon.com/w/4-Digi,_7-Segment_LED_Display_Module_(595_Static_Control,_Arduino_Supported)#Reference
    فأرجو التوضيح

    ردحذف
    الردود
    1. في الرابط هو مستعمل PCB Board و قد يتضمن مقاومات لتقليل التيار .

      الدارة المتكاملة 74595 كل رجل فيها تعطي 35 ملي امبير , اي انها تكفي لتغذية المقطع السباعي , فقط ضع مقاومة لحمايتها من التيار العالي .

      في حال استخدام ال مقطع السباعي كمصرف للتيار current sink وصلها مع ترانزستور

      حذف
  7. السلام عليكم . ممكن رسم خارطه استطيع ان اتحكم بتشغيل وأطفاء مصباح ليد عدد 20 عبر البلوتوث

    ردحذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.