विषयसूची:

बेयर मेटल रास्पबेरी पाई 3: ब्लिंकिंग एलईडी: 8 कदम
बेयर मेटल रास्पबेरी पाई 3: ब्लिंकिंग एलईडी: 8 कदम

वीडियो: बेयर मेटल रास्पबेरी पाई 3: ब्लिंकिंग एलईडी: 8 कदम

वीडियो: बेयर मेटल रास्पबेरी पाई 3: ब्लिंकिंग एलईडी: 8 कदम
वीडियो: LED Blinking Using Raspberry Pi with Programming in Hindi | Raspberry Pi Tutorials #6 2024, जुलाई
Anonim
बेयर मेटल रास्पबेरी पाई 3: ब्लिंकिंग एलईडी
बेयर मेटल रास्पबेरी पाई 3: ब्लिंकिंग एलईडी

लेखक द्वारा और अधिक का पालन करें:

एल ई डी नंगे धातु के साथ रास्पबेरी पाई पुश बटन
एल ई डी नंगे धातु के साथ रास्पबेरी पाई पुश बटन
एल ई डी नंगे धातु के साथ रास्पबेरी पाई पुश बटन
एल ई डी नंगे धातु के साथ रास्पबेरी पाई पुश बटन
क्रेट
क्रेट
क्रेट
क्रेट
वयोवृद्ध दिवस के लिए राहत नक्काशी कैसे करें
वयोवृद्ध दिवस के लिए राहत नक्काशी कैसे करें
वयोवृद्ध दिवस के लिए राहत नक्काशी कैसे करें
वयोवृद्ध दिवस के लिए राहत नक्काशी कैसे करें

के बारे में:.oO0Oo। मोल्डीपिज्जा के बारे में अधिक »

बेयर मेटल पाई 3 ब्लिंकिंग एलईडी ट्यूटोरियल में आपका स्वागत है!

इस ट्यूटोरियल में हम रास्पबेरी पीआई 3, एक ब्रेडबोर्ड, एक रेसिस्टर, एक एलईडी और एक खाली एसडी कार्ड का उपयोग करके एलईडी ब्लिंकिंग प्राप्त करने के लिए शुरू से अंत तक चरणों के माध्यम से जाएंगे।

तो बेयर मेटल क्या है? बेयर मेटल नो फ्रिल्स प्रोग्रामिंग है। बेयर मेटल का मतलब है कि हम पूरी तरह से इस पर नियंत्रण रखते हैं कि कंप्यूटर क्या करेगा। तो इसका मूल रूप से मतलब है कि आर्म इंस्ट्रक्शन सेट का उपयोग करके कोड पूरी तरह से असेंबली में लिखा जाएगा। अंत तक हमने एक प्रोग्राम बनाया होगा जो रास्पबेरी पाई के जीपीआईओ पिन में से एक के भौतिक पते तक पहुंचकर और इसे आउटपुट में कॉन्फ़िगर करके और फिर इसे चालू और बंद करके एक एलईडी को ब्लिंक करेगा। इस परियोजना का प्रयास करना, एम्बेडेड प्रोग्रामिंग के साथ आरंभ करने का एक शानदार तरीका है और उम्मीद है कि कंप्यूटर कैसे काम करता है, इसकी बेहतर समझ प्रदान करता है।

आपको किस चीज़ की जरूरत है?

हार्डवेयर

  • रास्पबेरी पीआई 3
  • एसडी कार्ड बूट करने योग्य छवि के साथ प्री-लोडेड
  • ब्रेड बोर्ड
  • पुरुष महिला जम्पर तार
  • नर नर जम्पर तार
  • एलईडी
  • 220 ओम रोकनेवाला (बिल्कुल 220 ओम होना जरूरी नहीं है, कोई भी अवरोधक काम करेगा)
  • मिनी एसडी कार्ड
  • रास्पबेरी पाई ऑपरेटिंग सिस्टम के साथ प्री लोडेड मिनी एसडी कार्ड (आमतौर पर पीआई के साथ शामिल)

