विषयसूची:

पीआईसी एमसीयू और पायथन सीरियल कम्युनिकेशन: 5 कदम
पीआईसी एमसीयू और पायथन सीरियल कम्युनिकेशन: 5 कदम

वीडियो: पीआईसी एमसीयू और पायथन सीरियल कम्युनिकेशन: 5 कदम

वीडियो: पीआईसी एमसीयू और पायथन सीरियल कम्युनिकेशन: 5 कदम
वीडियो: In Circuit Serial Programming (ICSP) a PIC with a Raspberry Pi 2024, नवंबर
Anonim
पीआईसी एमसीयू और पायथन सीरियल कम्युनिकेशन
पीआईसी एमसीयू और पायथन सीरियल कम्युनिकेशन
पीआईसी एमसीयू और पायथन सीरियल कम्युनिकेशन
पीआईसी एमसीयू और पायथन सीरियल कम्युनिकेशन

हैलो दोस्तों! इस परियोजना में मैं पीआईसी एमसीयू और पायथन धारावाहिक संचार पर अपने प्रयोगों को समझाने की कोशिश करूंगा। इंटरनेट पर, वर्चुअल टर्मिनल पर 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: निष्कर्ष

हमने एक कार्य सफलतापूर्वक पूरा कर लिया है। मुझे आशा है कि यह आपके लिए उपयोगी होगा। यदि आपके कोई प्रश्न हैं, तो कृपया पूछने में संकोच न करें:) अगली परियोजना तक।

सिफारिश की: