हम अपने कई उत्पादों में कई वर्षों से सफलतापूर्वक ATmega48 / 88/168/328 माइक्रोकंट्रोलर का उपयोग कर रहे हैं। हमने अब A और PA वेरिएंट से नए PB वेरिएंट में स्विच करने पर विचार किया है (क्योंकि हमें नए उत्पादों में अतिरिक्त पिन, टाइमर और UARTs की आवश्यकता होगी, क्योंकि यह सस्ता हो गया है, और क्योंकि ऐसा लगता है कि पुराने वेरिएंट को बंद कर दिया जाएगा,) इसलिए हमने ATmega328PB के साथ एक ATmega328A स्विच किया। ऐसा लगता है कि बिजली की रुकावट के बाद बहुत बार हाइयरवायर जाता है । पुरानी वैरिएंट के साथ ऐसी समस्याएं कभी नहीं हुईं।
हमारे उत्पादों के उपयोग के लिए नियमित बिजली व्यवधान सामान्य हैं। हम 5V पर सेट होने वाली स्विचिंग पॉवर सप्लाई (जैसे यह ) का उपयोग करते हैं , और ATmega के VCC पर 220µF रेंज में कैपेसिटर रखते हैं, SRAM को कई मिनटों की रेंज में पावर रुकावट के लिए जिंदा रखने के लिए, आंतरिक राज्यों को संग्रहीत करने के लिए जो मिशन नहीं है महत्वपूर्ण लेकिन महत्वपूर्ण रूप से पुनः आरंभ होने पर तुरंत उपलब्ध होने से उपयोगकर्ता अनुभव को बढ़ाता है (ये राज्य अक्सर EEPROM को अनुपयुक्त बनाने के लिए पर्याप्त बदलते हैं)। इसने हमेशा काम किया है।
हालाँकि, नए ATmega328PB के साथ, एक पॉवर रुकावट के बाद, MCUSR में एक रीसेट स्थिति में चिप के बिना चिप रीसेट हो जाता है, और घड़ी हाइयरवायर जाती है।
- ब्राउन-आउट डिटेक्टर फ्यूज प्रति सेट है। हमने हर उपलब्ध बॉडीवेल की कोशिश की, बग उन सभी पर होता है।
- हम बाहरी 20 मेगाहर्ट्ज का उपयोग करते हैं, प्रति फ्यूज भी सही ढंग से सेट करते हैं।
- हमने 3 अलग-अलग चिप्स आज़माए, इसलिए यह एक सोल्डरिंग या अन्य हार्डवेयर विफलता नहीं थी।
बग होने के बाद, घड़ी अक्सर 2.5x धीमी गति पर सेट होती है, यह दर्शाता है कि mcu को 8 मेगाहर्ट्ज आंतरिक थरथरानवाला द्वारा देखा जा रहा है। हालांकि, कभी-कभी मंदी 6x के आसपास होती है। इसका मतलब यह है कि यह सॉफ्टवेयर डिवाइडर हो सकता है जो घड़ी के डिवाइडर को बदल सकता है, क्योंकि मैं सॉफ्टवेयर से फ़्यूज़ सेट नहीं कर सकता, और क्लॉक डिवाइडर घड़ी को 2.5 या 6 से विभाजित नहीं कर सकता।
इसलिए, मेरा पहला संदेह नया क्लॉक फेल्योर डिटेक्शन फ्यूज था। हालांकि, कोई फर्क नहीं पड़ता कि यह चालू या बंद है, व्यवहार समान रहता है।
सॉफ़्टवेयर की विशिष्टताओं को नियंत्रित करने के लिए, मैंने स्क्रैच से एक सरल परीक्षण कार्यक्रम लिखा, जो टाइमर अवरोध से 100 हर्ट्ज के साथ आउटपुट के अलावा और कुछ नहीं करता है, और प्रत्येक पुनरारंभ के बाद एल ई डी के साथ इंगित करता है जो रीसेट स्थितियां सक्रिय हुई थीं (जैसा कि एमसीआरआर से पढ़ा गया था)। हार्डवेयर के बाकी हिस्सों को भी हटा दिया गया था, केवल mcu और नियामक हैं (और संकेतक श्रृंखला प्रतिरोधों के साथ लीड करता है)।
परिणाम
समय के 2/3, दिलचस्प कुछ भी नहीं होता है। पावर रुकावट के बाद, mcu ने अपना काम फिर से शुरू कर दिया, दोनों ब्राउन-आउट रीसेट और पावर-ऑन रीसेट संकेतक जलाए गए।
(छवि पर, लाल टॉगल किया गया पिन है, और नीला VCC है। इस छवि पर, 2.7 V ब्रोंवॉन-आउट स्पष्ट रूप से दिखाई देता है। मैंने अन्य ब्राउन-आउट सेटिंग्स के साथ एक ही परीक्षण किया, परिणाम बिल्कुल समान हैं, इसलिए मैं उन तस्वीरों को छोड़ दूंगा)
मोटे तौर पर समय के 1/3, ऊपर उल्लिखित बग होता है, और सत्ता वापस फिर से है जब, कोई भी भूरे बाहर रीसेट और रीसेट संकेतक शक्ति-ऑन की जलाया कर रहे हैं! आउटपुट अलग है, जैसे कि एमक्यू एक अजीब घड़ी के साथ टिक गया था। यह अराजक नहीं है, हालांकि, यह एक ही आवृत्ति के साथ टिक जाता है।
दिलचस्प बात यह है कि इस स्थिति में, ब्राउन-आउट डिटेक्टर पूरी तरह से निष्क्रिय प्रतीत होता है, क्योंकि अगले पावर रुकावट के बाद (जहां सही घड़ी कभी-कभी बहाल होती है, कभी-कभी नहीं), यह स्पष्ट रूप से दिखाई देता है कि आउटपुट भूरे रंग के बाद अच्छी तरह से टॉगल करता रहता है- आउट लेवल पास किया गया है। ऐसी स्थितियों में, घड़ी कभी-कभी तेज हो जाती है, दूसरी बार धीमी हो जाती है:
इन परीक्षणों के दौरान मैंने स्टार्ट-अप विलंब के लिए 16K CK / 14CK + 4.1 ms का उपयोग किया (लेकिन 65 ms देरी समस्याओं से बचती नहीं है)।
यहाँ एक चित्र ज़ूम किया गया है, जहाँ आप स्पष्ट रूप से देख सकते हैं कि VCC 2 V के तहत 5 V पर स्थिर अवस्था में पहुँचता है:
उपरोक्त तस्वीर में, एमसीयू सही ढंग से शुरू हुआ।
दिलचस्प है, जब ऐसा नहीं होता है, तो आपूर्ति वोल्टेज एक स्थिर 5 वी तक भी जल्दी हो जाता है (ऐसा लगता है कि एमसीयू के कई हिस्से बिजली नहीं देते हैं, इसलिए यह स्टार्टअप के दौरान कम वर्तमान खींचता है)
नीचे एक असफल शुरुआत से एक छवि है:
कृपया ध्यान दें, कि आपूर्ति वोल्टेज स्थिर हो जाने के बाद, सॉफ्टवेयर एमएस 85% से अधिक चलने लगता है, इसके बजाय 10.5 एमएस की आवश्यकता होती है। स्टार्टअप देरी के लिए फ़्यूज़ अभी भी समान हैं, 16K CK / 14CK + 4.1 एमएस।
यह भी ध्यान रखना दिलचस्प है, कि आपूर्ति बंद होने के बाद, वीसीसी लगभग 1.1 से 1.2 वोल्ट पर स्थिर हो जाती है (पुराना, एटीमेगा 328 ए संस्करण लगभग 0.6 - 0.7 वी तक नीचे चला गया)। यह कई मिनट के लिए रहता है। यदि मैं लंबे समय तक प्रतीक्षा करता हूं (आधे घंटे या उससे अधिक के आदेश पर), एमसीयू हमेशा सही ढंग से शुरू होता है! तो ऐसा लगता है कि समस्या यह है कि चारों ओर 1.1 वोल्ट है, जो डेटाशीट के अनुसार, पावर-ऑन रीसेट के लिए पर्याप्त होने की गारंटी नहीं है। लेकिन यह भूरा-आउट रीसेट के लिए पर्याप्त होना चाहिए!
इन स्थितियों को छोड़कर, ब्राउन-आउट डिटेक्टर ठीक काम करता है। यह पहली छवि पर दिखाई देता है (आउटपुट सिग्नल बंद हो जाता है जब बोडलवेल तक पहुंच गया है, और वोल्टेज ड्रॉप धीमा हो जाता है, क्योंकि एमसीयू के हिस्से बंद हो जाते हैं)। मैंने परीक्षण किया जब मैंने bCClevel से थोड़ा नीचे VCC को कम किया और इसे फिर से चढ़ने दिया, mcu ने हमेशा ऐसी स्थितियों के तहत सही ढंग से पुनः आरंभ किया, जिसमें केवल ब्राउन-आउट रीसेट संकेतक जलाया गया था।
क्या मुझे कुछ स्पष्ट याद आ रहा है, या क्या ATmega328PB अपने ब्राउन-आउट डिटेक्टर में एक गंभीर बग है?
संपादित करें:
दिलचस्प रूप से, उपरोक्त समस्याएं केवल तब उत्पन्न होती हैं जब मैं नियामक के सामने आपूर्ति में बाधा डालती हूं। अगर मैं इसे रेगुलेटर के बाद बाधित करता हूं (या लैब पावर सप्लाई का उपयोग करता हूं), तो समस्याएं कभी नहीं होती हैं। जैसे कि बढ़ते वोल्टेज के आकार ने समस्याओं का कारण बना। हालांकि, जैसा कि आप पिछली छवि से देख सकते हैं, वोल्टेज वृद्धि काफी अच्छी है और यह जल्दी से स्थिर हो जाती है।
EDIT 2
मैंने इसे 20 मेगाहर्ट्ज के बजाय 16 मेगाहर्ट्ज के साथ आजमाया, लेकिन ठीक यही समस्या है।