यादृच्छिक संख्या जनरेटर के लिए सबसे छोटा और सरल बीज कौन सा है?


40

एक छोटा माइक्रोकंट्रोलर (8-बिट एटमेल) कई फैंसी यादृच्छिक प्रकाश अनुक्रमों के साथ एक लाइट शो प्रस्तुत करने के लिए कई रोशनी को नियंत्रित करता है।

एक उपयुक्त छद्म- RNG अपना काम अच्छी तरह से करता है, लेकिन मैं इसके लिए एक अच्छे बीज की तलाश कर रहा हूं। एक बीज आवश्यक होगा क्योंकि अगर कोई एक ही समय में कई ऐसे उपकरणों को चालू करता है, तो यह अच्छा नहीं होगा यदि वे सभी समान प्रभाव उत्पन्न करते हैं जब तक कि वे अपने व्यक्तिगत घड़ी स्रोतों में छोटे अंतर के कारण धीरे-धीरे अलग हो जाते हैं।

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

समस्या यह है कि, इस परिदृश्य में, कोई बटन नहीं है। जैसे ही डिवाइस चालू होता है, प्रोग्राम शुरू करना होता है।

पीसीबी पर जगह बेहद सीमित है (बहुत छोटे एसएमडी भागों में से कुछ से अधिक कुछ भी फिट नहीं हो सकता है), इसलिए मैं सबसे छोटा और सरल संभव समाधान ढूंढ रहा हूं। इसलिए मैं असली RNG हार्डवेयर, रेडियो रिसीवर आदि जैसे फैंसी समाधानों का पालन करूंगा।

मेरे पास सीपीयू में एक 16 बिट टाइमर-काउंटर है, और एक अप्रयुक्त पोर्टपिन है जिसमें एक एडीसी तक पहुंच है।

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

एक बेहतर विकल्प कई रूपांतरण बनाने और इन मापों के कम से कम महत्वपूर्ण बिट्स में से एक मूल्य का निर्माण करना होगा। हालाँकि, मैंने पहले इस प्रकार के ADC का उपयोग किया था और मुझे पता है कि यह बहुत सटीक है। सबसे तेज गति से एडीसी चलाने से यहां मदद मिल सकती है।

क्या किसी के पास बेहतर सुझाव है? बीज को पूरी तरह समान रूप से वितरित करने की आवश्यकता नहीं है, लेकिन वितरण जितना अधिक समान है, उतना ही बेहतर है। पूरी तरह से समान वितरण के साथ एक 16 बिट बीज एक सपना सच होने के लिए बहुत अच्छा होगा, लेकिन मुझे लगता है कि 5 या 6 बिट्स पर एक आधा सभ्य वितरण पर्याप्त हो सकता है।


12
"यह एक आपूर्तिकर्ता के चेहरे की कल्पना करना मजेदार होगा जब मैं उन्हें बताता हूं कि हम सबसे खराब गुणवत्ता वाले एसएमडी प्रतिरोधों को चाहते हैं जो वे पा सकते हैं" - इस अवरोधक के मूल्य को सर्किट आरेख में अपरिभाषित होने देना भी मजेदार होगा, और यह बताना उत्पादन में लोगों को यह एक हिस्सा मैन्युअल रूप से मिलाप करना चाहिए, क्योंकि पीसीबी प्लेसमेंट मशीन से बाहर आता है, एक बिन से बाहर जहां हम एक साथ हर प्रतिरोधक मूल्य को मिलाते हैं। - क्योंकि यह एक RNG नहीं है जिसकी मुझे तलाश है, लेकिन एक बीज है । इसलिए यदि यह लगभग हर बार समान मूल्य उत्पन्न करता है तो यह उतना बुरा नहीं है, यह डिवाइसों पर अलग होना अधिक महत्वपूर्ण है।
१०:१५ पर बनाम

8
उत्पादन प्रोग्रामिंग के दौरान EEPROM भंडारण के लिए एक यादृच्छिक मूल्य क्यों नहीं लिखें? इस तरह, आप कट्टर आरएनजी का उपयोग कर सकते हैं जैसे कि यह केवल उत्पादन प्रोग्रामर (एस) में होगा और अंतिम उपकरण नहीं। (@Immibis को श्रेय: आपकी 'थोड़ी अलग सॉफ्टवेयर फ़ाइल' ने मुझे यह विचार दिया।)
कैल्रियन

