أهلاً و سهلاً بكم مجدداً
اليوم سنتحدث سنسلط الضوء على فكرة على درجة كبيرة من الأهمية تساعدنا على قيادة عدد كبير من البواعث الضوئية 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
أن تكون هذا الرجل في وضعية منخفض 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
الشكل أدناه يبين توصيل الدارة كهربائيا .
الآن و قبل البدء بالبرمجة , سأوضح امر مهم جديد , ألا وهو أمر shiftOut
قد فاتني ذكر أمر هو أن مسجل الإزاحة 74595 , تتم برمجته
بطريقة التخاطب الشهيرة SPI و هي اختصار Serial
Peripheral Interface و هو طريقة
بطريقة التخاطب الشهيرة SPI و هي اختصار Serial
Peripheral Interface و هو طريقة
نعود للأمر shiftOut , هذا الأمر هو الذي سنقوم من خلاله
بنقل البيانات من المتحكم إلى مسجل الإزاحة .
بنقل البيانات من المتحكم إلى مسجل الإزاحة .
الطريقة سهلة , يكتب الكود الخاص بمقل البيانات على الصيغة
التالية
التالية
shiftOut(datapin,clockpin,bitorder,value);
حيث :
datapin: هو المدخل المسؤول عن إخراج البيانات بت بت .
clockpin: المدخل المسؤؤل عن دخل الساعة المنظم للمتحكم , و يتغير الخرج عندما يقدح المسجل باستخدام هذا المدخل .
bitorder: هو خيار يحدد طريقة نقل المعلومات إلى المسجل
إما أن تكون MSBFIRST أي ابتداءاً من البت ذو القيمة الأعلى اهمية للأقل أهمية "من اليسار لليمين "
أو أن تكون LSBFIRST أي من البت الأقل أهمية للأعلى أهمية " من اليمين لليسار"
الوضع الإفتراضي يكون نقل البيانات MSBFIRST
----------------------------------------------------------------------------
// انسخ البرنامج من هنا
//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 و الهدف منه إعطاء تحكم اكبر بمسجل الإزاحة من حيث ظهور الخرج, فأنا أريد أن لا تضيئ كل البواعث الضوئية بمجرد تشغيل المسجل , فهذا خطأ .
يمكنك مشاهدة الفيديو لترى تطبيق البرنامج الفعلي .
الآن و بعد أن تمكنا من الإلمام بطريقة استخدام مسجل إزاحة واحد , ننتقل لسؤال مهم , هل بإمكاننا التحكم بمسجلي أزاحة باستخدام نفس عدد المداخل التي استخدمناها للتحكم بمسجل إزاحة واحد ؟
سأُجيب عن هذا التساؤل في البوست القادم , إلى ذلك الوقت إلى اللقاء .