Serial.begin (9600) क्या है?


22

मुझे पता है कि यह कुछ को इनिशियलाइज़ करने के लिए है:

Serial.begin(9600);

लेकिन मैं जानना चाहता हूं कि इसका वास्तव में मतलब क्या है?


3
प्रलेखन में इसका अच्छा वर्णन है। arduino.cc/en/Serial/begin
sachleen

जवाबों:


22

Serial.begin(9600)वास्तव में कुछ भी नहीं छापता है। इसके लिए आप Serial.print("Hello world!")"हैलो वर्ल्ड!" सीरियल कंसोल के लिए। बल्कि यह सीरियल कनेक्शन को 9600 बिट प्रति सेकेंड की दर से शुरू करता है।

धारावाहिक कनेक्शन (यानी Arduino और आपके कंप्यूटर) के दोनों किनारों को किसी भी प्रकार के समझदार डेटा प्राप्त करने के लिए समान गति के सीरियल कनेक्शन का उपयोग करने के लिए सेट करने की आवश्यकता है। यदि दो प्रणालियों के बीच एक बेमेल है, तो लगता है कि गति तब डेटा की गड़बड़ी होगी।

प्रति सेकंड 9600 बिट्स Arduino के लिए डिफ़ॉल्ट है, और अधिकांश उपयोगकर्ताओं के लिए पूरी तरह से पर्याप्त है, लेकिन आप इसे अन्य गति में बदल सकते हैं: Serial.begin(57600)Arduino को 57600 बिट्स प्रति सेकंड पर प्रसारित करने के लिए सेट करेगा। आपको भेजे गए डेटा को देखने के लिए अपने कंप्यूटर पर (Arduino IDE के सीरियल मॉनीटर की तरह) जो भी सॉफ़्टवेयर इस्तेमाल करना है, उसे उसी गति से सेट करना होगा।


2
बॉड और बीपीएस दो अलग-अलग चीजें हैं ... अब मैं जिस लिंक की तलाश कर रहा था वह नहीं मिल सकता है।
अनाम पेंगुइन

क्या होगा अगर मैं "Serial.begin (0);" या "Serial.begin (4000);"। मेरा मतलब है कि मैं जानना चाहता हूं कि संख्याओं में क्या अंतर है?
शजीब0

3
Serial.begin का उपयोग संचार की गति को सेट करने के लिए किया जाता है, प्रति सेकंड बिट्स में। एक बाइट 8 बिट के बराबर है, लेकिन धारावाहिक कनेक्शन एक शुरुआत भेजते हैं और प्राप्त सिस्टम को एक विशेष बाइट को शुरू और अंत की पहचान करने के लिए थोड़ा रोकते हैं। इस प्रकार, एक वर्ण भेजने के लिए 10 बिट्स की आवश्यकता होती है। का उपयोग Serial.begin(0)कर Arduino बताता है कि इसे 0 बिट्स प्रति सेकंड पर धारावाहिक के साथ संवाद करना चाहिए। जैसा कि आप उम्मीद कर सकते हैं, इसका मतलब है कि Arduino कभी भी कोई डेटा नहीं भेजेगा। Serial.begin(4000)Arduino के कारण प्रति सेकंड 4000 बिट्स पर डेटा भेजने का कारण होगा। यह गैर-मानक है, लेकिन अन्यथा ठीक है।

2
संक्षेप में: संख्या बदलने से गति बदल जाती है। संख्या को छोटा करना (जैसे Serial.begin(300)) Arduino ने डेटा को अधिक धीरे-धीरे भेजा है। इसे बढ़ाकर 57600 पर कहें तो तेजी से डेटा भेजेगा। भेजने की प्रणाली और प्राप्त करने की प्रणाली दोनों को किस गति पर उपयोग करने के लिए सहमत होने की आवश्यकता है: आपके कंप्यूटर का सीरियल प्रोग्राम, जैसे कि Arduino Serial Monitor विंडो, आपको उस गति को सेट करने देगा जिस पर आपका कंप्यूटर डेटा प्राप्त करेगा लेकिन आप केवल सामान्य से चुन सकते हैं गति: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600 और 11520 बिट / सेक। आप अन्य गति में प्रवेश नहीं कर सकते, जैसे 4000. 9600 आमतौर पर अच्छा है।
heypete