2
तो बस 100% स्पष्ट होने के लिए, समस्या यह है कि वे एक ही अनुक्रम में शुरू कर सकते हैं, न कि वे समय के साथ अलग हो सकते हैं, सही?
wedstrom

2
आपके RNG की पसंद मायने रखती है: कुछ को अच्छी गुणवत्ता वाले बीज की आवश्यकता होती है, कुछ को नहीं। उदाहरण के लिए, Xorshift के लिए, 0 के अलावा कोई भी बीज काम करेगा और समान रूप से अच्छी तरह से काम करेगा। प्रारंभिक बीज में भी थोड़ा अंतर आरएनजी के चक्र में एक बहुत ही अलग स्थिति में होगा।
जिज्ञासु

3
आप सभी ADC उत्तरों को और भी यादृच्छिकता के लिए आँकड़ों और समय के साथ जोड़ सकते हैं। उदाहरण के लिए, मापें कि कितने प्रोसेसर टिक्स लेते हैं जब तक कि आप एन नमूने नहीं लेते हैं जहां निचले 3 एलएसबी 101 हैं, और एम नमूने जहां निचले 3 एलएसबी 110 हैं। वांछित के रूप में इस अवधारणा का विस्तार करें।
6

जवाबों:


24

A / D पिन और ग्राउंड के बीच एक समानांतर रेसिस्टर और कैपेसिटर लगाएं। रोकनेवाला को काफी अधिक बनाओ, अधिमानतः ए / डी के लिए इनपुट सिग्नल प्रतिबाधा आवश्यकता से ऊपर। आरसी समय को लगातार 10 maybe के आसपास रखें। उदाहरण के लिए, 100 k example और 100 pF एक अच्छे संयोजन की तरह लगते हैं।

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

कम बिट या कम दो बिट्स को पकड़ो और यादृच्छिक बिट्स की किसी भी संख्या को प्राप्त करने के लिए आवश्यक दोहराएं।

अधिक यादृच्छिक पैटर्न के लिए, इस प्रक्रिया को कभी-कभी करें और पहले से उपयोग किए जा रहे यादृच्छिक संख्या जनरेटर में ए / डी परिणाम के कम बिट को इंजेक्ट करें।


यह अच्छा लगता है। ADC पर इनपुट प्रतिबाधा की जांच करना सुनिश्चित करें - Atmega8 श्रृंखला में 100Meg का एनालॉग इनपुट प्रतिबाधा है जो ओलिन के प्रतिरोधक मूल्य को थोड़ा कम करता है।
स्टेफंडज

3
@stef: इनपुट प्रतिबाधा और सही रूपांतरण के लिए आवश्यक संकेत प्रतिबाधा दो अलग-अलग चीजें हैं। हां, सीमेंस होने के कारण इनपुट प्रतिबाधा बहुत अधिक है। हालांकि, सिग्नल पर अधिकतम प्रतिबाधा सीमा है ताकि वह नमूना को चार्ज करने और निर्दिष्ट समय के भीतर कैप को धारण करने में सक्षम हो सके, और पिन में जो भी रिसाव हो उसे दूर किया जा सके।
ओलिन लेथ्रोप

2
क्षमा करें, आपके उत्तर से मुझे लगा कि आप स्रोत प्रतिबाधा युक्ति के विपरीत इनपुट प्रतिबाधा का संदर्भ दे रहे हैं। 10k Atmega8 का निर्दिष्ट अधिकतम स्रोत प्रतिबाधा है, इसलिए आपका उत्तर हाजिर है। संदर्भ के लिए, एस / एच कैप 14pF है, अगर किसी की दिलचस्पी थी।
स्टेफंडज

2
@stef: मैंने इसे और अधिक स्पष्ट करने के लिए उत्तर संपादित किया।
ओलिन लेथ्रोप

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

23

