هناك احتمالات في التصميم المضمن حيث لا يتوفر لديك ما يكفي من دبابيس الإدخال / الإخراج المتوفرة في وحدة التحكم الدقيقة. يمكن أن يكون ذلك بسبب أي سبب ، قد يكون التطبيق الخاص بك يحتاج إلى مصابيح LED متعددة أو أنك تريد استخدام شاشات متعددة من 7 مقاطع ، لكن ليس لديك دبابيس إدخال / إخراج مطلوبة في وحدة التحكم الدقيقة الخاصة بك. هنا يأتي مكون مثالي ، سجل التحول. يقبل Shift Register البيانات التسلسلية ويعطي مخرجات متوازية لا يتطلب الأمر سوى 3 دبابيس للاتصال بالميكروكونترولر الخاص بك وستحصل منه على أكثر من 8 دبابيس إخراج. يعد 74HC595 أحد سجلات التحول الشائعة. لديها 8 السجل تخزين بت و 8 السجل تحول قليلا. تعرف على المزيد حول سجلات المناوبة هنا.
ستقدم البيانات التسلسلية إلى سجل الإزاحة وسيتم إغلاقها في سجل التخزين ثم سيتحكم سجل التخزين في المخرجات الثمانية. إذا كنت تريد المزيد من الإنتاج ، فما عليك سوى إضافة سجل تحول آخر. من خلال تسلسل اثنين من سجلات التحول ، ستحصل على 8 مخرجات إضافية ، إجمالي الناتج 16 بت.
سجل التحول 74HC595:
فيما يلي مخطط تفصيلي لـ 74HC595 وفقًا لورقة البيانات-
HC595 لديه 16 دبابيس ؛ إذا رأينا ورقة البيانات ، فسوف نفهم وظائف الدبوس-
و QA إلى QH ، من أرقام دبوس 1-7 و 15 استخدام 8 بت الناتج من السجل التحول، حيث و دبوس 14 ويستخدم لاستقبال البيانات التسلسلية. يوجد أيضًا جدول حقيقة حول كيفية استخدام دبابيس أخرى والاستفادة من الوظائف الأخرى لسجل الإزاحة.
عندما نكتب الكود الخاص بواجهة 74HC595 ، سنطبق جدول الحقيقة هذا للحصول على المخرجات المرغوبة.
الآن ، سنقوم بواجهة 74HC595 مع PIC16F877A والتحكم في 8 مصابيح LED. لقد قمنا بتوصيل 74HC595 سجل التحول مع ميكروكنترولر أخرى:
- Interfacing 74HC595 Serial Shift سجل مع Raspberry Pi
- كيفية استخدام Shift Register 74HC595 مع Arduino Uno؟
- واجهات LCD مع NodeMCU باستخدام سجل التحول
المكونات المطلوبة:
- PIC16F877A
- 2 قطعة 33pF مكثفات قرص السيراميك
- 20 ميجا هرتز كريستال
- 4.7 كيلو المقاوم
- 8 قطعة المصابيح
- 1k المقاوم -1 قطعة (8 قطع 1k المقاومات مطلوبة إذا كانت هناك حاجة إلى مقاومات منفصلة على كل المصابيح)
- 74HC595 جيم
- محول حائط 5 فولت
- بيئة برمجة الموافقة المسبقة عن علم
- اللوح والأسلاك
مخطط الرسم البياني:
في مخطط الدائرة ، قمنا بتوصيل دبوس البيانات التسلسلي ؛ على مدار الساعة والقوية (مزلاج) دبوس على متحكم RB0 و RB1 و RB2 على التوالي. هنا استخدمنا مقاومًا واحدًا لـ 8 مصابيح LED. وفقًا لجدول الحقيقة ، قمنا بتمكين الإخراج عن طريق توصيل دبوس 13 من 74HC595 بالأرض. و QH ترك دبوس مفتوحة ونحن لن تتالي آخر 74HC595 معها. قمنا بتعطيل علامة الإدخال الواضحة عن طريق توصيل دبوس 10 من سجل الإزاحة بـ VCC.
المذبذب البلوري متصل بمسامير OSC في المتحكم الدقيق. لا تحتوي PIC16F877A على أي مذبذب داخلي. في هذا المشروع سوف نضيء واحدًا تلو الآخر من Q0 إلى Q7 باستخدام مسجل التحول.
لقد بنينا الدائرة في لوح التجارب-
شرح الكود:
يتم تقديم رمز كامل للتحكم في مصابيح LED مع سجل التحول في نهاية المقالة. كما هو الحال دائمًا ، نحتاج إلى ضبط بتات التكوين في الميكروكونترولر PIC.
#pragma config FOSC = HS // Oscillator Selection bits (HS مذبذب) #pragma config WDTE = OFF // Watchdog Timer تمكين البت (WDT معطل) #pragma config PWRTE = OFF // Power-up Timer تمكين بت (PWRT معطل) # pragma config BOREN = ON // Brown-out Reset Enable bit (BOR ممكّن) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circial Programming Enable bit (RB3 / PGM pin به وظيفة PGM ؛ منخفضة -تمكين برمجة الجهد) #pragma config CPD = إيقاف // بت حماية رمز ذاكرة EEPROM للبيانات (إيقاف حماية رمز EEPROM للبيانات) #pragma config WRT = إيقاف // Flash Program Memory Write Enable bits (Write protection off؛ all program memory may be مكتوبة بواسطة EECON control) #pragma config CP = OFF // بت حماية رمز ذاكرة برنامج Flash (إيقاف حماية الرمز)
بعد ذلك أعلنا عن التردد البلوري المطلوب للتأخير وإعلان التوصيل لـ 74HC595.
#تضمن
بعد ذلك أعلنا عن وظيفة system_init () لتهيئة اتجاه الدبوس.
باطل system_init (باطل) { TRISB = 0x00 ؛ }
قمنا بإنشاء نبضة الساعة ونبض المزلاج باستخدام وظيفتين مختلفتين
/ * * ستعمل هذه الوظيفة على تمكين الساعة. * / ساعة باطلة (باطلة) { CLK_595 = 1 ؛ __delay_us (500) ؛ CLK_595 = 0 ، __delay_us (500) ؛ }
و
/ * * هذه الوظيفة سوف قوية وتمكين مشغل الإخراج * / ستروب باطل (باطل) { STROBE_595 = 1 ؛ __delay_us (500) ؛ STROBE_595 = 0 ، }
بعد هاتين الوظيفتين ، أعلنا عن وظيفة data_submit (بيانات int غير الموقعة) لإرسال البيانات التسلسلية إلى 74HC595.
data_submit (بيانات int غير موقعة) { for (int i = 0؛ i <8؛ i ++) { DATA_595 = (data >> i) & 0x01؛ ساعة حائط()؛ } ستروب () ؛ // تم إرسال البيانات أخيرًا }
في هذه الدالة نحن نقبل البيانات 8bit و ترسل كل بت باستخدام اثنين من مشغلي المختصة بالبت ترك التحول و و المشغل. نقوم أولاً بنقل البيانات واحدة تلو الأخرى ونكتشف البت الدقيق سواء كان 0 أو 1 باستخدام عامل التشغيل AND مع 0x01. كل يتم تخزين البيانات بواسطة نبض مدار الساعة و إخراج البيانات النهائي يتم ذلك باستخدام نبض مزلاج أو القوية. في هذه العملية ، سيكون إخراج البيانات هو MSB (البت الأكثر أهمية) أولاً.
في الوظيفة الرئيسية ، قدمنا الملف الثنائي وجعلنا دبابيس الإخراج عالية واحدة تلو الأخرى.
system_init () ؛ // يستعد النظام بينما (1) { data_submit (0b00000000) ؛ __delay_ms (200) ؛ data_submit (0b10000000) ؛ __delay_ms (200) ؛ data_submit (0b01000000) ؛ __delay_ms (200) ؛ data_submit (0b00100000) ؛ __delay_ms (200) ؛ data_submit (0b00010000) ؛ __delay_ms (200) ؛ data_submit (0b00001000) ؛ __delay_ms (200) ؛ data_submit (0b00000100) ؛ __delay_ms (200) ؛ data_submit (0b00000010) ؛ __delay_ms (200) ؛ data_submit (0b00000001) ؛ __delay_ms (200) ؛ تقديم البيانات (0xFF) ؛ __delay_ms (200) ؛ } عودة؛ }
هذه هي الطريقة التي يمكن بها استخدام سجل التحويل للحصول على المزيد من دبابيس الإدخال / الإخراج المجانية في أي متحكم لتوصيل المزيد من أجهزة الاستشعار.