Baud and BPS are two different things... can't find the link I was looking for now.- यहाँ एक स्पष्टीकरण है: "बॉड" बनाम "bps": परिशिष्ट सी
निक गैमन

21

एक तस्वीर 1000 शब्दों के लायक है, इसलिए वे कहते हैं, (1024 शब्द अगर आप कंप्यूटर के साथ काम करते हैं) तो मैं कुछ तस्वीरें पोस्ट करूँगा ...

मैंने 9600 बॉड में "फैब" भेजने के लिए अपने यूनो की स्थापना की और एक लॉजिक एनालाइज़र पर परिणाम कैप्चर किए।

धारावाहिक कॉमिक्स - 3 अक्षर

लाल रंग में छायांकित भाग बाइट्स के बीच "निष्क्रिय" अवधि है।

उपरोक्त ग्राफिक नोट से कि Tx (संचारित) डेटा लाइन आम तौर पर उच्च (1) है जब तक कि यह एक चरित्र (बाइट) की शुरुआत को इंगित करने के लिए कम नहीं हो जाती है। यह शुरुआत बिट है । फिर 8 डेटा बिट्स (सफेद डॉट्स द्वारा इंगित) बॉड दर (9600 नमूने प्रति सेकंड) पर दिखाई देते हैं। उसके बाद लाइन को फिर से उच्च लाया जाता है। यह स्टॉप बिट (लाल हिस्सा) है। फिर हम अगले चरित्र के लिए शुरुआत बिट देखते हैं, और इसी तरह। "स्टॉप" भाग अनिश्चित काल तक लंबा हो सकता है, हालांकि इसमें कम से कम एक बिट लंबाई होनी चाहिए।


पहले चरित्र के लिए और अधिक विवरण (पत्र "एफ" या 0x46 या 0b01000110) यहां देखा जा सकता है:

सीरियल कॉमिक्स - एक एकल बाइट

  • A - कोई डेटा नहीं (Tx अधिक है)

  • बी - "स्टार्ट बिट"। रिसीवर को यह बताने के लिए लाइन को कम लिया जाता है कि एक चरित्र (बाइट) भेजा जा रहा है। रिसीवर लाइन का नमूना लेने से पहले डेढ़ घड़ी का इंतजार करता है।

  • सी - पहला चरित्र आता है (पत्र "एफ" या 0x46 या 0b01000110)। इस तरह कोई घड़ी बिट नहीं है, आने वाले डेटा को केवल बॉड (ट्रांसमिशन) दर पर नमूना लिया जाता है। एसपीआई संचार के विपरीत डेटा कम से कम महत्वपूर्ण बिट पहले आता है (यदि आप प्रति बाइट 8 बिट नहीं भेज रहे हैं)। इस प्रकार हम 01100010 (01000110 के बजाय) देखते हैं।

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

  • ई - अगले चरित्र के लिए शुरुआत बिट।


आप लॉजिक एनालाइज़र कैप्चर से देख सकते हैं जो T1 - T20.1041667 ms है, और जैसा कि होता है कि 1/9600 है:

1 / 9600 = 0.00010416666 seconds

इस प्रकार 9600 की दर आपको प्रति सेकंड बिट्स की संख्या देती है और व्युत्क्रम बिट्स के बीच का समय अंतराल होता है


