Serial.begin (): हमेशा 28800 का उपयोग क्यों नहीं किया जाता है?


35

बहुत सारे नमूना कोड ऑनलाइन लोग Serial.begin(9600)सेटअप ब्लॉक में लाइन जोड़ते हैं ।

जब मैं देखता हूं Serial.begin()कि आधिकारिक दस्तावेज पर क्या है, तो यह कहता है कि यह प्रति सेकंड डेटा ट्रांसफर को नियंत्रित करता है।

तो स्पष्ट सवाल यह है कि 28800 का उपयोग क्यों नहीं किया जाता है, उच्चतम अंतरण दर? लोग 9600 में क्यों बसते हैं? यहाँ क्या सीमा है?


3
FYI करें USB सपोर्ट में प्लग किया गया एक arduino वास्तव में 115200 है, और 57600 अक्सर दूसरा सबसे आम बॉड है जिसे आप देखते हैं।
ब्रेटम

जवाबों:


48

लोग क्यों बसते हैं?

लोग बसते हैं क्योंकि यह तेजी से पर्याप्त से अधिक है। सबसे आम उपयोग डिबगिन के लिए एक टर्मिनल पर कुछ सामान प्रिंट करने के लिए है। 9600 बॉड 960 वर्ण प्रति सेकंड या 12 x 80 वर्ण रेखा प्रति सेकंड है। आप कितनी तेजी से पढ़ सकते हैं? :)

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

सीमा क्या है ...

धारावाहिक की सीमाएं अधिक हैं। सीधे आप अपने कार्यक्रमों में 115200 बॉड का उपयोग कर सकते हैं और यह सिर्फ काम करेगा। Arduino टर्मिनल अधिकतम 115200 की अनुमति देगा, लेकिन RealTerm जैसे अन्य कार्यक्रम आपको उच्चतर चलाने देंगे।

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

अधिक दूरी पर, आपको तर्क स्तर (सादे 0 से 5 वी) सिग्नलिंग का उपयोग करते समय शोर के साथ समस्याएं होनी शुरू हो जाएंगी। बड़ी दूरी का उपयोग करने के लिए, आप मजबूत सिग्नलिंग, आमतौर पर RS-232 और कम सामान्यतः RS-485 प्रदान करने के लिए एक ट्रांसीवर जोड़ सकते हैं। RS-232 के साथ आप 10 फीट की दूरी पर एक मेगा बिट चला सकते हैं।

माइक्रोप्रोसेसर घड़ी की गति वास्तविक सीमा होगी। हार्डवेयर UART के साथ, प्रोसेसर को UART को हर 10 बिट (N81 के लिए) पर एक बाइट लोड करना होगा। इसलिए जब आपको 1 M बॉड मिलेगा तो 16 MHz प्रोसेसर के लिए UART को डेटा के साथ रखना एक चुनौती होगी। एक नया बाइट हर 160 घड़ी की टिक को भेजा जाएगा, जो कोड की बहुत कम लाइनें हैं। डेटा के थोड़े समय के लिए, आप उस दर को प्राप्त कर सकते हैं। संदेश है, UART की सीमा से पहले प्रोसेसर गति से बाहर चला जाएगा।

ध्यान दें, यह सब HardwareSerial पर लागू होता है , सॉफ्टवेयर सीरियल बहुत अलग है।


कृपया ध्यान दें 2M hw धारावाहिक के साथ संग्रहणीय है, लेकिन arduino का कार्यान्वयन बहुत धीमा लगता है और बहुत सारा कचरा भेजता है। अपनी गति को दोगुना करने के लिए जादू बिट खोजने के लिए atmega328p डीएस देखें। यह भी जोड़ें कि 9800 बॉड एक बहुत पुराना मानक है, और बहुत सारे सेंसर मानक के रूप में उस मूल्य का उपयोग करते हैं, भले ही xbee, gps और अधिक के लिए कॉन्फ़िगर किया जा सकता है। इसके अलावा usb पर सीरियल ऑटो-बॉड्रेट बातचीत डायन का उपयोग करके चयनित बॉड को ओवरराइड कर सकता है, लेकिन मुझे लगता है कि इसका उपयोग arduino (लेकिन यह लियोनार्डो पर हो सकता है) द्वारा नहीं किया जाता है
लेस्तो

1
9600 8N1 एक डी-फैक्टो डिफ़ॉल्ट सेटिंग भी है। एक सीरियल इंटरफ़ेस वाले कई डिवाइस इस सेटिंग के साथ दिए जाते हैं और कॉन्फ़िगर करने की आवश्यकता होती है यदि एक और गति (या डेटाबिट्स, समता बिट, स्टॉप बिट) की आवश्यकता होती है।
पीटर मॉर्टेंसन

"यह तेजी से पर्याप्त से अधिक है" - अच्छा जवाब है, लेकिन मैं इस बिंदु से कुछ असहमत हूं। अधिकांश डिबग आउटपुट कार्यान्वयन अवरुद्ध हो रहे हैं, इसलिए कोड निष्पादन समय में अत्यधिक परिवर्तनों को रोकने के लिए डीबग आउटपुट को जितनी जल्दी हो सके करना बहुत ही वांछनीय है।
Rev1.0