कुछ संभावित विकल्प:

  1. प्रत्येक डिवाइस के लिए एक अद्वितीय सीरियल एड्रेस प्री-प्रोग्राम करें। यदि आपके पास एक अच्छा पर्याप्त आरएनजी एल्गोरिथ्म है, तो यहां तक ​​कि सीरियल पतों की क्रमिक सूची भी बेतहाशा अलग-अलग परिणाम देगी।

  2. आपके MCU / सेटअप के आधार पर, आपके पास सिस्टम घड़ी और वॉचडॉग टाइमर / टाइमर काउंटर इनपुट के लिए दो अलग-अलग घड़ी स्रोत उपलब्ध हो सकते हैं। यदि इनमें से एक / दोनों में महत्वपूर्ण विचरण है, तो आप इसका उपयोग अलग-अलग बीज उत्पन्न करने के लिए कर सकते हैं। यहां एक उदाहरण मैंने लिखा है जो एक Arduino के आंतरिक वॉचडॉग टाइमर और एक बाहरी XTAL सिस्टम घड़ी का उपयोग करता है

  3. BJT ट्रांजिस्टर का उपयोग करें और एक अत्यधिक बीटा निर्भर एम्पलीफायर का निर्माण करें। यह बीज के लिए एक एडीसी से पढ़ा जा सकता है।

  4. कैपेसिटर / इंडेक्टर आमतौर पर प्रतिरोधों की तुलना में बहुत खराब सहिष्णुता के लिए निर्दिष्ट होते हैं। आप इन के साथ कुछ प्रकार के फ़िल्टर सर्किट (RC, RL, LC) का निर्माण कर सकते हैं और ADC के साथ आउटपुट को माप सकते हैं।


5
मैं विकल्प 1 के लिए वोट करता हूं, यह एक शून्य भाग गणना समाधान है जिसके परिणामस्वरूप अनुक्रम कभी भी मैच नहीं होंगे। सीरियल नंबर और RND जनरेटर कह सकते हैं कि 16 बिट्स किसी भी डिवाइस को दूसरे के पैटर्न की नकल करने का एक नगण्य मौका है।
कालपीएमपी

1
मुझे भी समाधान पसंद है। यदि आप एक सरल हैशिंग एल्गोरिथ्म का उपयोग करते हैं तो आपको अनुक्रमिक सीरियल नंबर होने पर भी ठीक होना चाहिए।
मग्गू_

6
विकल्प 1 के बारे में एक अच्छी बात यह है कि कुछ डिवाइस बिल्ट-इन सीरियल नंबर (आमतौर पर नेटवर्क / आरएफ से संबंधित माइक्रो) के साथ आते हैं, इसलिए आपको सीरियल नंबर को जलाने के लिए एक अलग कदम की भी आवश्यकता नहीं है
स्लीवेटमैन

3
यहां तक कि एक तरह एक कचरा RNG LCG होगा "धारावाहिक पतों की एक अनुक्रमिक सूची के लिए बेतहाशा भिन्न परिणाम" । मैं 1 वोट भी देता हूं।
ब्लूराजा - डैनी पफ्लुगुएफ्ट

3
यदि आपके पास एक समय स्रोत है तो बीज पर अपने स्विच के लिए आधार के रूप में उपयोग करने से रनों के बीच चीजों को ऑफसेट करने में मदद मिलेगी। इसे एक सीरियल एड्रेस / नंबर या मैक एड्रेस के साथ मिलाएं यदि आपके डिवाइस में एक है और आप इंटर-डिवाइस मिलान को भी ठीक कर देंगे। मैंने कुछ सॉफ्टवेयर देखे हैं जो रिबूट के बाद भी बीज के रूप में उपयोग के लिए उत्पन्न कुछ या हर यादृच्छिक संख्या को लगातार स्टोर करते हैं। यदि आपके उपकरणों का ऑपरेटिंग समय अलग-अलग है, तो उन्हें अलग-अलग बहाव करना चाहिए।
TafT

8

अनधिकृत स्मृति

आप माइक्रो कंट्रोलर में अनइंस्टॉल की गई मेमोरी का उपयोग करने का प्रयास कर सकते हैं। चाल उन बिट्स को खोजने के लिए है जिनमें सबसे 'संतुलित' फ्लिप-फ्लॉप हैं, और वास्तव में यादृच्छिक हैं। प्रक्रिया सभी मेमोरी को पढ़ने, रीसेट करने और कुछ समय दोहराने के लिए है कि बिट्स वास्तव में यादृच्छिक हैं। तब आप अपने PRNG या LFSR को बीजने के लिए पर्याप्त यादृच्छिक बिट्स को पढ़ने के लिए इस मानचित्र का उपयोग करते हैं!

इस विधि से आपको समान हार्डवेयर के साथ यादृच्छिक बीज भी दिए जाने चाहिए, इस हैक-ए-डे लेख में अधिक विवरण (और लिंक) उपलब्ध हैं

