इस संकेत में किस एन्कोडिंग का उपयोग किया जाता है?


19

मेरे पास एक सस्ता वायरलेस पूल थर्मामीटर (एक्यूराइट 617 1 ) है और मैं रिसीवर पर तापमान डेटा को इंटरसेप्ट करना चाहता हूं और इसका उपयोग कम्प्यूटरीकृत डेटा लॉगिंग सिस्टम के साथ करना चाहता हूं।

आसानी से, रिसीवर के अंदर एक छोटा ब्रेक-आउट बोर्ड होता है जो एंटीना से जुड़ा होता है और इसमें डिजिटल "V", "G", "D", और "SH" पिन होते हैं:

RF211 बोर्ड

यहां ट्रांसमिशन के दौरान "डी" पिन से कैप्चर किए गए डेटा का एक सेगमेंट है (ये प्रति मिनट एक बार होता है)। इस खंड से पहले, ऐसा प्रतीत होता है कि बहुत अधिक-उच्च-दर डेटा है, लेकिन मेरा मानना ​​है कि शोर हो सकता है - यह 1.36kHz / 680Hz डेटा की शुरुआत है।

"डी" पिन से संकेत पर कब्जा कर लिया

मैं थोड़ा गुदगुदा गया हूं और एक एन्कोडिंग नहीं मिल रही है जो इस तरह दिखता है, लेकिन अगर मुझे लगता है कि क्या हो रहा है, तो यहां मैं बता रहा हूं:

  • 680 हर्ट्ज के प्रारंभिक 4 चक्र घड़ियों को सिंक्रनाइज़ करने के लिए हैं, लेकिन कोई डेटा नहीं है
  • 1.36 kHz (2x प्रारंभिक दर) के 13 चक्रों में दो रूपों में से एक के रूप में दिखाई देते हैं: वे या तो चक्र के मध्य बिंदु से पहले कम हो जाते हैं या इसके बाद - मुझे लगता है कि एक रूप एक तार्किक है और दूसरा एक शून्य है।
  • उसके बाद, एक अजीब अंतर प्रतीत होता है, लेकिन यदि आप निम्न के भाग को छूट देते हैं जो पूर्ववर्ती "1" का हिस्सा है, तो शेष अंतराल 735 tos है, जो कि एक (चरण-सही!) निरंतरता है। 680 हर्ट्ज प्रस्तावना।

क्या मैं इसे सही ढंग से देख रहा हूं? क्या इस एन्कोडिंग का कोई नाम है?

ब्रेक-आउट बोर्ड पर कुछ और नोट:

  • बोर्ड "RF211" के रूप में चिह्नित है और MICRF211 के साथ उल्लेखनीय रूप से सुसंगत दिखता है, 3V QwikRadio रिसीवर जो 433.92MHz पर संचालित होता है " 3
  • MICRF211 डेटा शीट में निम्नलिखित आंकड़ा है (बहुत कम स्पष्टीकरण के साथ), जो कि तांत्रिक रूप से ऐसा दिखता है जैसे कि मैं अपने कैप्चर की तुलना में डबल-डेटा-दर वर्ग तरंग को छोड़कर क्या देख रहा हूं:
    डेटा प्रोफ़ाइल

2016-02-14 अपडेट: मैंने इस परियोजना पर दोबारा गौर किया है और एक 4-चक्र प्रस्तावना और 1-चक्र "पोस्टएम्बल" के बीच एक साफ 64-बिट स्ट्रीम प्राप्त कर रहा हूं, जिसके बाद डिस्प्ले बोर्ड आरएफ मॉड्यूल को बंद कर देता है खींच ^ एसएच कम (शीर्ष पंक्ति):

64 बिट डेटा

मिकेल की "33/66% पीडब्लूएम" योजना (जो Google पर कहीं और दिखाई देती है) के अनुसार, वह है

-_-_-_-_0000011110011000110000000000000000000000100011101000010010101010-_

तो अब मुझे बिट्स को डिकोड करने के लिए तापमान में हेरफेर करना शुरू करना होगा। यहाँ ("x") बिट्स हैं जो डिस्प्ले में किसी भी स्पष्ट बदलाव के बिना बदलते प्रतीत होते हैं:

0000011110011000110000000000000000000000100011101000010010101010
------------------------------------------------x----xxxx----xxx

