विषयसूची:
- चरण 1: हमें क्या चाहिए?
- चरण 2: हार्डवेयर कनेक्शन
- चरण 3: पायथन सॉफ्टवेयर
- चरण 4: माइक्रोकंट्रोलर सॉफ्टवेयर
- चरण 5: निष्कर्ष
वीडियो: पीआईसी एमसीयू और पायथन सीरियल कम्युनिकेशन: 5 कदम
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:21
हैलो दोस्तों! इस परियोजना में मैं पीआईसी एमसीयू और पायथन धारावाहिक संचार पर अपने प्रयोगों को समझाने की कोशिश करूंगा। इंटरनेट पर, वर्चुअल टर्मिनल पर PIC MCU के साथ संचार करने के तरीके पर कई ट्यूटोरियल और वीडियो हैं जो बहुत उपयोगी हैं। हालांकि, मेरी मुख्य परियोजना में आवश्यकताओं में से एक पीआईसी एमसीयू और पायथन के बीच धारावाहिक संचार स्थापित करना है जिसे मुझे अच्छा ट्यूटोरियल नहीं मिला। तो चलो शुरू हो जाओ:)
चरण 1: हमें क्या चाहिए?
तो चलिए सबसे पहले देखते हैं कि हमें क्या चाहिए। हार्डवेयर के संदर्भ में:
- निश्चित रूप से, PIC MCU जो मेरे मामले में PIC16f877a है (आपको उस बोर्ड की आवश्यकता नहीं है। यह कुछ गंदे कनेक्शनों को सरल बनाने के लिए है)
- TX और RX पिन का उपयोग करके USB पोर्ट पर PIC MCU के साथ संचार करने के लिए USB से TTL कनवर्टर।
- MCU प्रोग्रामर जो मेरे मामले में K150 प्रोग्रामर है, लेकिन आप PicKit 2, 3 या कुछ और का उपयोग कर सकते हैं।
- और अंत में एक कंप्यूटर:)
सॉफ्टवेयर के संदर्भ में:
- पायथन कोड लिखने के लिए एक आईडीई जो मेरे मामले में पिचर्म है, लेकिन आप नियमित पायथन आईडीई का भी उपयोग कर सकते हैं।
- MCU प्रोग्रामिंग के लिए एक वातावरण जो मेरे मामले में CCS C कंपाइलर के साथ MPLAB X IDE है।
चरण 2: हार्डवेयर कनेक्शन
चित्र में संलग्न हार्डवेयर कनेक्शन दिए गए हैं जो नीचे दिए गए PIC MCU और USB TTL कनवर्टर के बीच हैं:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
जीएनडी --------------- जीएनडी
आपको USB TTL कनवर्टर का VCC पिन कनेक्ट करने की आवश्यकता नहीं है (हालाँकि, यदि आप चाहें तो कर सकते हैं)। ये 3 कनेक्शन काफी हैं।
चरण 3: पायथन सॉफ्टवेयर
आइए पायथन पक्ष के लिए सॉफ्टवेयर लिखना शुरू करें जो हमारे मामले में ट्रांसमीटर होगा, क्योंकि यह एमसीयू को स्ट्रिंग भेजेगा।
सीरियल आयात करें #आयात सीरियल लाइब्रेरीडेटा = '24' #डेटा जिसे हम डेटा भेजेंगे = a+'\0' ser = serial. Serial('COM17', baudrate=9600, timeout=1) # पोर्ट से कनेक्ट करें ser.write(a.encode ()) #डेटा भेजें
सबसे पहले सीरियल लाइब्रेरी को उसके फ्यूचर्स का उपयोग करने के लिए आयात किया जाता है। हम एमसीयू कोड में पुष्टि करने के लिए एक उदाहरण स्ट्रिंग डेटा भेजना चाहते हैं कि हमने इसे स्वीकार कर लिया है। मैं यहां एक बात नोट करना चाहता हूं। यही कारण है कि हमने स्ट्रिंग में '\0' जोड़ा। ऐसा इसलिए है क्योंकि एमसीयू की तरफ स्ट्रिंग को पूरी तरह से पढ़ना असंभव है। यह चरित्र द्वारा चरित्र पढ़ा जाता है। इसलिए, हम पढ़ना बंद करने के लिए स्ट्रिंग के अंत को जानना चाहते हैं। इसलिए, हम स्ट्रिंग में '\0' जोड़ते हैं जो स्ट्रिंग के अंत को इंगित करता है। फिर हम उस पोर्ट से जुड़ते हैं जो MCU से जुड़ा है। आप 'डिवाइस मैनेजर' में खोज कर उस पोर्ट को निर्धारित कर सकते हैं। इसलिए, सावधान रहें कि आप उसी पोर्ट पर हैं। आखिरकार, हम डेटा को MCU में भेजते हैं। इसे रिसीवर को भेजने में सक्षम होने के लिए स्ट्रिंग डेटा में ".encode ()" जोड़ा जाना चाहिए।
चरण 4: माइक्रोकंट्रोलर सॉफ्टवेयर
तो, आइए एमसीयू के लिए अपना कोड देखें। सबसे पहले मैं आपको "config.h" फ़ाइल दिखाना चाहता हूँ जिसके अंदर की आवश्यकता नहीं है, लेकिन मैंने इसे सरलता के लिए किया है। यहाँ बस अपने MCU की आवृत्ति बदलें।
#ifndef CONFIG_H#CONFIG_H परिभाषित करें
#शामिल
#डिवाइस एडीसी=16
#FUSES NowDT // नो वॉच डॉग टाइमर
#FUSES NOBROWNOUT // कोई ब्राउनआउट रीसेट नहीं #FUSES NOLVP // कोई कम वोल्टेज prgming नहीं, B3 (PIC16) या B5 (PIC18) I/O के लिए उपयोग किया जाता है
# देरी का उपयोग करें (क्रिस्टल = ६००००००)
अब मुख्य कोड देखते हैं:
#शामिल
#शामिल
# rs232 का उपयोग करें (बॉड = 9600, xmit = पिन_सी 6, आरसीवी = पिन_सी 7, समता = एन, स्टॉप = 1)
#LED_RED को परिभाषित करें PIN_D0
चार आईएनपी; चार सीएमपी_="24"; चार बफर [3];
#int_rda
शून्य धारावाहिक_संचार_इंटरप्ट () {अक्षम_इंटरप्ट्स (int_rda); अहस्ताक्षरित int i = 0; आईएनपी = गेटसी (); पुटक (आईएनपी); जबकि (आईएनपी! = '\ 0') {बफर = inp; आईएनपी = गेटसी (); पुटक (आईएनपी); मैं++; } }
शून्य मुख्य (शून्य) {
set_tris_d (0x00); आउटपुट_डी (0xFF); enable_interrupts (वैश्विक); जबकि (1) {enable_interrupts (int_rda); अगर (strcmp (बफर, cmp_) == 0) output_low (LED_RED); अन्य आउटपुट_हाई (LED_RED); } }
शुरुआत में हम स्ट्रिंग लाइब्रेरी को शामिल करते हैं जो हम स्ट्रिंग ऑपरेशंस में सहायक होंगे जो हमारे मामले में स्ट्रिंग तुलना ऑपरेशन (strcmp) है। तो, इस कोड में हमारा उद्देश्य पिन D0 से जुड़े एलईडी को चालू करना है यदि प्रेषित मूल्य हमारे दिए गए मान के समान है जो "cmp_" "24" के बराबर है।
सबसे पहले हम इंटरप्ट "आरडीए" को सक्षम करते हैं जो डेटा प्रसारित होने पर बाधा उत्पन्न करेगा।
दूसरे, आइए ISR (इंटरप्ट सर्विस रूटीन) के अंदर देखें, जिसे "serial_communication_interrupt" कहा जाता है। अंदर हम प्राप्त मूल्य को पढ़ने के लिए सबसे पहले इंटरप्ट ध्वज को अक्षम करते हैं और आगे बाधा उत्पन्न करते हैं। उसके बाद हम '\0' तक पहुंचने तक स्ट्रिंग कैरेक्टर को कैरेक्टर से पढ़ते हैं। स्ट्रिंग के अंदर पढ़ते समय हम प्राप्त स्ट्रिंग प्राप्त करने के लिए प्रत्येक चार को बफर में भी लिखते हैं।
अंत में, हम फिर से थोड़ी देर में अंदर आ जाते हैं। यहां हम अपने बफर स्ट्रिंग की तुलना करते हैं जो स्ट्रिंग और cmp_ स्ट्रिंग प्राप्त करता है यह देखने के लिए कि हमें स्ट्रिंग सही तरीके से मिलती है या नहीं। अगर वे बराबर हैं तो मैं एलईडी चालू करता हूं, नहीं तो बंद कर देता हूं।*
*कोड में मैंने उल्टा किया क्योंकि मेरा बोर्ड डी पोर्ट पिन मानों को उलट देता है। अपने कोड में इसे इसमें बदलें:
अगर (strcmp (बफर, cmp_) == 0) output_high (LED_RED); और output_low (LED_RED);
अंत में, इसे संकलित करें और अपने एमसीयू पर अपलोड करें और फिर पायथन में कोड चलाएं। आपको एलईडी टर्न ऑन देखना चाहिए।
चरण 5: निष्कर्ष
हमने एक कार्य सफलतापूर्वक पूरा कर लिया है। मुझे आशा है कि यह आपके लिए उपयोगी होगा। यदि आपके कोई प्रश्न हैं, तो कृपया पूछने में संकोच न करें:) अगली परियोजना तक।
सिफारिश की:
स्मार्टहोम वायरलेस कम्युनिकेशन: एमक्यूटीटी की चरम मूल बातें: 3 कदम
स्मार्टहोम वायरलेस कम्युनिकेशन: एमक्यूटीटी के एक्सट्रीम बेसिक्स: एमक्यूटीटी बेसिक्स: **मैं एक होम ऑटोमेशन सीरीज करने जा रहा हूं, भविष्य में मैंने जो कुछ भी किया है, उसे सीखने के लिए मैंने जो कदम उठाए हैं, मैं उन चरणों से गुजरूंगा। यह निर्देश मेरे भविष्य के इंस्ट्रक्शंस में उपयोग के लिए MQTT को सेटअप करने की आधार रेखा है। हालांकि
पीआईसी माइक्रोकंट्रोलर के साथ पीडब्लूएम वेव जेनरेट करें: 6 कदम
पीआईसी माइक्रोकंट्रोलर के साथ पीडब्लूएम वेव जेनरेट करें: पीडब्लूएम क्या है? पीडब्लूएम पल्स चौड़ाई मॉडुलन के लिए खड़ा है एक तकनीक है जिसके द्वारा पल्स की चौड़ाई भिन्न होती है। इस अवधारणा को समझने के लिए स्पष्ट रूप से एक घड़ी की नाड़ी या किसी वर्ग तरंग संकेत पर विचार करें, इसमें 50% कर्तव्य चक्र है जिसका अर्थ है कि टन और टॉफ अवधि समान है
एक्सबॉक्स वन कम्युनिकेशन बैन को दरकिनार: 6 कदम
एक्सबॉक्स वन कम्युनिकेशन बैन को दरकिनार करना: कभी भी आपके द्वारा खेले जाने वाले लोगों द्वारा यह कहने के खिलाफ रिपोर्ट प्राप्त करें कि आपने पहले एक्सबॉक्स पर अनुचित भाषा का इस्तेमाल किया था और फिर जब भी आप कुछ बातें नहीं कह रहे थे, तब भी अपने दोस्तों से बात नहीं कर सके। खैर अब एक रास्ता है और सभी
Arduino और Python सीरियल कम्युनिकेशन - कीपैड डिस्प्ले: 4 कदम
Arduino और Python सीरियल कम्युनिकेशन - कीपैड डिस्प्ले: यह प्रोजेक्ट मैक उपयोगकर्ताओं के लिए बनाया गया है, लेकिन इसे लिनक्स और विंडोज के लिए भी लागू किया जा सकता है, एकमात्र कदम जो अलग होना चाहिए वह है इंस्टॉलेशन
सीरियल कम्युनिकेशन का उपयोग करते हुए वेब-आधारित स्मार्टमिरर: 6 चरण
सीरियल कम्युनिकेशन का उपयोग करते हुए वेब-आधारित स्मार्टमिरर: यह निर्देश उपयोग के लिए तैयार सभी कोड के साथ दिया जाता है। विकास बहुत जटिल था लेकिन एक बार इसे स्थापित करने के बाद इसे अनुकूलित करना वास्तव में आसान है। एक नज़र डालें और आनंद लें;)