मुझे यह तरीका पसंद है क्योंकि इसके लिए किसी अतिरिक्त सर्किटरी या पिन की आवश्यकता नहीं है; आपके एवीआर में पहले से ही राम है, आपको बस अस्थिर (यादृच्छिक) बिट्स खोजने की आवश्यकता है। इसके अलावा मानचित्रण प्रक्रिया स्वचालित हो सकती है; आप प्रत्येक डिवाइस पर एक ही कोड और प्रक्रिया लागू कर सकते हैं, और वास्तव में यादृच्छिक परिणाम प्राप्त कर सकते हैं!


1
आपको वास्तव में यह पता लगाने की आवश्यकता नहीं है कि कौन से बिट यादृच्छिक हैं। XOR-ing सभी बाइट्स आपको एक यादृच्छिक परिणाम देगा भले ही सिर्फ 8 बिट यादृच्छिक हो। और जैसा कि चित्र से पता चलता है, वास्तविक मूल्य एक अस्थायी अर्थ में यादृच्छिक नहीं हो सकते हैं, वे अद्वितीय रूप से पर्याप्त हैं - जो वास्तव में हमें यहां चाहिए।
23

1
यदि आप एक PRNG पा सकते हैं जो आपको "एन्ट्रापी" में "मिश्रण" करने की अनुमति देता है, तो यह XOR-then-seed विकल्प से भी बेहतर हो सकता है। PRNG को बाइट्स में अनइंस्टॉल किए गए मेमोरी के माध्यम से मिलाएं और मिलाएं। उदाहरण के लिए, मेरी सरल सी-लाइब्रेरी-मिक्स फ़ंक्शन देखें
क्रेग मैकक्वीन

यह आपको क्रिप्टो-गुणवत्ता यादृच्छिकता नहीं देगा।

@CamilStaps बेशक यह नहीं होगा।
नवीन

1
यह काम नहीं करेगा। यदि मेरे पास एक ऑपरेटिंग सिस्टम है तो Uninitialized मेमोरी अपरिभाषित व्यवहार है और मुझे इस बात का कोई नियंत्रण नहीं है कि मेमोरी का कौन सा हिस्सा मेरे प्रोग्राम को सौंपा जाएगा और इससे पहले क्या था। ओएस के बिना एक माइक्रोकंट्रोलर पर यह मामला नहीं है। विशेष रूप से एवीआर के साथ, क्योंकि वहां सभी रैम शून्य होगी यदि कैपेसिटर के लिए पर्याप्त समय बीत चुका है, जो कि वर्तमान खपत द्वारा ब्राउनआउट में खाली कर दिया गया है।

7

यादृच्छिक क्षमता के साथ एक एमपी 3 प्लेयर के लिए मैंने जो किया वह बस हर शक्ति पर एक अलग अनुक्रमिक बीज का उपयोग करना है। मैंने 1 से शुरू किया और इसे EEPROM में संग्रहीत किया ताकि अगले शक्ति चक्र में मैंने 2 का उपयोग किया आदि यह एक ATMEGA168 पर था। Helloworld922 के रूप में भी एक साधारण अनुक्रमिक बीज पूरी तरह से अलग छद्म यादृच्छिक अनुक्रम उत्पन्न होगा उल्लेख किया।

मैंने एक रैखिक सर्वांगसम यादृच्छिक अनुक्रम जनरेटर का उपयोग किया, यह एक समान वितरण देता है।

int i;
seed = seed * 2053 + 13849;
i = (seed % max) + 1;  // max is the maximum value I want out of the function

बेशक, यदि आप चाहते हैं कि कई इकाइयाँ अलग-अलग क्रम में हों, भले ही उनके पास समान संख्या में बिजली चक्र हों, तो आपको बेतरतीब ढंग से शुरू करने के लिए कुछ चाहिए।

यह अन्य पोस्टरों द्वारा प्रस्तावित तरीकों में से किसी के द्वारा किया जा सकता है - एक विधि मैं सोच सकता हूं कि यदि आप इसे (उदाहरण के लिए दीपक चरण नियंत्रण के लिए) प्रोसेसर में जा रहे एसी शून्य क्रॉसिंग का उपयोग कर सकते हैं? यह पावर-अप के बाद पहली क्रॉसिंग पर टाइमर का नमूना लेने के लिए इस्तेमाल किया जा सकता है और फिर बीज के रूप में इस्तेमाल किया जा सकता है।

