8051 करोड़ के आधार पर स्मार्ट स्विच, ईथरनेट नियंत्रित, भाग 1

शुभ दिन, प्रिय Khabrovites!
विकास के तहत डिवाइस कुछ हद तक IRemo दोहरा रहा है: टैप करें , साथ ही कुछ अन्य एनालॉग्स, जो पहले से ही हब्बर के बारे में लिखे गए थे। मेरा विकल्प सरल और सस्ता होगा। संचार के लिए, मैंने सामान्य मुड़ जोड़ी केबल को चुना, और नियंत्रण के लिए डिवाइस का अपना वेब पेज होगा।
यह लेख पहले चरण का वर्णन करता है, भविष्य की परियोजना के लिए "दिमाग" का निर्माण।


तो चरण संख्या शून्य


जटिल चीजों के विकास को सरल "ईंटों" में तोड़ना हमेशा आसान होता है। इसे प्रतिरूपता का वैज्ञानिक सिद्धांत कहा जाता है। तो एक शुरुआत के लिए, हमारे विचार को ब्लॉक में सोचें और तोड़ें। डिवाइस में विश्व स्तर पर मैंने 3 मुख्य मॉड्यूलों की पहचान की है: नियंत्रण इकाई, स्विचिंग यूनिट और बिजली की आपूर्ति।

यह आलेख नियंत्रण इकाई पर केंद्रित होगा, जो एक वेब सर्वर के रूप में काम करेगा, साथ ही अनुरोधों के साथ वेब रूपों को स्वीकार और संसाधित करेगा। और अब हम नीचे बैठते हैं और कोला के एक कप पर विकास के तहत मॉड्यूल के एक ब्लॉक आरेख को आकर्षित करते हैं:

पदनामों की डिकोडिंग इस प्रकार है:


पहली ईंट।


पहला चरण।

हम तत्व आधार का चयन करके पहली ईंट का विकास शुरू करते हैं। खुद को यूक्रेन में उपलब्ध माइक्रोकिरक्यूट्स के साथ परिचित करने के बाद, मैंने एमके C8051F340-GQR (64kb फ़्लैश, 4kb रैम, 10-बिट ADC, क्रॉसबार का चयन किया है जो आपको UART, ADC और SPI को किसी भी प्रोसेसर पोर्ट, USB, 48 MHz की घड़ी की आवृत्ति से अंतर्निहित स्रोत से कॉन्फ़िगर करने की अनुमति देता है। तापमान संवेदक) प्रोजेक्ट के "दिमाग" के रूप में और ईथरनेट नियंत्रक के रूप में CP2200-GQR चिप, जो हमें 10 एमबीपीएस (जो हमारे लिए पर्याप्त है) तक की गति प्रदान करेगा। दोनों चिप्स सतह बढ़ते के लिए TQFP-48 चेसिस में मौजूद हैं। Datasheets C8051F340 और CP2200 में अधिक विस्तृत विनिर्देशों।

पहले चरण में शेष घटकों में से, हमें 1: 1 ट्रांसफार्मर के साथ ईथरनेट कनेक्टर की आवश्यकता है, अधिमानतः कनेक्टर में ही एकीकृत किया गया है। मैंने HR911105A चुना।

दूसरा चरण।

Microcircuits बहुत बढ़िया हैं (मुझे कंट्रोलर के लिए दौड़ना पड़ा, CP2201 का एक एनालॉग है, लेकिन यह QFN-28 पैकेज में है, और टांका लगाना थोड़ा मुश्किल है)। इस स्तर पर, हम एक सर्किट आरेख बनाएंगे।
यहाँ मुझे क्या मिला (छवि क्लिक करने योग्य):