अन्य बातें

  • सीरियल कॉम्म्स स्व-क्लॉक (SPI या I2C, और अन्य के विपरीत) नहीं है, इसलिए प्रेषक और रिसीवर दोनों को एक क्लॉक रेट पर सहमत होना होगा।

  • Arduino पर घड़ी की दर सटीक नहीं है, क्योंकि हार्डवेयर को सीरियल घड़ी प्राप्त करने के लिए सिस्टम घड़ी को विभाजित करना पड़ता है, और विभाजन हमेशा सटीक नहीं होता है। लगभग हमेशा एक त्रुटि होती है, राशि डेटाशीट में दी जाती है (16 मेगाहर्ट्ज सिस्टम घड़ी के लिए उद्धृत आंकड़े, जैसे कि यूनो पर):

    सीरियल बॉड रेट एरर

  • आप डेटा बिट्स की संख्या को भिन्न कर सकते हैं, आपको उनमें से 8 को भेजने की आवश्यकता नहीं है, वास्तव में आप 5 से 9 बिट्स भेज सकते हैं।

  • वैकल्पिक रूप से डेटा बिट्स के बाद भेजा जाने वाला समता बिट हो सकता है ।

    • यदि आप "विषम" समता निर्दिष्ट करते हैं, तो समता बिट को इस तरह से सेट किया जाता है कि कुल संख्या 1-बिट विषम हो।
    • यदि आप "समता" को निर्दिष्ट करते हैं, तो समता बिट को इस तरह से सेट किया जाता है कि कुल संख्या 1-बिट भी हो।
    • यदि आप कोई समता निर्दिष्ट नहीं करते हैं, तो समता बिट छोड़ दी जाती है।

    इससे रिसीवर को पता लगाने में मदद मिल सकती है कि डेटा सही तरीके से आया या नहीं।

  • स्टॉप बिट से पहले समता बिट भेजा जाता है।

  • 9 डेटा बिट्स (जैसा कि सीटॉक प्रोटोकॉल में उपयोग किया जाता है) के मामले में समता बिट को 9 वें डेटा बिट के रूप में पुन: शुद्ध किया जाता है। इसलिए आपके पास 9 डेटा बिट और एक समता बिट दोनों नहीं हो सकते।

  • आपके पास दो स्टॉप बिट्स भी हो सकते हैं। यह मूल रूप से बाइट्स के बीच के समय को लंबा करता है। "पुराने दिनों" में यह इतना था कि धीमे विद्युत उपकरण पिछले बाइट को संसाधित कर सकते हैं (उदाहरण के लिए इसे प्रिंट करना)।


संभावित भ्रष्टाचार

यदि आप धारा के बीच में धारावाहिक डेटा सुनना शुरू करते हैं, तो यह बहुत संभव है कि धारा के बीच में एक 0-बिट की शुरुआत बिट के रूप में की जाएगी, और फिर रिसीवर उस गलत तरीके से सब कुछ व्याख्या करेगा।

इससे उबरने का एकमात्र वास्तविक तरीका समय-समय पर एक बड़ा पर्याप्त अंतर है, (उदाहरण के लिए 10 बिट लंबा) जो ऐसा नहीं हो सकता है।


उलटा तर्क

यहाँ दिखाए गए बिट्स (तर्क-स्तर) उलटे नहीं हैं। अर्थात्, 1-बिट उच्च है और 0-बिट कम है। यदि आपके पास RS232 उपकरण हैं जो संभवतः 1-बिट के लिए -12 V, और 0-बिट के लिए +12 V जैसे कुछ भेज रहा होगा। यह उलटा है क्योंकि एक शून्य, वोल्टेज-वार से कम है।

यदि आपके पास ऐसे उपकरण हैं, तो आपको वोल्टेज रूपांतरण और तर्क व्युत्क्रम करने की आवश्यकता है। MAX232 जैसे चिप्स आपके लिए दोनों काम करेंगे। वे कुछ उपयोगकर्ता द्वारा आपूर्ति किए गए कैपेसिटर की मदद से आंतरिक रूप से उत्पन्न करके इस तरह के उपकरण को चलाने के लिए आवश्यक -12 वी भी प्रदान कर सकते हैं।


गति नियम-का-अंगूठा

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

उदाहरण के लिए। 9600 बीपीएस पर आप प्रति सेकंड 960 बाइट भेज सकते हैं।


पुन: पेश करने के लिए कोड:

void setup() 
  { 
  Serial.begin(9600); 
  Serial.print("Fab"); 
  } 

void loop ()
  {
  }

1

; TLDR; यह सीरियल कम्युनिकेशन पोर्ट को इनिशियलाइज़ करता है और बॉड रेट सेट करता है। जिस उपकरण के साथ आप संवाद कर रहे हैं (या Arduino IDE सीरियल मॉनीटर) को एक मिलान बॉड दर पर सेट किया जाना है। एक बार जब आप पोर्ट को इनिशियलाइज़ कर लेते हैं तो आप वर्ण भेजना या प्राप्त करना शुरू कर सकते हैं। Arduino सीरियल संदर्भ


इस विषय के @ निक-गैमन के उत्कृष्ट कवरेज को कम या अपमान करने के लिए नहीं।
linhartr22
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.