सॉफ्टवेयर

  • जीसीसी संकलक
  • जीएनयू एम्बेडेड टूलचेन
  • पाठ संपादक
  • एसडी कार्ड फॉर्मेटर

ठीक है, चलो शुरू करें!

चरण 1: चीजों को सेट करना / सामान ऊपर करना

चीजों को सेट करना / सामान ऊपर करना
चीजों को सेट करना / सामान ऊपर करना

ठीक है… पहला कदम हार्डवेयर हासिल करना है। आप पुर्जे अलग से खरीद सकते हैं या एक किट है जो पर्याप्त से अधिक भागों के साथ आती है। संपर्क

यह किट रास्पबेरी पाई 3 और अधिक को सेटअप करने के लिए आवश्यक सभी चीजों के साथ आती है! केवल एक चीज जो इस किट में शामिल नहीं है वह एक अतिरिक्त मिनी एसडी कार्ड है। रुकना! अभी दूसरा मत खरीदो। यदि आप कार्ड पर पहले से लोड किए गए लिनक्स इंस्टॉलेशन का उपयोग करने की योजना नहीं बनाते हैं, तो बाद में शामिल किए गए मिनी एसडी कार्ड की सामग्री को कॉपी करें और कार्ड को फिर से प्रारूपित करें (उस पर बाद में और अधिक)। महत्वपूर्ण नोट: सुनिश्चित करें कि आप फाइलों को शामिल कार्ड पर रखते हैं, जिसकी आपको बाद में आवश्यकता होगी!

अगला सॉफ्टवेयर सेटअप करने का समय है। इस ट्यूटोरियल में सॉफ़्टवेयर को स्थापित करने के तरीके के बारे में विस्तृत निर्देश शामिल नहीं होंगे। इन्हें स्थापित करने के तरीके के बारे में ऑनलाइन कई संसाधन और ट्यूटोरियल हैं:

विंडोज उपयोगकर्ता:

जीसीसी डाउनलोड और इंस्टॉल करें।

इसके बाद, जीएनयू एआरएम एम्बेडेड टूलचेन डाउनलोड और इंस्टॉल करें।

लिनक्स / मैक

  • Linux वितरण पहले से स्थापित gcc के साथ आता है
  • जीएनयू एआरएम एम्बेडेड टूलचेन डाउनलोड और इंस्टॉल करें।

ठीक है तो अगर सब ठीक हो जाता है तो आपको टर्मिनल (लिनक्स/मैक) या सीएमडी लाइन (विंडोज़) खोलने और टाइप करने का प्रयास करने में सक्षम होना चाहिए

arm-none-eabi-gcc

आउटपुट पहली तस्वीर के समान दिखना चाहिए। यह सिर्फ यह सत्यापित करने के लिए है कि यह सही तरीके से स्थापित है।

अब जबकि पूर्व-आवश्यकताएं समाप्त हो गई हैं, अब समय आ गया है कि आप मज़ेदार चीज़ों के साथ शुरुआत करें।

चरण 2: सर्किट

सर्किट
सर्किट
सर्किट
सर्किट
सर्किट
सर्किट

सर्किट समय! इसके लिए सर्किट सरल है। हम पीआई पर जीपीआईओ 21 (पिन 40) के लिए एक एलईडी कनेक्ट करेंगे (चित्र 2 और 3 देखें)। एलईडी को क्षतिग्रस्त होने से बचाने के लिए एक रोकनेवाला भी श्रृंखला में जुड़ा हुआ है। रोकनेवाला ब्रेडबोर्ड पर नकारात्मक कॉलम से जुड़ा होगा जो कि पीआई पर जीएनडी (पिन 39) से जुड़ा होगा। एलईडी को कनेक्ट करते समय शॉर्ट एंड को नेगेटिव साइड से जोड़ना सुनिश्चित करें। आखिरी तस्वीर देखें

चरण 3: बूट करने योग्य मिनी एसडी