अब कुछ स्पष्टीकरण:
  1. आइए uk और CP2200 को जोड़कर शुरू करें। दोनों microcircuits पर EMIF (एक्सटर्नल मेमोरी इंटरफेस) के बोर्ड पर मौजूदगी के कारण स्थिति बहुत सरल हो गई है, क्योंकि वास्तव में CP2200 में ट्रिक आउट मेमोरी है। यह पता बाइट P3, बाइट P4- डेटा द्वारा भी प्रसारित होता है, बिट P1.7 \ WR से 0 पर सेट होने पर भी, चिप समझती है कि हम इसे निर्दिष्ट पते पर क्या लिख ​​रहे हैं, और जब बिट P1.6 \ नहीं आरडी सेट किया गया है, तो यह तदनुसार पढ़ता है। कनेक्शन को डेटशीट से लिया गया है, R1-8 लो-वाट प्रतिरोधों का भी 1 KOhm का नाममात्र मूल्य है, और उन्हें तार्किक इकाई के मूल्य तक पिन तक खींचते हैं। उनकी उपस्थिति आवश्यक नहीं है।
    अन्य पिन:
    • P0.2 \ INT घड़ी संकेत, 1 पर सेट करने के बाद, microcircuit हमारे अनुरोध को संसाधित करना शुरू कर देगा
    • P0.0 \ RES- रीसेट संकेत
    • P0.1 \ CS-microcircuits की पसंद, क्योंकि यह बाद में निकला, यह भी संभव था कि प्रजनन न करें।
  2. Q2 क्वार्ट्ज गुंजयमान यंत्र पर भी ध्यान दें, इसमें 20,000 मेगाहर्ट्ज का नाममात्र मूल्य है; इसकी उपस्थिति अनिवार्य है (Q1 को छोड़ा जा सकता है)।
  3. ईथरनेट कनेक्टर को जोड़ने में कोई कठिनाई नहीं है, पूरा कनेक्शन भी डेटशीट से लिया गया है। R14, R14, C16, C17 कम-पास फिल्टर (रेटिंग लेख के नीचे दी गई है)।
  4. इसके अलावा, मैं yusb के बारे में नहीं भूलता था। X1.1 और X1.2 को छोटा करके आप आंतरिक वोल्टेज नियामक μ का उपयोग करके USB से शक्ति प्राप्त कर सकते हैं, लेकिन अफसोस, आप CP2200 चिप को पावर (आउटपुट करंट μ से 100 mA, CP2200 की आवश्यकता के बिना 122 mA प्रति ट्रांसमिशन के साथ) प्रदान नहीं करेंगे।
  5. एक एलईडी X6 से जुड़ा हुआ है, जो बस बिजली की उपस्थिति को चमकता है और संकेत देता है, BC847 ट्रांजिस्टर के आधार पर एक ट्रांजिस्टर कुंजी, नियंत्रण पिन P2.7 X8 के लिए आउटपुट है, आप यहां एक एलईडी कनेक्ट कर सकते हैं। फर्मवेयर को डीबग करते समय इसने बहुत मदद की।
  6. X4 3.3V द्वारा संचालित है। X2 पर, आप 5V को विभिन्न फ्लैश ड्राइव और अन्य USB डिवाइस को मोड में लीड करने के लिए लागू कर सकते हैं। C2 प्रोग्रामर के X3 पोर्ट। शेष पिंस कनेक्टर X5 के लिए आउटपुट हैं।

तीसरा चरण।

एक योजनाबद्ध ब्रेड बनाया। कोई समस्या नहीं होनी चाहिए। जब से मैंने कारखाने ( डीएनवीपी इलेक्ट्रॉनमश ) पर बोर्ड छपवाए, मैंने सर्किट को 2 तरफ से चुना (ऊपरी दाहिना कोना खाली रहा, क्योंकि मैंने वहाँ छेद ड्रिल किए, मुझे एक ब्रेडबोर्ड का एक टुकड़ा मिला)।

खैर, फिर हम सब कुछ Gerber प्रारूप (बोर्ड छवि, प्रत्येक पक्ष अपनी फ़ाइल में) में निर्यात करते हैं, छेद NC ड्रिल प्रारूप में सहेजे जाते हैं।
यदि आपके पास एक लाइसेंस प्राप्त Altium नहीं है, तो गेरबेरा फ़ाइलों से सॉफ़्टवेयर के सभी लिंक को हटाने के लिए मत भूलना, अन्यथा आपको जुर्माना के लिए बाध्य किया जाएगा (पहले उदाहरण थे)। यदि संभव हो तो, हम लाइसेंस प्राप्त सॉफ़्टवेयर का उपयोग करते हैं।
हमें फीस मिलती है, इकट्ठा करें:
शीर्ष:

नीचे:

तारों की बहुतायत इस तथ्य के कारण है कि मुझे नहीं पता था कि किस प्रोग्रामर का उपयोग किया जाएगा, यह शुरू में प्रोग्रामर से बिजली और डेटा की आपूर्ति करने वाला था, लेकिन अफसोस, मैंने प्रोग्रामर को वायर करते समय कुछ गलतियां कीं और यह काम नहीं किया। इसलिए, इसे इस्तेमाल किए गए कनेक्टर में लाया गया था (उसी समय, मॉक-अप हिस्सा काम में आया था)।

चौथा चरण।

सभी भागों के विवरण के बिना, मैं फ़र्मवेयर कोड अभी तक नहीं दूंगा, लेकिन हम सिलैबस से एक मानक उदाहरण देंगे। केवल एक ही समस्या है, सभी उदाहरणों को सीपी 2200 डीके उपसर्ग के साथ सिलबॉव्स्की डिबगिंग मॉड्यूल के तहत तेज किया जाता है। यहां अंतर केवल नियंत्रण पिंस में हैं, यही कारण है कि हम main.c फ़ाइल खोलते हैं
हम फ़ंक्शन की तलाश में हैं PORT_Init (शून्य) हम इसका कोड बदल देते हैं:
void PORT_Init (void) { IT01CF = 0x02; // Enable Interrupt 0 on P0.3 TCON &= ~0x01; // Make /INT0 level triggered XBR1 = 0x40; // Enable crossbar and enable // weak pull-ups P0MDOUT |= 0x10 | 0x1F; // enable UTX as push-pull output P1MDOUT |= 0xD8 | 0xFF; // /WR and /RD are push-pull P2MDOUT |= 0xFF; P3MDOUT |= 0xFF; P4MDOUT |= 0xFF; } 

हम शून्य ether_reset_low () फ़ंक्शन ढूंढते हैं और इसे इसमें बदलते हैं:
 void ether_reset_low() { P0 &= ~0x01; // Pull reset low } 

हम इसे शून्य ether_reset_high () के साथ भी करते हैं:
 void ether_reset_high (void) { P0 |= 0x01; // Allow /RST to rise while(!(P0 & 0x01)); // Wait for /RST to go high } 

Mn_userconst.h खोलें
IP पता सेट करें:
 #define IP_SRC_ADDR { 192, 168, 0, 6 } 

शून्य में मुख्य ()
port_init के बाद ();
जोड़ना
 P0 &= ~0x02;//Cs=0 

इसके बाद, VFILE_DIR पर जाएं
index.html संपादित करें
हम update.bat को निष्पादित करते हैं।
इस प्रकार, हेक्साडेसिमल मानों का एक मानक सरणी index.html से बनाया गया है।
संकलन करें, एक हेक्स फ़ाइल में इकट्ठा करें, उसी नेटवर्क पर कंप्यूटर को एक आईपी पता असाइन करें और इसे फ्लैश करें।
पिंग:

खैर, चलिए देखते हैं रिजल्ट:

यदि हम जवाब नहीं देते हैं, तो हम केबल, प्रोग्राम कोड की जांच करते हैं, और यदि यह वास्तव में खराब है, तो दोस्तों पर जाएं, हम एक आस्टसीलस्कप और डीबेज लेते हैं।

संदर्भ:

  1. परिवर्तित उदाहरण, साथ ही बोर्ड के अल्टियम प्रारूप (10 वें संस्करण) में चित्र और पीडीएफ प्रारूप में तत्वों की एक सूची:
  2. डेटाशीट्स (तकनीकी दस्तावेज):

निम्नलिखित लेखों में जारी है।

मैं डिवाइस और लेख बनाने में उनकी मदद के लिए अपने दोस्तों को धन्यवाद देता हूं।

Source: https://habr.com/ru/post/In124268/


All Articles