मुझे लगता है कि ये कम से कम महत्वपूर्ण बिट्स या बैटरी-स्तर (जो केवल "कम" के रूप में दिखाया गया है जब यह काफी गिरता है)।

2016-02-15 अपडेट: मैं नया "रिवर्स इंजीनियरिंग" देने के लिए सड़क पर शो ले रहा हूं, जिसका अर्थ निर्धारित करने पर एक दरार है: /reverseengineering/12048/what-is-contain -इन-इस संचरण-आरएफ-पूल तापमान सेंसर आधार इकाई-फिर


BTW - AcuRite 617 यूनिट के लिए होम डिपो वेब साइट पर उपयोगकर्ता टिप्पणियों को पढ़ना इस उत्पाद के समग्र स्थायित्व पर एक अच्छा एहसास नहीं देता है। वास्तव में ऐसा लगता है कि यह प्रेषक इकाई में लीक नहीं होने के संबंध में एक बाहरी स्थिति है।
माइकल करस

ओह, यह है। मेरा पहले ही लीक हो चुका है। लेकिन मैं इसे बाहर सूख गया है और यह disassembled और विश्वास के कुछ डिग्री है कि मैं कुछ गर्म गोंद और / या सिलिकॉन के साथ सील में सुधार कर सकते हैं। बैटरी कम्पार्टमेंट एक अच्छे ओ-रिंग के साथ अच्छी तरह से डिज़ाइन किया गया प्रतीत होता है; यह बाकी इकाई है जो बहुत खराब है, और जिसे फिर से खोलने की आवश्यकता नहीं है ...
Rob Starling

अन्य उत्तरों को स्किम्ड किया लेकिन यह उपस्थिति से है। प्रारंभिक वर्ग तरंग को डेटा स्लाइसर को 50% के स्तर पर सिंक्रनाइज़ करना है। डेटा से पहले रोकें सुनिश्चित करना है कि "1" स्तर का क्षय हुआ है। फिर 2: 1mk-spc = 1 कहना और 1: 2 = 0. हिस्टैरिसीस के साथ 50:50 पूर्व 1 या 0 के बीच टॉगल नहीं करता है लेकिन डेटा स्ट्रीम के दौरान नहीं होना चाहिए। पूर्ववर्ती "खराब" है क्योंकि यह औसत 50:50 के अनुपात को संरक्षित करने का प्रयास नहीं करता है और यदि डेटा 1 से अधिक या 0 है, तो आपका डीसी स्तर बहाव होगा, लेकिन यदि आपके डीसी स्तर का समय निरंतर है, तो यह मैसेंजर की लंबाई की तुलना में लंबा है। मामला। आप फिर अगले संदेश के लिए 1: 1 प्रस्तावना के साथ फिर से resynch।
रसेल मैकमोहन

एक डिकोडर आरसी फिल्टर द्वारा एक इनपुट फेड सिग्नल के साथ एक ओपैम्प हो सकता है ताकि सेट करने के लिए डीसी स्तर और अन्य फीड सिग्नल को एक रोकनेवाला प्लस + ​​वी हिस्टैरिसीस फीडबैक (शायद 4 आर के बारे में) के माध्यम से सेट किया जा सके ताकि 1: 1 सिग्नल का आउटपुट न हो लेकिन 2 : 1 या 1: 2 करता है। हिस्टैरिसीस% और डीसी आरसी समय के साथ खेलने का थोड़ा सा समय और इसे अच्छी तरह से काम करना चाहिए।
रसेल मैकमोहन

आवास के नीचे कैल्शियम कार्बाइड या धातु कैल्शियम के कुछ दानों को सूखा और थोड़ा दबाकर रखना चाहिए :-)। नहीं, मैंने कभी कोशिश नहीं की है।
रसेल मैकमोहन

जवाबों:


8

Micrel इसे 33/66% PWM योजना के रूप में संदर्भित करता है। यह एक काफी सरल, लेकिन तदर्थ प्रोटोकॉल प्रतीत होता है।

पीडब्लूएम पल्स-चौड़ाई मॉडुलन के लिए खड़ा है। एक विकिपीडिया पृष्ठ है जो अधिक विस्तार में जाता है, लेकिन संक्षेप में, पीडब्लूएम वह जगह है जहां आप एक निश्चित अवधि रखते हैं, इसलिए यहां पर बढ़त से अगली बढ़ती बढ़त तक का समय है, लेकिन आप उच्च में बिताए गए समय का प्रतिशत भिन्न करते हैं गिरने की अवस्था होने पर बदल कर स्थिति। इस एक के लिए, आप देख सकते हैं कि यह '1' के लिए 33% अधिक है और '0' के लिए 66% अधिक है।