यदि आप बल्क डेटा ट्रांसफर कर रहे हैं, तो आदर्श रूप से आप SPI का उपयोग कर रहे हैं, है ना?
1942 को tuskiomi

6

सभी दिलचस्प जवाबों के अलावा, यह उल्लेखनीय है कि XXX बिट्स / एस के लिए धारावाहिक गति सेट करना आवश्यक नहीं है हार्डवेयर पर XXX बिट्स / एस।

क्लॉक - यहां तक ​​कि क्वार्ट्ज आधारित - अपूर्ण और बहाव के अधीन हैं। इसके अलावा, जैसा कि धारावाहिक घड़ी आमतौर पर पावर-ऑफ-दो प्री-डिविज़र और (पूर्णांक) काउंटर के माध्यम से उत्पन्न होती है, सभी मानों को एक आधार घड़ी आवृत्ति को देखते हुए सटीक रूप से प्राप्त नहीं किया जा सकता है। स्टार्ट / स्टॉप बिट्स की सहायता से, अतुल्यकालिक धारावाहिक संचार कुछ घड़ी के बहाव के प्रति सहिष्णु हो सकता है। लेकिन इसकी सीमाएं हैं।

उदाहरण के लिए, यदि आपका ATmega328PA 1MHz पर चल रहा है, तो आप 0.2% त्रुटि पर 9600b / s प्राप्त कर सकते हैं। लेकिन 14400b / s पर त्रुटि -3.5% है (वास्तव में 13900b / s पर संचार कर रहा है)। और 28800b / s पर, त्रुटि + 8.5% है (वास्तव में 31200b / s पर संचार कर रही है)। वे सभी आंकड़े ATmega48PA-88PA-168PA-328PA डेटाशीट, p200 के हैं

यह एक मुद्दा नहीं है जब दो समान उपकरण एक साथ संवाद करते हैं (जैसा कि वास्तव में समान गति से संचार होता है )। विभिन्न उपकरणों के बीच संचार करते समय यह एक मुद्दा हो सकता है।

आधार आवृत्ति में वृद्धि आवश्यक नहीं है कि सटीकता में काफी सुधार हो। उदाहरण के लिए, 2 मेगाहर्ट्ज से ऊपर के समान ATmega328PA को चलाने से वास्तव में बेहतर परिणाम नहीं मिलते हैं क्योंकि ज्यादातर राउंडिंग त्रुटियों के कारण होते हैं। लेकिन इसे चलाने में 1.8432 मेगाहर्ट्ज 2400b / s से 57.6kHz तक बहुत सटीक बीपीएस देता है।


3

मुझे लगता है कि स्थानांतरण दर का उपयोग करना एक तरह की परंपरा है जो सबसे धीमी (300) नहीं है, लेकिन यह भी नहीं कि अंततः कुछ सेटअप (28800 या 115200) में समस्या हो सकती है। पीसी सीरियल पोर्ट (सबसे अधिक बार एक FTDI232 USB एडाप्टर) उच्च दरों के साथ सामना कर सकता है लेकिन आपका DIY हार्डवेयर नहीं हो सकता है। इसलिए 9600 बीपीएस ने कोड उदाहरणों के लिए खुद को किसी प्रकार की मानक अंतरण दर के रूप में स्थापित किया है।


2

वापस समय के मिस्ट्स में, रिमोट कीबोर्ड के लिए "गोल्ड स्टैंडर्ड" (एक टेलीफोन मॉडेम का उपयोग करके, और टेलेटाइप्स, यदि आपको याद है तो) 9600 बॉड था, शुरू में केवल एक समर्पित फोन लाइन पर प्राप्त करने योग्य था। समय धीरे-धीरे आगे बढ़ता है; प्रौद्योगिकी अग्रिम, तेजी से; और मेमोरी समय से अधिक धीमी गति से चलती है (ऐसा लगता है)। हम नियमित रूप से संवाद कर सकते हैं, कम से कम कई मीटर से अधिक, 9600 बॉड से अधिक परिमाण के आदेशों के एक जोड़े पर। एक समय जिसे सोने का मानक माना जाता था वह अब सोना नहीं है, लेकिन फिर भी इसे मानक माना जाता है।

tl; dr: यह इतिहास है, तकनीक नहीं।


0

मुझे लगता है कि मुख्य कारण लोग 9600 का सबसे अधिक उपयोग करते हैं, यह है कि यह Arduino IDE में डिफ़ॉल्ट बॉड दर है। इसके अलावा, यदि धारा सिग्नल को लंबी यात्रा करनी होती है, तो तेजी से डेटा दरें भी अविश्वसनीय हो सकती हैं - हालांकि मुझे नहीं पता कि इसे एक इष्टतम गति के रूप में क्यों चुना गया था।


-2

मानव प्रतिक्रिया समय

क्योंकि जब आपका Arduino पोर्ट पर थ्रेशिंग कर रहा होता है, तो यूजर्स को 100% समय के लिए सीरियल मॉनिटर को बंद करने में सक्षम होना पड़ता है , और 100% से कम समय में अधिकतम ट्रांसफर स्पीड की आवश्यकता होती है

9600 बॉड "एक भगोड़ा प्रक्रिया को मारने के लिए आसान" और "कष्टप्रद धीमी गति" के बीच एक समझौता है।


100% हे ... दिलचस्प;)
एंग्री 84
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.