वास्तविक द्विआधारी मूल्य और आस्टसीलस्कप मूल्य के बीच अंतर


14

मैंने एक आस्टसीलस्कप के साथ एक ASCII "ए" चरित्र को देखने की कोशिश की, लेकिन वास्तविक बाइनरी मूल्य और आस्टसीलस्कप मान अलग-अलग हैं ऐसा क्यों है? ASCII "ए" बाइनरी मूल्य - 01000001

आस्टसीलस्कप इस ग्राफ को प्रदर्शित करता है:

अससी ए

अससी ए

मैं कोड का उपयोग करके ASCII मान भेजने के लिए एक Arduino Uno का उपयोग करता हूं:

void setup() {  
  Serial.begin(9600);  
}  

void loop() {  
  Serial.println("A");  
  delay(1000);  
}

जवाबों:


35

यहां बताया गया है कि आपने ऑसिलोस्कोप तरंग कैसे पढ़ी। मैंने आपकी तरंग तस्वीर को संपादित करने और इसे दिखाने के लिए समय दिया कि कौन सा बिट है। माइक्रोकंट्रोलर प्रति वर्ण 10 बिट्स भेजता है; START, जो हमेशा 0, 8 डेटा बिट्स और STOP होता है जो हमेशा 1 होता है। लाइन 1 पर भी टिकी हुई है, इसलिए पहला START गिरने वाला किनारे रिसीवर को अलर्ट करता है कि एक बाइट्स आ रहा है। बिट्स को सबसे पहले एलएसबी भेजा जाता है, इसलिए यदि आप उन्हें सममित रूप से "देखना" चाहते हैं, तो आपको उन्हें किसी भी तरह से बनाने के लिए क्षैतिज रूप से दर्पण करने की आवश्यकता है। प्रत्येक बिट की चौड़ाई बॉड्रेट द्वारा निर्धारित की जाती है, और ट्रांसमीटर और रिसीवर दोनों को पता होना चाहिए कि बॉड्रेट क्या है।

नीचे दी गई तस्वीर से आप देख सकते हैं कि यह तीन अक्षर भेजता है: ASCII वर्ण 'ए', एक गाड़ी वापसी और एक लाइन फीड।

यहाँ छवि विवरण दर्ज करें


यदि यह धारावाहिक संचार है, तो लहर इस तरह दें। सही? CR और LF क्या हैं? सीआर या एलएफ जैसे अन्य डेटा क्या मिल सकते हैं?
user38701

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

@ user38701: जब आप Enter कुंजी दबाते हैं तो CRLF होता है। तकनीकी रूप से, CR को रिटर्न कुंजी माना जाता है और LF को एंटर कुंजी माना जाता है, लेकिन सीरियल कंसोल एंटर कुंजी को CRLF (या कभी-कभी केवल LF) होने की व्याख्या करता है। अधिकांश प्रोग्रामिंग भाषाओं में, CR "\ r" है और LF "\ n" है, लेकिन कुछ कंपाइलर / भाषा "
C

1
गाड़ी वापसी सरल है। उन्होंने एक printlnकमांड का उपयोग किया , जिसका अर्थ है स्ट्रिंग को प्रिंट करना, साथ ही साथ "\ r \ n"। तो तीन वर्ण
ps95 15

1
यह ध्यान देने योग्य है कि लाइन समाप्ति प्रणाली-विशिष्ट हैं। CRLF मुख्य रूप से विंडोज और Arduino लाइन समाप्ति है। यदि आपने लाइनक्स पर टर्मिनल का उपयोग करके "ए" के स्रोत के रूप में एक ही परीक्षण दोहराया है, तो आप केवल एलएफ देखेंगे।
निकोलस होल्टहॉस

13

यदि आप Arduino println () प्रलेखन को देखते हैं तो आप देखेंगे कि यह अंत में एक गाड़ी वापसी और लाइनफीड जोड़ता है। तो दशमलव में आप 65 (ए), 13 (सीआर) और 10 (एलएफ) के साथ समाप्त होंगे जो बाइनरी में अनुवाद करता है:

01000001 00001101 00001010

Async सीरियल डेटा को सबसे पहले LSB भेजा जाता है:

10000010 10110000 01010000

आपका सिग्नल अधिक ऊँचा है इसलिए स्टार्ट बिट 0 होगा और स्टॉप बिट 1 होगा ताकि प्रत्येक बाइट में आपको जोड़ा जाए और आप इसे ऊपर ले जाएँ:

0100000101 0101100001 0010100001

अपने आरेख से सटीक समय का काम करना थोड़ा कठिन है, लेकिन ऐसा लगता है कि कम से कम मोटे तौर पर मेल खा रहा है और आपको यह विचार देना चाहिए कि कुछ अतिरिक्त बिट कहां से आते हैं और उन्हें फिर से क्यों ऑर्डर किया जाता है। Kvegaoro द्वारा प्रदान किया गया विकिपीडिया लिंक Async सीरियल डेटा पर बहुत अच्छी पृष्ठभूमि की जानकारी देता है।


1

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

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