أهلاً و سهلاً بكم مجدداً
اليوم سنتحدث سنسلط الضوء على فكرة على درجة كبيرة من الأهمية تساعدنا على قيادة عدد كبير من البواعث الضوئية 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 و الهدف منه إعطاء تحكم اكبر بمسجل الإزاحة من حيث ظهور الخرج, فأنا أريد أن لا تضيئ كل البواعث الضوئية بمجرد تشغيل المسجل , فهذا خطأ .
يمكنك مشاهدة الفيديو لترى تطبيق البرنامج الفعلي .
الآن و بعد أن تمكنا من الإلمام بطريقة استخدام مسجل إزاحة واحد , ننتقل لسؤال مهم , هل بإمكاننا التحكم بمسجلي أزاحة باستخدام نفس عدد المداخل التي استخدمناها للتحكم بمسجل إزاحة واحد ؟
سأُجيب عن هذا التساؤل في البوست القادم , إلى ذلك الوقت إلى اللقاء .
موضوع مهم للغايه
ردحذفعندي ملاحظه
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
^^
صحيح .
حذفكنت ببرمجية Fritzing قد رسمتها بوقت سابق و لم أحفظ التصميم للآسف ,لذلك وضعت الملاحظة بشكل كتابي فقط
نعم التوصيل للمكثف يكون بين المدخل رقم 12 و الأرضي ,و ليس 13
شكراً لك على تفاعلك صديقي
^^
حذفمشكور اخي
ولازم نرجع نشكرك على المجهود الرائع في هذه المدونه
ردحذفكيف احصل على " المايكر كنترول.؟
ردحذفالمايكروكنترولر عباردة عن حاسوب صغير على شكل دارة متكاملة IC يمكن شراؤه من اي متجر الكترونيات قريب منك "ما هو بلد اقامتك ؟ " .
حذفيمكن شحنه ايضاً عن طريق الأنترنت باجور شحن مخفضة , و استطيع تزويدك ببعضها .
لو سمحت ما فائده الرجل رقم 16 vcc فلا اجد لها فائده في الشروحات ولا حتى في ال datasheet ارجو الافاده
ردحذفال VCC هو تغذية الدارة , و انا لم تغذها فلن تعمل هذه الدائرة ابداً .
حذفالسلام عليكم
ردحذفممكن سؤال // اريد تشغيل 56 سفن سكمنت بأستخدام البرتوكول SPI
http://diy.viktak.com/2011/02/6-digit-display-module.html
فكم ايسي 74hc595 يمكنني ربطه على البرتوكول SPI للعلم سيكون الربط كما في الرابط
أزال المؤلف هذا التعليق.
حذفأفضل استخدم max7219 فستحتاج فقط لدارة واحدة منها لكل 8 مقطعات .
حذفاي ستحتاج ل 7 دوائر منها " في الshift reg ستحتاج على الأقل 56 مسجل ازاحة لذلك و برمجة صعبة جداً لذلك
السلام عليكم
حذفاولا اريد أشكرك جزيل الشكر على ردك وسع صدرك
وجدت فكره تستخدم 74hc595 في تشغيل سفن سكمنت يعني لكل 8 سفن سكمنت احتاج الى قطعتين فقط وعليه 56 سفن سكمنت احتاج الى 16 فقط
لاحظ هذا مشروع بسيط
http://up.top4top.net/downloadf-top4top_79b74601b61-rar.html
تحياتي
مشاكل هذا الربط بسيطة :
حذف1) من النشرة الفنية للمسجل الازاحة يعطينا انه لا يمكننا ربط أكثر من 8 مسجلات ازاحة معاً "بوصل المدخل 9 و 14 لكل دارتين معاً " و عليه ستحتاج لتعرف أول 8 مسجلات ازاحة على مداخل ال spi و ال 8 الأخرى ستعرف لهما مداخل جديدة من الأردوينو "ستلاحظ بطء في النظام بشكل عام .
السلام عليكم
ردحذفاذا كان معلوم من نشره فنيه للسفن سكمنت تيار كل ليد 10ma ومتكامله اقصى تيار لها 35 ملي امبير وبالطبع هذا لايمكن وصول اليه فكم تيار مسموح به لضمان عدم تلف متكامله (74hc595)
وهل نضع ترانزستور لتقليل تيار لاني لاحظت بهذا التصميم لم يستخدم ترانزستور
http://www.electrodragon.com/w/4-Digi,_7-Segment_LED_Display_Module_(595_Static_Control,_Arduino_Supported)#Reference
فأرجو التوضيح
في الرابط هو مستعمل PCB Board و قد يتضمن مقاومات لتقليل التيار .
حذفالدارة المتكاملة 74595 كل رجل فيها تعطي 35 ملي امبير , اي انها تكفي لتغذية المقطع السباعي , فقط ضع مقاومة لحمايتها من التيار العالي .
في حال استخدام ال مقطع السباعي كمصرف للتيار current sink وصلها مع ترانزستور
السلام عليكم . ممكن رسم خارطه استطيع ان اتحكم بتشغيل وأطفاء مصباح ليد عدد 20 عبر البلوتوث
ردحذفهل نستطيع عمل برنامج ملحق على طريقة
ردحذف010101110
الصفر تعني اطفاء الليد والواحد تعني اليد يعمل ؟؟
شرح ممتاز لكن لم افهم لما قلت انه دارات 74 تبرمج.....انا ظننت انها تتكون من بوابات منطقية وان دارات ال pic هي التي تبرمج.....انا درست ان دارات 74 و 74hc هي دارات مندممجة بسيطة تقوم بوظيفة واحدة لانها مصنوعة داخليا لاداء شيء واحد.....فكيف تقول انها تبرمج يعني فيها processor مثل دارات الميكروكونترولر
ردحذف