एम्बेडेड डिजाइन में संभावनाएं हैं जहां आपके पास आपके माइक्रोकंट्रोलर में पर्याप्त I / O पिन उपलब्ध नहीं हैं। यह किसी भी कारण से हो सकता है, आपके एप्लिकेशन को कई एल ई डी की आवश्यकता हो सकती है या आप कई 7-सेगमेंट डिस्प्ले का उपयोग करना चाहते हैं, लेकिन आपको अपने माइक्रोकंट्रोलर में I / O पिन की आवश्यकता नहीं है। यहाँ एक पूर्ण घटक आता है, शिफ्ट रजिस्टर । Shift रजिस्टर सीरियल डेटा को स्वीकार करता है और समानांतर आउटपुट देता है। अपने माइक्रोकंट्रोलर से जुड़ने के लिए केवल 3 पिन की आवश्यकता होती है और आपको इससे 8 से अधिक आउटपुट पिन मिलेंगे । लोकप्रिय शिफ्ट रजिस्टर में से एक 74HC595 है । इसमें 8 बिट स्टोरेज रजिस्टर और 8 बिट शिफ्ट रजिस्टर है । यहां शिफ्ट रजिस्टर के बारे में अधिक जानें।
आप शिफ्ट रजिस्टर को सीरियल डेटा प्रदान करेंगे और इसे स्टोरेज रजिस्टर पर भेजा जाएगा और फिर स्टोरेज रजिस्टर 8 आउटपुट को नियंत्रित करेगा। यदि आप अधिक आउटपुट चाहते हैं तो बस एक और शिफ्ट रजिस्टर जोड़ें। दो शिफ्ट रजिस्टर को कैस्केडिंग करके, आपको अतिरिक्त 8 आउटपुट मिलेंगे, कुल 16bit आउटपुट।
शिफ्ट रजिस्टर 74HC595:
यहां डेटाशीट के अनुसार 74HC595 का पिन आउट आरेख है-
HC595 में 16 पिन हैं; यदि हम डेटशीट देखते हैं तो हम पिन फ़ंक्शंस को समझेंगे-
QH को क्यूए, पिन नंबर से 1 से 7 और 15 के रूप में इस्तेमाल 8 बिट उत्पादन शिफ्ट रजिस्टर, जहां के रूप में से पिन 14 प्राप्त करने के लिए प्रयोग किया जाता है धारावाहिक डेटा । अन्य पिन का उपयोग करने और शिफ्ट रजिस्टर के अन्य कार्यों का लाभ उठाने के बारे में सत्य तालिका भी है।
जब हम 74HC595 को इंटरफेस करने के लिए कोड लिखते हैं, तो हम वांछित आउटपुट प्राप्त करने के लिए इस सत्य तालिका को लागू करेंगे।
अब, हम PIC16F877A के साथ 74HC595 इंटरफेस करेंगे और 8 एलईडी को नियंत्रित करेंगे। हमने अन्य माइक्रोकंट्रोलर्स के साथ 74HC595 शिफ्ट रजिस्टर में हस्तक्षेप किया है:
- रास्पबेरी पाई के साथ 74HC595 सीरियल शिफ्ट रजिस्टर करना
- Arduino Uno के साथ Shift रजिस्टर 74HC595 का उपयोग कैसे करें?
- शिफ्ट रजिस्टर का उपयोग करते हुए NodeMCU के साथ एलसीडी को इंटरफैस करना
आवश्यक घटक:
- PIC16F877A
- 2pcs 33pF सिरेमिक डिस्क कैपेसिटर
- 20 मेगाहर्ट्ज क्रिस्टल
- 4.7k रोकनेवाला
- 8pcs एलईडी
- 1k रोकनेवाला -1 पीसी (8 पीसी 1k प्रतिरोधों की आवश्यकता होती है अगर प्रत्येक एलईड पर अलग प्रतिरोधक आवश्यक हो)
- 74HC595 आईसी
- 5V दीवार एडाप्टर
- तस्वीर प्रोग्रामिंग वातावरण
- ब्रेडबोर्ड और तार
सर्किट आरेख:
सर्किट आरेख में, हमने सीरियल डेटा पिन कनेक्ट किया है ; क्रमशः माइक्रोकंट्रोलर के RB0, RB1 और RB2 पिन पर घड़ी और स्ट्रोब (कुंडी) पिन । यहां हमने 8 एल ई डी के लिए एक रोकनेवाला का उपयोग किया है। सत्य तालिका के अनुसार, हमने 74HC595 के पिन 13 को जमीन से जोड़कर आउटपुट सक्षम किया । QH के रूप में हम एक और झरना नहीं होंगे पिन खुला छोड़ दिया 74HC595 इसके साथ। हमने शिफ्ट रजिस्टर के पिन 10 को वीसीसी के साथ जोड़कर स्पष्ट इनपुट ध्वज को अक्षम कर दिया ।
क्रिस्टल थरथरानवाला माइक्रोकंट्रोलर के ओएससी पिंस पर जुड़ा हुआ है। PIC16F877A में कोई आंतरिक थरथरानवाला नहीं है। इस परियोजना में हम Q0 से Q7 तक एक-एक करके लीड रिजीटर का उपयोग करते हुए प्रकाश डालेंगे ।
हमने एक ब्रेडबोर्ड में सर्किट का निर्माण किया है-
कोड स्पष्टीकरण:
शिफ्ट रजिस्टर के साथ एल ई डी को नियंत्रित करने के लिए पूरा कोड लेख के अंत में दिया गया है। हमेशा की तरह, हमें PIC माइक्रोकंट्रोलर में कॉन्फ़िगरेशन बिट्स सेट करने की आवश्यकता है।
#pragma config FOSC = HS // Oscillator Selection बिट्स (HS oscillator) #pragma config WDTE = OFF // वॉचडॉग टाइमर सक्षम करें बिट (WDT अक्षम) #pragma config PWRTE = OFF (पावर-अप टाइमर सक्षम करें बिट (PWRT अक्षम) # pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enable) #pragma config LVP = OFF // लो-वोल्ट (सिंगल-सप्लाई) इन-सर्किट सीरियल प्रोग्रामिंग इनेबल बिट (RB3 / PGB पिन) में PGM फंक्शन कम है; -Voltage प्रोग्रामिंग सक्षम) #pragma config CPD = OFF // डेटा EEPROM मेमोरी कोड प्रोटेक्शन बिट (डेटा EEPROM कोड प्रोटेक्शन ऑफ) #pragma config WRT = OFF // फ्लैश प्रोग्राम मेमोरी राइट बिट्स सक्षम करें (प्रोटेक्शन ऑफ लिखें; सभी डेटा मेमोरी हो सकती है) EECON नियंत्रण द्वारा लिखित) #pragma config CP = OFF // फ़्लैश प्रोग्राम मेमोरी कोड प्रोटेक्शन बिट (कोड सुरक्षा बंद)
उसके बाद हमने क्रिस्टल आवृत्ति की घोषणा की जो विलंब के लिए आवश्यक है और 74HC595 के लिए पिन-आउट घोषणा ।
#शामिल
अगला हमने पिन दिशा को आरंभ करने के लिए system_init () फ़ंक्शन घोषित किया ।
void 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; }
इस दो कार्यों के बाद हमने 74HC595 को सीरियल डेटा सबमिट करने के लिए data_submit (अहस्ताक्षरित int डेटा) फ़ंक्शन की घोषणा की ।
void data_submit (अहस्ताक्षरित int डेटा) { for (int i = 0; मैं <8; i ++) { DATA_595 = (डेटा >> i) & 0x01; घड़ी (); } स्ट्रोब (); // डेटा अंततः सबमिट किया गया }
इस फ़ंक्शन में हम 8 बिट डेटा को स्वीकार करते हैं और प्रत्येक बिट को दो बिटवाइज़ ऑपरेटर्स लेफ्ट शिफ्ट और AND ऑपरेटर का उपयोग करके भेजते हैं । हम पहले एक-एक करके डेटा को शिफ्ट करते हैं और सटीक बिट का पता लगाते हैं कि क्या यह 0x01 के साथ AND या ऑपरेटर का उपयोग कर रहा है । प्रत्येक डेटा को घड़ी की नब्ज और अंतिम डेटा आउटपुट द्वारा संग्रहीत किया जाता है जो कुंडी या स्ट्रोब पल्स का उपयोग करके किया जाता है । इस प्रक्रिया में सबसे पहले डेटा आउटपुट 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); data_submit (0xFF); __delay_ms (200); } वापसी; }
इस तरह से शिफ्ट रजिस्टर को अधिक सेंसर जोड़ने के लिए किसी भी माइक्रोकंट्रोलर में अधिक मुक्त I / O पिन प्राप्त करने के लिए इस्तेमाल किया जा सकता है ।