पहले कुछ ओलिन के रूप में अच्छी तरह से देखा: स्तर क्या एक microcontoller आमतौर पर आउटपुट के विपरीत हैं:
चिंता की कोई बात नहीं, हम देखेंगे कि हम इसे इस तरह भी पढ़ सकते हैं। हमें बस यह याद रखना है कि स्कोप पर एक स्टार्ट बिट 1
और स्टॉप बिट होगा 0
।
अगला, आपके पास इसे ठीक से पढ़ने के लिए गलत समय आधार है। 9600 बिट्स प्रति सेकंड (बॉड की तुलना में अधिक उपयुक्त इकाइयाँ, हालांकि बाद वाला गलत नहीं है) प्रति बिट 104 s है, जो आपकी वर्तमान सेटिंग में 1/10 वें डिवीजन का है। ज़ूम इन करें, और पहले किनारे पर एक ऊर्ध्वाधर कर्सर सेट करें। यह आपके स्टार्ट बिट की शुरुआत है। अगले किनारों में से प्रत्येक के लिए दूसरा कर्सर ले जाएँ। शाप देनेवालों के बीच का अंतर 104 s के गुणक का होना चाहिए । प्रत्येक 104 एक बिट है, पहले स्टार्ट बिट ( ), फिर 8 डेटा बिट, कुल समय 832 एस और एक स्टॉप बिट ( )। μ μ μμμμ1
μ0
ऐसा नहीं लगता कि स्क्रीन डेटा भेजे गए से मेल खाता है 0x00
। आपको एक संकीर्ण 1
बिट (आरंभ बिट) देखना चाहिए, उसके बाद एक निम्न स्तर (936 s, 8 शून्य डेटाबिट्स + एक स्टॉप बिट)। आप भेज रहे हैं के
लिए भी वही ; आपको एक लंबा उच्च स्तर (फिर से 936 s, इस बार स्टार्ट बिट + 8 डेटा बिट्स) देखना चाहिए । ताकि आपकी वर्तमान सेटिंग के साथ लगभग 1 विभाजन होना चाहिए, लेकिन ऐसा नहीं है जो मैं देख रहा हूं।
ऐसा लगता है कि पहले स्क्रीनशॉट में आप दो बाइट भेज रहे हैं, और दूसरे चार में, 2 और 3 समान मूल्य के साथ। μμ
0xFF
μ
guesstimates:
0b11001111 = 0xCF
0b11110010 = 0xF2
0b11001101 = 0xCD
0b11001010 = 0xCA
0b11001010 = 0xCA
0b11110010 = 0xF2
Olin को संपादित करना बिल्कुल सही है, यह ASCII जैसा कुछ है। तथ्य की बात के रूप में यह 1 ASCII का पूरक है।
0xCF ~ 0x30 = '0'
0xCE ~ 0x31 = '1'
0xCD ~ 0x32 = '2'
0xCC ~ 0x33 = '3'
0xCB ~ 0x34 = '4'
0xCA ~ 0x35 = '5'
0xF2 ~ 0x0D = [CR]
यह पुष्टि करता है कि स्क्रीनशॉट की मेरी व्याख्या सही है।
संपादित करें 2 (मैं लोकप्रिय अनुरोध पर डेटा की व्याख्या कैसे करता हूं))
चेतावनी: यह एक लंबी कहानी है, क्योंकि यह मेरे सिर में क्या होता है, जब मैं इस तरह से एक चीज को डिकोड करने की कोशिश करता हूं, तो यह एक प्रतिलेख है। यदि आप इससे निपटना चाहते हैं, तो केवल इसे पढ़ें।
उदाहरण: 1 स्क्रीनशॉट पर दूसरा बाइट, 2 संकीर्ण दालों के साथ शुरू। मैं दूसरे बाइट को उद्देश्य से शुरू करता हूं क्योंकि पहले बाइट की तुलना में अधिक किनारे हैं, इसलिए इसे सही करना आसान होगा। संकीर्ण दालों में से प्रत्येक 1/10 वें भाग के बारे में है, ताकि बीच में कम बिट के साथ 1 प्रत्येक उच्च हो। मैं भी इस से संकरा कुछ भी नहीं देखता, तो मुझे लगता है कि यह एक एकल बिट है। यही हमारा संदर्भ है।
फिर, 101
निम्न स्तर पर लंबी अवधि के बाद । पिछले वाले की तुलना में दोगुना चौड़ा दिखता है, ताकि यह हो सके 00
। उच्च निम्न जो फिर से दो बार चौड़ा है, इसलिए वह होगा 1111
। अब हमारे पास 9 बिट्स हैं: एक स्टार्ट बिट ( 1
) प्लस 8 डेटा बिट्स। तो अगला बिट स्टॉप बिट होगा, लेकिन क्योंकि यह है0
यह तुरंत दिखाई नहीं दे रहा है। इसलिए इसे हम सभी को एक साथ रखकर 1010011110
शुरू और रोक के सहित। अगर स्टॉप बिट शून्य नहीं होगा, तो मैंने कहीं न कहीं एक गलत धारणा बनाई होगी!
याद रखें कि एक UART सबसे पहले LSB (कम से कम महत्वपूर्ण बिट) भेजता है, इसलिए हमें 8 डेटा बिट्स को उल्टा करना होगा: 11110010
= 0xF2
।
अब हम एक एकल बिट की चौड़ाई, एक डबल बिट और 4 बिट अनुक्रम जानते हैं, और हमारी पहली बाइट पर एक नजर है। पहली उच्च अवधि (विस्तृत नाड़ी) 1111
दूसरी बाइट की तुलना में थोड़ी चौड़ी है , इसलिए यह 5 बिट्स चौड़ी होगी। प्रत्येक के बाद निम्न और उच्च अवधि अन्य बाइट में डबल बिट जितनी चौड़ी होती है, इसलिए हम प्राप्त करते हैं 111110011
। फिर से 9 बिट्स, इसलिए अगला एक कम बिट, स्टॉप बिट होना चाहिए। यह ठीक है, इसलिए यदि हमारा मार्गदर्शन सही है तो हम फिर से डेटा बिट्स को उल्टा कर सकते हैं: 11001111
= 0xCF
।
फिर हमें ओलिन से इशारा मिला। पहला संचार 2 बाइट्स लंबा, 2 बाइट्स दूसरे की तुलना में छोटा होता है। और "0" भी "255" से 2 बाइट्स छोटा है। तो यह शायद ASCII जैसा कुछ है, हालांकि बिल्कुल नहीं। मैं यह भी ध्यान देता हूं कि "255" का दूसरा और तीसरा बाइट एक ही है। महान, यह डबल "5" होगा। हम ठीक कर रहे हैं! (आपको समय-समय पर खुद को प्रोत्साहित करना होगा।) "0", "2" और "5" को डिकोड करने के बाद, मुझे लगता है कि पहले दो के कोड के बीच 2 का अंतर है, और अंतिम के बीच 3 का अंतर है। दो। और अंत में मैंने देखा कि 0xC_
पूरक है 0x3_
, जो ASCII में अंकों के लिए पैटर्न है।