बूट करने योग्य मिनी एसडी
बूट करने योग्य मिनी एसडी
बूट करने योग्य मिनी एसडी
बूट करने योग्य मिनी एसडी
बूट करने योग्य मिनी एसडी
बूट करने योग्य मिनी एसडी

आपके खाली मिनी एसडी कार्ड को पहचानने के लिए आपका पीआई 3 प्राप्त करने के लिए तीन चरण हैं। हमें bootcode.bin, start.elf, और fixup.dat को खोजने और कॉपी करने की आवश्यकता है। आप इन फ़ाइलों को शामिल मिनी एसडी कार्ड पर प्राप्त कर सकते हैं यदि आपने कैनकिट खरीदा है या लिनक्स वितरण के साथ पीआई 3 के लिए बूट करने योग्य एसडी कार्ड बनाते हैं। किसी भी तरह से ये फ़ाइलें पीआई को एसडी कार्ड को बूट करने योग्य डिवाइस के रूप में पहचानने की अनुमति देने के लिए आवश्यक हैं। इसके बाद, मिनी एसडी को fat32 में प्रारूपित करें (अधिकांश मिनी एसडी कार्ड वसा 32 में प्रारूपित होते हैं। मैंने सैंडिस्क से एक सस्ते मिनी एसडी कार्ड का उपयोग किया है), एसडी कार्ड पर bootcode.bin, start.elf, fixup.dat को स्थानांतरित करें। और आपका किया! ठीक है एक बार और चित्रों के क्रम में कदम हैं:

  1. bootcode.bin, start.elf,fixup.dat खोजें।
  2. सुनिश्चित करें कि आपका एसडी कार्ड fat32 में स्वरूपित है।
  3. प्रारूपित एसडी कार्ड पर bootcode.bin, start.elf, और fixup.dat को स्थानांतरित करें।

यहां बताया गया है कि मैंने इसे कैसे समझ लिया, लिंक।

चरण 4: मिनी एसडी की जांच करें

मिनी एसडी की जांच करें
मिनी एसडी की जांच करें
मिनी एसडी की जांच करें
मिनी एसडी की जांच करें

ठीक है, हमारे पास बूट करने योग्य मिनी एसडी कार्ड है, और उम्मीद है कि इस बिंदु पर आपके पास पीआई 3 है। तो अब हमें यह सुनिश्चित करने के लिए परीक्षण करना चाहिए कि पीआई 3 मिनी एसडी कार्ड को बूट करने योग्य के रूप में पहचान रहा है।

पाई पर, मिनी यूएसबी पोर्ट के पास दो छोटे एलईडी हैं। एक लाल है। यह शक्ति सूचक है। जब पाई शक्ति प्राप्त कर रहा हो तो यह प्रकाश चालू होना चाहिए। इसलिए यदि आप अपने पीआई को अभी बिना किसी मिनी एसडी कार्ड के प्लग इन करते हैं तो इसे लाल रंग में हल्का होना चाहिए। ठीक है अब अपने पीआई को अनप्लग करें और अपने बूट करने योग्य मिनी एसडी कार्ड में डालें जो पिछले चरण में बनाया गया था और पीआई को प्लग इन करें। क्या आपको एक और रोशनी दिखाई देती है? लाल के ठीक बगल में एक हरी बत्ती होनी चाहिए, जो इंगित करता है कि यह एसडी कार्ड पढ़ रहा है। इस नेतृत्व को अधिनियम का नेतृत्व कहा जाता है। व्यवहार्य एसडी कार्ड डालने पर यह रोशन होगा। जब यह आपके मिनी एसडी कार्ड तक पहुंचेगा तो यह फ्लैश होगा।

ठीक है तो बूट करने योग्य मिनी एसडी कार्ड डालने और पीआई को प्लग इन करने के बाद दो चीजें होनी चाहिए थीं:

  1. बिजली के स्वागत का संकेत देते हुए लाल एलईडी को रोशन किया जाना चाहिए
  2. हरे रंग की एलईडी को यह इंगित करते हुए रोशन किया जाना चाहिए कि यह मिनी एसडी कार्ड में बूट हो गया है