दालों की प्रारंभिक श्रृंखला बराबर उच्च और निम्न बार होती है। यह आमतौर पर वास्तविक डेटा प्राप्त होने से पहले रिसीवर को सिंक करने की अनुमति देने के लिए किया जाता है।

मॉड्यूल के लिए वे क्या चाहते हैं, इस पर कुछ और विवरणों के लिए http://www.micrel.com/_PDF/App-Notes/an-22.pdf देखें ।

इस तरह के एन्कोडिंग को प्राप्त करने का एक विशिष्ट तरीका यह है कि इसे माइक्रोकंट्रोलर के टाइमर इनपुट कैप्चर पिन में इनपुट किया जाए। या, आप बस एक सामान्य इनपुट से कनेक्ट कर सकते हैं और इसका नमूना 4-5x PWM अवधि में हो सकता है। डिकोडिंग के लिए एल्गोरिथ्म वहाँ से बहुत कठिन नहीं है।

वैकल्पिक रूप से, जैसा कि मार्कट द्वारा सुझाया गया है, आप अपने तरीके से तापमान सेंसर पर वापस काम कर सकते हैं। लेकिन, अगर यह एक एनालॉग आउटपुट सिग्नल है, तो आपको इसे स्वयं डिजिटल में बदलना होगा और मूल आउटपुट से लॉगिंग में थोड़ी अलग संख्या हो सकती है।


3

मेरे परिचित के लोग आमतौर पर उस एन्कोडिंग तकनीक "पीडब्लूएम" को कहते हैं, जो मुझे लगता है कि एक उचित विवरण है।

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

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


यह मुझे लगता है कि @RobStarling को पहले से ही पता चल सकता है कि रिसीवर डिवाइस को देखने और जो प्रदर्शित किया जा रहा है, उसके द्वारा प्रसारित तापमान क्या है।
माइकल करास

1
सच है, लेकिन ये चीजें मुश्किल हो सकती हैं। जैसे प्रदर्शन /F / soC के बीच स्विच करने योग्य होता है, इसलिए ट्रांसमिशन पूर्ण ˚C या relativeF में या तो कुछ अजीब ऑफसेट के सापेक्ष हो सकता है या कुछ मनमाना फिक्स्ड-पॉइंट सटीक हो सकता है। इसके अलावा, 3 स्विचेबल स्टेशन आईडी ("ए", "बी", "सी") हैं और हालांकि यह कहता है कि आईडी बदलने से रिसेप्शन में मदद मिल सकती है, मेरे पास एक कूबड़ है, यह संदेशों पर सिर्फ एक पहचान उपसर्ग है - मैं स्विच करूंगा इसे देखें और देखें कि डेटा में क्या परिवर्तन होता है।
रोब स्टारिंग

@RobStarling - आप यह देखने के लिए प्रेषक इकाई खोल सकते हैं कि क्या वे एक साधारण प्रकार के तापमान सेंसर का उपयोग कर रहे हैं जैसे कि LM75 या अन्य सामान्य I2C प्रकारों में से एक। यदि ऐसा है तो यह संभव है कि तापमान के मान के अनुसार लिंक पर भेजा जा रहा डेटा केवल टेम्प सेंसर डिवाइस से पढ़ा गया हो। दूसरी ओर अगर प्रेषक एक सेंसर के रूप में एक डायोड या BJT ट्रांजिस्टर जैसे एनालॉग सेंसर का उपयोग करता है, तो भेजे गए वास्तविक डेटा का अनुमान लगाना अधिक कठिन होगा।
माइकल करस

मुझे संदेह है कि आपको डेटा सामग्री का पता लगाने का सबसे अच्छा मौका प्रेषक को नियंत्रित स्थिति में रखना है जहां आप तापमान को धीरे-धीरे बदल सकते हैं ताकि आप एक समय में पढ़ने के बदलाव को थोड़ा देख सकें। आपके पास रिसीवर डिस्प्ले होगा जो आपको बताएगा कि वास्तव में क्या उम्मीद की जा रही है।
माइकल करस