क्या मोड आदि का चयन करने के लिए यूनिट पर कोई पुश-बटन हैं? यदि आप MCU को प्रोग्राम किए जाने के बाद बटन को पहली बार धक्का दिया जाता है तो काउंटर को सैंपल कर सकते हैं। आप शुरू में एक यादृच्छिक बीज उत्पन्न कर सकते हैं और इसे EEPROM में स्टोर कर सकते हैं। इस बिंदु के बाद प्रत्येक पावर-अप संग्रहित बीज का उपयोग करेगा।


5

यादृच्छिकता के लिए एक एडीसी एक बहुत अच्छा स्रोत है।

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

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

आपको एकल एडीसी माप पर भरोसा करने की आवश्यकता नहीं है; आप एक साधारण हैश या चेकसम फ़ंक्शन (CRC पर्याप्त) के साथ कई मापों को जोड़ सकते हैं। यदि आपको तुरंत आरएनजी का उपयोग शुरू करने की आवश्यकता है, तो आप बाद में वर्तमान आरएनजी बीज के साथ एडीसी परिणाम जोड़ सकते हैं।


2
मुझे यकीन नहीं है कि जॉनसन शोर इस एप्लिकेशन में उपयुक्त है; एसटीपी में 10kHz बैंडविड्थ पर 10Meg रोकनेवाला 40uVजॉनसन शोर है। आपको इसे मापने के लिए एक> 14 बिट एडीसी या एम्पलीफायर सर्किट की आवश्यकता होगी।
Helloworld922

एसटीपी वास्तव में प्रासंगिक नहीं है। तापमान विशेष रूप से जानबूझकर उठाया जा सकता है, लेकिन एसटीपी पर अतिरिक्त 60 डिग्री सिर्फ 10% अतिरिक्त शोर है।
23

1
एक समान दृष्टिकोण डायोड में शॉट शोर का उपयोग करना होगा। en.wikipedia.org/wiki/Noise_generator#Shot_noise_generators
teambob

2

क्या आप बीज को सत्र से सत्र तक बचा सकते हैं? यदि ऐसा है, तो क्या प्रत्येक इकाई को निर्माण के समय कुछ यादृच्छिक समय के लिए चालू करना संभव है? इस तरह सभी इकाइयों को प्रीसेट बीजों के साथ भेज दिया जाएगा जो समान होने की संभावना नहीं है।

एक और विचार: आप कई इकाइयों को एक साथ कैसे जोड़ते हैं ताकि वे एक साथ चालू हों? यदि वे श्रृंखला में हैं, तो किसी प्रकार के संधारित्र को जोड़ें ताकि n (1 + 1) वें डिवाइस nth डिवाइस के बाद कुछ घड़ी चक्र शुरू करें। आदर्श रूप से, कैपेसिटर डिवाइस शटडाउन पर बहुत तेजी से डिस्चार्ज हो जाएगा, इसलिए प्रत्येक प्रारंभ / पुनरारंभ में अनुक्रमों के बीच एक बड़ा अंतर है।

यदि वे समानांतर में हैं, तो आप अभी भी स्टार्ट-अप समय को थोड़ा कम कर सकते हैं। मुझे लगता है कि कैपेसिटर का उपयोग करके किसी प्रकार का पावर निस्पंदन है। यदि ऐसा है, तो उपकरणों को थोड़ा अलग निस्पंदन सर्किटों के साथ बनाने से प्रत्येक डिवाइस को थोड़ा अलग समय पर शुरू करने का कारण होगा, जिससे कई पुनरारंभ होने के बाद विचलन हो सकता है।

इस पर एक बदलाव यदि संभव हो तो अपनी घड़ी के संकेतों में विचरण जोड़ना है। घड़ी की गति में 0.1% का अंतर प्रकाश शो पर बहुत कम प्रभाव डाल सकता है, जबकि आपने PRNG तालिका को बहुत तेज़ी से बदल दिया है।


1
शायद पिन में एनालॉग के लिए एक बड़े पिन को कनेक्ट करें और आरएनजी को सीड करने के लिए "मेम्स हम" के कुछ रीडिंग लें।
Jasen

1
@ जेसेन, एक ही एक्सटेंशन लीड से जुड़ी सभी इकाइयां एक ही मेन ह्यूम देखेंगी।
इयान रिंगरोज ने

2