अगर कुछ गलत हुआ तो पिछले चरणों को दोहराने का प्रयास करें या अधिक जानकारी के लिए नीचे दिए गए लिंक पर क्लिक करें।

यहां लिंक एक अच्छा संदर्भ है।

चरण 5: CODE1

यह प्रोजेक्ट एआरएम असेंबली भाषा में लिखा गया है। इस ट्यूटोरियल में एआरएम असेंबली की एक बुनियादी समझ ग्रहण की गई है, लेकिन यहां कुछ चीजें हैं जिन्हें आपको जानना चाहिए:

.equ: एक प्रतीक के लिए एक मान निर्दिष्ट करता है यानी abc.equ 5 abc अब पांच का प्रतिनिधित्व करता है

  • ldr: मेमोरी से लोड
  • str: स्मृति को लिखता है
  • सीएमपी: घटाव करके दो मानों की तुलना करता है। झंडे गाड़ देता है।
  • बी: लेबल करने के लिए शाखा
  • जोड़ें: अंकगणित करता है

अगर आपको आर्म असेंबली का कोई अनुभव नहीं है तो इस वीडियो को देखें। यह आपको आर्म असेंबली भाषा की अच्छी समझ देगा।

ठीक है तो अभी हमारे पास एक सर्किट है जो हमारे रास्पबेरी पीआई 3 से जुड़ा है और हमारे पास एक एसडी कार्ड है जिसे पीआई पहचानता है, इसलिए हमारा अगला कार्य यह पता लगाना है कि एक निष्पादन योग्य प्रोग्राम के साथ पीआई लोड करके सर्किट के साथ कैसे इंटरैक्ट करना है। सामान्य तौर पर, हमें जो करने की ज़रूरत है वह पीआई को जीपीआईओ 21 (लाल तार से जुड़ा पिन) से वोल्टेज आउटपुट करने के लिए कहता है। फिर हमें एलईडी को ब्लिंक करने के लिए टॉगल करने का एक तरीका चाहिए। ऐसा करने के लिए हमें और जानकारी चाहिए। इस बिंदु पर हमें पता नहीं है कि GPIO 21 को आउटपुट में कैसे बताना है, इसलिए हमें डेटाशीट को पढ़ना चाहिए। अधिकांश माइक्रो-नियंत्रकों में डेटा-शीट होती है जो निर्दिष्ट करती है कि सब कुछ कैसे काम करता है। दुर्भाग्य से, पीआई 3 के पास आधिकारिक दस्तावेज नहीं है! हालाँकि, एक अनौपचारिक डेटा-शीट है। इसके दो लिंक यहां दिए गए हैं:

  1. github.com/raspberrypi/documentation/files…
  2. web.stanford.edu/class/cs140e/docs/BCM2837…

ठीक है, इस बिंदु पर, आपको अगले चरण पर जाने से पहले डेटा-शीट को देखने के लिए कुछ मिनट लेना चाहिए और देखें कि आपको कौन सी जानकारी मिल सकती है।

चरण 6: CODE2:Turn_Led_ON

CODE2:Tur_Led_ON
CODE2:Tur_Led_ON
CODE2:Turn_Led_ON
CODE2:Turn_Led_ON
CODE2:Tur_Led_ON
CODE2:Tur_Led_ON