@MichaelKaras - यह देखना मुश्किल है कि सेंसर क्या है - यह एक छोटे से बोर्ड पर टिप में थोड़ा होल्डर में लगा होता है, जिसे थर्मल पेस्ट के एक थपके में रखा जाता है ताकि पानी के नीचे की दीवार पर इसे जोड़ा जा सके।
रॉब स्टारिंग

2

लगभग सभी आरएफ ट्रांसमिशन योजनाओं को अपने डेटा एन्कोडिंग प्रोटोकॉल में कई विशेषताओं की आवश्यकता होने वाली है। ये शामिल होंगे:

  1. लगातार प्रारूप प्रस्तावक आवृत्ति पर एक रिसीवर लॉक करने के लिए इस्तेमाल किया
  2. एक संकेत पल्स इंडिकेटर शुरू होता है अगर फ्रेम इंडिकेशन
  3. डेटा पुनर्प्राप्ति के लिए एन्कोडेड क्लॉकिंग के साथ किसी तरह से डेटा 1 और 0 को एनकोड करने की विधि।

विषम बॉल पल्स जिसे आपने नोट किया है वह निश्चित रूप से सिंक पल्स इंडिकेटर है।

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

आपके उदाहरण में सिंक पल्स से पहले पल्स की चौड़ाई मॉड्यूलेट किए गए डेटा को देखना अजीब है। हालाँकि यह अभी भी एक व्यवहार्य योजना है यदि डेटा डिकोडिंग एल्गोरिदम को इस स्थिति में सिंक के साथ प्राप्त डेटा को स्वीकार करने के लिए डिज़ाइन किया गया है। यह संभव है कि इकाई सिंक से पहले एक प्रकार का डेटा भेज रही है और एक के बाद एक। विभाजन सेंसर पते / अस्थायी डेटा या सच्चे डेटा / उल्टे डेटा के बीच हो सकता है।

संपादित करें:

यह ध्यान रखना दिलचस्प है कि यह लगभग ऐसा लगता है कि ट्रांसमीटर इकाई सिंक पैटर्न पर और उसके बाद सिंक पैटर्न की तुलना में सिंक पैटर्न से पहले डेटा कोशिकाओं के लिए सकारात्मक पल्स चौड़ाई बनाने के लिए एक अलग सॉफ्टवेयर एल्गोरिथ्म का उपयोग कर रही है। इसका मतलब यह है कि पैटर्न के बाद के हिस्से की तुलना में पहले के पैटर्न को बनाने वाले सॉफ़्टवेयर का एक अलग हंक हो सकता है। पैटर्न के इस अंतर का अर्थ यह हो सकता है कि प्रत्येक मामले में डेटा स्रोत को अलग-अलग हैंडलिंग की आवश्यकता होती है कि इसे बिट द्वारा कैसे एक्सेस किया गया था। टाइमिंग आरेख में देखा गया अंतर केवल एक निर्देश समय या पैटर्न पीढ़ी छोरों में दो अंतर हो सकता है।


मुझे आश्चर्य है कि अगर यह है: प्रस्तावना (वर्ग) + प्रारंभ बिट (1) + अद्वितीय आईडी (12 बिट) + सिंक पल्स + डेटा। (ओह, जैसे आपने सुझाव दिया ... उदाहरण के लिए, यह उम्मीद करता है कि सिंक पल्स के दौरान getC डेटा के लिए तैयार हो जाएगा)
Rob Starling

2

मैंने Acurite 617 को डिकोड करना शुरू कर दिया है और यहाँ मेरी प्रारंभिक टिप्पणियां हैं। मैं आपको बता सकता हूं कि अंतिम बाइट कुछ प्रकार की "चेक" बाइट होती है और अगले तीन बाइट्स में तापमान होता है। ये बाइट 7 वीं बिट का उपयोग करके समता बनाने के लिए भी भेजे जाते हैं और प्रत्येक बाइट के निचले नीब का उपयोग किया जाता है। मैंने डेटा पर कब्जा करने के लिए एक Arduino प्रोग्राम लिखा है और निम्नलिखित संदेश / तापमान देखे हैं।

40 CE c0 00 00 0c 03 be
(00 0C 03) => 0C3 => 67F

40 CE c0 00 00 0c 84 39
(00 0C 04) => 0C4 => 67F

40 CE c0 00 00 0c 05 b8
(00 0C 05) => 0C5 => 67F