यदि आप आंतरिक "कैलिब्रेटेड" क्लॉक स्रोत पर चल रहे हैं। क्या आप EEPROM में कुछ समय के बाद एक बीज नहीं बचा सकते हैं। घड़ी में बहाव होगा, और यह इकाई से इकाई तक भिन्न होगा। कुछ समय बाद फिर से एक नया मान बचाने के लिए (हो सकता है कि प्रत्येक 10 मिनट या तो, या एक समय के बाद जो डिवाइस के लिए सामान्य ऑन-टाइम के भीतर होने के लिए पर्याप्त हो। जितनी अधिक देर तक डिवाइस चालू रहेगा, उतनी ही अधिक बचत होगी। EEPROM में एक "अलग" मूल्य।

डिवाइस पर चालू रहने के दौरान हर बार और बाद में (अक्सर नहीं) और फिर से शुरू होने पर एक छलांग लें (EEPROM में इस नए मान को सहेजें)।


2

LDR या थर्मिस्टर जोड़कर अलग-अलग रोकने वाले के आधार पर AD को परिवर्तित करने के अपने मूल विचार का विस्तार करने के बारे में क्या? (पहले बाहर "देखने" में सक्षम होने की आवश्यकता होगी, मुझे नहीं पता कि क्या यह संभव है, लेकिन प्रकाश में भिन्नता तापमान में भिन्नता की तुलना में अधिक हो सकती है क्योंकि उपकरणों के बीच एक ही समय में लगभग उसी स्थान पर शुरू हुआ। ..)


1
थर्मिस्टर्स एक अन्य उपयोगी संपत्ति के साथ आते हैं। अधिकांश निर्माताओं की कई श्रृंखलाओं में एक जबरदस्त विचरण और अशुद्धि है। यह परिणाम को "बेहतर" करेगा।
अर्सर

1

2 संभावित समाधान, यह मानकर कि आपको प्रति यूनिट एक अद्वितीय बीज की आवश्यकता है।

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

  2. डलास 1 तार उपकरण केवल एक पिन का उपयोग करते हैं और प्रत्येक एक अद्वितीय 64 बिट सीरियल नंबर के साथ आता है। आप इसे बीज के रूप में उपयोग कर सकते हैं।


1
मुझे 2 पसंद हैं, लेकिन दुर्भाग्यवश डीएस पार्ट्स सभी महंगे हैं।
Ariser

क्रिप्टो-गुणवत्ता यादृच्छिकता के लिए उत्पादन टाइमस्टैम्प का उपयोग न करें, यह अनुमानित है।

2
@CamilStaps ओपी के आवेदन के लिए, क्रिप्टो-गुणवत्ता की आवश्यकता नहीं है
हेगन वॉन एटिजन

1
@HagenvonEitzen सच है, लेकिन दूसरों को यह सवाल क्रिप्टो-क्यू यादृच्छिकता की खोज में आ सकता है, इसलिए यह ध्यान देने योग्य है।

4
@CamilStaps आह , ऐसा लगता है कि आपने मानवता पर छोड़ दिया है :) क्या यह वास्तव में किसी ऐसे व्यक्ति से उम्मीद करना चाहता है जो क्रिप्टोग्राफिक प्रयोजनों के लिए इलेक्ट्रॉनिक्स कोड से एक उत्तर का उपयोग करना चाहता है कि वे उस प्रश्न को पढ़ने के लिए पर्याप्त रूप से सावधान रहें जो इसका उत्तर देना चाहिए। ? "16 बिट" या "5 ओ 5 6 बिट" बीज क्रिप्टो-क्यू नहीं हैं, भले ही श्रोडिंगर बिल्लियों का एक गुच्छा द्वारा उत्पन्न हो :)
हेगन वॉन एटिजन

1

रैंडम नंबर जनरेटर (RNG) को कैप्चर किए गए शोर के साथ खिलाने के लिए आप फ्लोटिंग ADC पिन छोड़ सकते हैं। यह एक बीज उत्पन्न करने या RNG जनरेटर के रूप में उपयोग करने के लिए पर्याप्त होना चाहिए।

न्यूनतम संभव रूपांतरण समय का उपयोग करना न भूलें।

अन्य समाधान एक शोर जनरेटर हो सकता है जिसे एडीसी पिन में लागू किया गया है।


2
मैं कुछ माप कर दूंगा लेकिन अगर मुझे सही से याद है, तो एक अस्थायी एडीसी पिन पढ़ता है 0या उसके करीब है 0। अगर यह मामला है तो मैं इसे फिर से देखूंगा।
१६:५५ पर वर्ज़ सिप

1
मुझे दिलचस्पी है, क्या यह 0तैरते समय पढ़ा जाता है?
बेंस कौलिक्स

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