रास्पबेरी पाई 3 53 आउटपुट/इनपुट पिन (पेरिफेरल्स) को नियंत्रित करने के लिए रजिस्टर करता है। पिनों को एक साथ समूहीकृत किया जाता है और प्रत्येक समूह को एक रजिस्टर को सौंपा जाता है। GPIO के लिए हमें SELECT रजिस्टर, SET रजिस्टर और CLEAR रजिस्टरों तक पहुंचने में सक्षम होना चाहिए। इन रजिस्टरों तक पहुँचने के लिए हमें इन रजिस्टरों के भौतिक पते की आवश्यकता होती है। जब आप डेटा-शीट पढ़ रहे होते हैं तो आप केवल पते की ऑफसेट (लो बाइट) को नोट करना चाहते हैं और उसे आधार पते में जोड़ना चाहते हैं। आपको ऐसा करना होगा क्योंकि डेटाशीट लिनक्स वर्चुअल एड्रेस को सूचीबद्ध कर रहा है जो मूल रूप से वे मान हैं जो ऑपरेटिंग सिस्टम असाइन करते हैं। हम एक ऑपरेटिंग सिस्टम का उपयोग नहीं कर रहे हैं इसलिए हमें भौतिक पते का उपयोग करके इन रजिस्टरों को सीधे एक्सेस करने की आवश्यकता है। इसके लिए आपको निम्नलिखित जानकारी चाहिए:

  • बाह्य उपकरणों का आधार पता: 0x3f200000। पीडीएफ (पेज 6) कहता है कि आधार पता 0x3f000000 है, हालांकि, यह पता काम नहीं करेगा। 0x3f200000. का प्रयोग करें
  • FSEL2 (चयन) का ऑफसेट रजिस्टर का पूरा पता नहीं है। पीडीएफ FSEL2 को 0x7E20008 पर सूचीबद्ध करता है लेकिन यह पता linux वर्चुअल एड्रेस को संदर्भित करता है। ऑफसेट वही होगा, जिसे हम नोट करना चाहते हैं। 0x08
  • GPSET0 (सेट) की ऑफसेट: 0x1c
  • GPCLR0 की ऑफसेट (साफ़): 0x28

तो आपने शायद ध्यान दिया कि डेटा-शीट में 4 सेलेक्ट रजिस्टर, 2 SET रजिस्टर और 2 CLEAR रजिस्टर सूचीबद्ध हैं, इसलिए मैंने जो किया था उसे मैंने क्यों चुना? ऐसा इसलिए है क्योंकि हम GPIO 21 और FSEL2 नियंत्रण GPIO 20-29, SET0 और CLR0 नियंत्रण GPIO 0-31 का उपयोग करना चाहते हैं। FSEL रजिस्टर प्रत्येक GPIO पिन के लिए तीन बिट प्रदान करता है। चूंकि हम FSEL2 का उपयोग कर रहे हैं जिसका अर्थ है कि बिट्स 0-2 GPIO 20 को नियंत्रित करते हैं, और बिट्स 3-5 GPIO 21 को नियंत्रित करते हैं और इसी तरह। सेट और सीएलआर रजिस्टर प्रत्येक पिन को एक बिट प्रदान करते हैं। उदाहरण के लिए, SET0 में बिट 0 और CLR0 GPIO 1 को नियंत्रित करता है। GPIO 21 को नियंत्रित करने के लिए आप SET0 और CLR0 में बिट 21 सेट करेंगे।

ठीक है तो हमने बात की है कि इन रजिस्टरों को कैसे एक्सेस किया जाए, लेकिन इसका क्या मतलब है?

  • GPIO 21 को आउटपुट पर सेट करने के लिए FSEL2 रजिस्टर का उपयोग किया जाएगा। आउटपुट के लिए पिन सेट करने के लिए आपको तीन बिट्स के लो ऑर्डर बिट को 1 पर सेट करने की आवश्यकता है। इसलिए यदि बिट्स 3-5 GPIO 21 को नियंत्रित करते हैं, तो इसका मतलब है कि हमें पहले बिट को 3 से 1 पर सेट करने की आवश्यकता है। यह pi को बताएगा कि हम GPIO 21 को आउटपुट के रूप में उपयोग करना चाहते हैं। तो अगर हम GPIO 21 के लिए 3 बिट्स को देखना चाहते हैं, तो हमें इसे आउटपुट, b001 पर सेट करने के बाद इस तरह दिखना चाहिए।
  • GPSET0 पीआई को पिन चालू करने के लिए कहता है (एक वोल्टेज आउटपुट)। ऐसा करने के लिए हम बस उस बिट को टॉगल करते हैं जो उस GPIO पिन से मेल खाती है जो हम चाहते हैं। हमारे मामले में, बिट 21।
  • GPCLR0 पीआई को पिन बंद करने के लिए कहता है (कोई वोल्टेज नहीं)। पिन को बंद करने के लिए बिट को संबंधित GPIO पिन पर सेट करें। हमारे मामले में बिट 21