अन्य डेटा / टेम्प्स जो मैंने देखे हैं वे हैं:

ई 2 => 73 एफ

F5 => 76F

108 => 80F (81 00 88)

109 => 80 एफ

इसका उपयोग करके आप "सीधी रेखा" (धारणा) रूपांतरण करने में सक्षम होना चाहिए।

चूंकि मेरे पास अच्छा स्कोप नहीं है (और तथ्य यह है कि डेटा एक मिनट में एक बार भेजा जाता है) मुझे अपने समय के बारे में निश्चित नहीं है। मैं देख रहा हूँ कि HI और LO 720 usec हैं और डेटा बिट्स 240 और 480 usec है।

उम्मीद है कि मेरे पास बाद में और जानकारी होगी। मेरे पास इनमें से एक गुच्छा है। जैसे ही वे रिसाव करना शुरू करते हैं, मैं उन्हें पूल से हटा देता हूं और उन्हें घर के आसपास उपयोग के लिए सुखा देता हूं। बाद में 617 मॉड्यूल्स (स्क्रू ऑफ बॉटम और ओ-रिंग के साथ) लंबे समय तक चलते हैं।


मैंने कुछ और डिकोडिंग की। अंतिम बाइट (चेक बाइट) सभी आठ बाइट्स के XOR को 0FFH के बराबर बनाता है। उदाहरण के लिए "40 ​​CE C0 00 00 8D 0C 30", 40 xor CE xor C0 xor 00 xor 00 X 8D xor 0C xor 30, 0FF के बराबर है।

इसके अलावा, मैंने तापमान को 34F तक ले लिया और गिनती 10 दशमलव (i, e, 00 00 0A) थी और 80F में गणना 264 दशमलव (यानी, 81 00 88 या 108H) थी।

इससे मैं Temp (F) = 0.1811 * Count + 32.1889 का उपयोग कर रहा हूं। यदि मुझे कोई त्रुटि दिखाई देती है तो मुझे कुछ बेहतर डेटा प्राप्त करने के लिए एक बड़ा स्पैन मिल सकता है।

2016-02-14 पर रॉ स्टार्लिंग के तार को देखते हुए:

00000111/10011000/11000000/00000000/00000000/10001110/10000100/10101010 07 98 C0 00 00 8E 84 AA

XOR = एफएफ

गिनती = 0E4 या 228

अस्थायी = 73.5F


धन्यवाद दोस्तों!!! मुझे पूरा यकीन है कि संख्या सिर्फ एक "गिनती" नहीं है, बल्कि 0.1C में सटीक तापमान - यानी डिकोडिंग के लिए "गणित" 228है 22.8C। फ़ारेनहाइट के लिए, सामान्य रूप से करें F=C*9/5+32
रोब स्टारिंग

रिवर्स इंजीनियरिंग SE पर सारांशित: Revengineering.stackexchange.com/a/13593/15076
Rob Starling

1
रोब, आप सही हैं - मुझे यह देखना चाहिए। एफ = 0.18 * गणना + 32.0। अच्छी बात यह है कि आपने बताया, मैं जल्द ही एक व्यापक स्पैन का उपयोग करके बेहतर "मी" और "एक्स" प्राप्त करने के लिए इसे असली गर्म पानी में डालने जा रहा था।
केन एस

आप अभी भी अधिक सटीक संख्या प्राप्त करने के लिए अंशांकन करना चाह सकते हैं, क्योंकि कई समीक्षकों ने कुछ डिग्री के प्रदर्शन के बंद होने की शिकायत की थी। हालांकि, यह भी सिर्फ इस तथ्य को प्रतिबिंबित कर सकता है कि यह सतह के नीचे केवल "4 है और सबसे पुराने-स्कूल पूल थर्मामीटर एक लंबे तार पर हैं।
रोब स्टारिंग

अद्यतन: मैंने एक Arduino लाइब्रेरी लिखी - github.com/robstarling/ArduRight - मुझे बताएं कि क्या यह आपके लिए काम करती है! इसका एक उदाहरण और सब कुछ है। इस पोस्ट में तस्वीर को संदर्भित करते हुए, आपको "SH", "D", और "G" पिन को मिलाप तारों की आवश्यकता होगी। उदाहरण स्केच को चलाने के लिए, उन तारों को क्रमशः पिंस 2, 7 और GND से कनेक्ट करें।
रोब स्टारिंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.