इससे पहले कि हम एक ब्लिंकिंग एलईडी पर जाएं, पहले एक साधारण प्रोग्राम बनाएं जो कि बस एलईडी को चालू कर देगा।

शुरू करने के लिए हमें अपने स्रोत कोड के शीर्ष पर दो निर्देश जोड़ने होंगे।

  • .सेक्शन.init पीआई को बताता है कि कोड कहां रखा जाए
  • .वैश्विक _शुरू

इसके बाद, हमें उन सभी पतों को लेआउट करना होगा जिनका हम उपयोग करेंगे। मानों के लिए पठनीय प्रतीकों को निर्दिष्ट करने के लिए.eq का उपयोग करें।

  • .equ GPFSEL2, 0x08
  • .equ GPSET0, 0x1c
  • .equ GPCLR0, 0x28
  • .equ आधार, 0x3f200000

अब हम उन बिट्स को सेट करने के लिए मास्क बनाने जा रहे हैं जिन्हें हमें सेट करने की आवश्यकता है।

  • .equ SET_BIT3, 0x08 यह तीन बिट सेट करेगा 0000_1000
  • .equ SET_BIT21, 0x200000

फिर हमें अपना _स्टार्ट लेबल जोड़ना होगा

_प्रारंभ:

आधार पते को रजिस्टर में लोड करें

एलडीआर r0, =आधार

अब हमें GPFSEL2 का बिट3 सेट करना होगा

  • एलडीआर r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] यह निर्देश GPFSEL2 के पते पर बिट 0x08 लिखने के लिए कहता है

अंत में हमें GPSET0 रजिस्टर में बिट 21 सेट करके GPIO 21 को चालू करना होगा

  • एलडीआर r1, =SET_BIT21
  • str r1, [r0, # GPSET0]

अंतिम उत्पाद चित्रित कोड जैसा कुछ दिखना चाहिए।

अगला कदम कोड को संकलित करना और एक.img फ़ाइल बनाना है जिसे pi चला सकता है।

  • संलग्न मेकफ़ाइल, और kernel.ld डाउनलोड करें और यदि आप turn_led_on.s स्रोत कोड चाहते हैं।
  • सभी फाइलों को एक ही फोल्डर में रखें।
  • यदि आप अपने स्वयं के स्रोत कोड का उपयोग कर रहे हैं तो मेकफ़ाइल संपादित करें और कोड = turn_led_on.s को कोड =.s से बदलें
  • मेकफ़ाइल सहेजें।
  • फाइलों वाले अपने फ़ोल्डर में नेविगेट करने के लिए टर्मिनल (लिनक्स) या सीएमडी विंडो (विंडो) का उपयोग करें और मेक एंड हिट एंटर टाइप करें
  • मेक फ़ाइल को kernel.img नामक फ़ाइल जनरेट करनी चाहिए
  • अपने मिनी एसडी कार्ड पर kernel.img कॉपी करें। आपके कार्ड की सामग्री चित्र के रूप में होनी चाहिए (तस्वीर 3):bootcode.bin, start.elf,fixup.dat, और kernel.img।
  • मिनी एसडी कार्ड निकालें और इसे पीआई. में डालें
  • पावर स्रोत में पीआई प्लग करें
  • एलईडी जलना चाहिए !!!

थोड़ा महत्वपूर्ण नोट: जाहिर तौर पर इंस्ट्रक्शंस को मेकफाइल के एक्सटेंशन न होने की समस्या थी, इसलिए मैंने इसे.txt एक्सटेंशन के साथ फिर से अपलोड किया। कृपया एक्सटेंशन को ठीक से काम करने के लिए डाउनलोड करते समय उसे हटा दें।

सिफारिश की: