यह एक सॉफ्टवेयर समस्या है, आप बहुत अधिक समय बिता रहे हैं सर्विसिंग में व्यवधान और आपकी I2C दिनचर्या इसे संभाल नहीं पा रही है (इसलिए यह दो चीजें हैं जो सही नहीं हैं)। मैं ऐसी ही कई स्थितियों से गुजर चुका हूं।
पहला: आपको इंटरप्ट्स में जितना संभव हो उतना कम करने की ज़रूरत है, केवल डेटा को पढ़ें और संग्रहीत करें, कोई भी प्रसंस्करण न करें जो आप ISR के बाहर कर सकते हैं, गणित सीपीयू चक्रों का एक बहुत ले सकते हैं और सीपीयू कुछ और नहीं कर सकता है जबकि उस रुकावट में।
दूसरा: चीजों को स्वचालित करने के लिए डीएमए की जांच करें, इसलिए आपकी रुकावट लगभग एक पृष्ठभूमि स्वचालित प्रक्रिया बन जाती है।
तीसरा: यदि I2C महत्वपूर्ण है, तो THAT को एक बाधा में भी डालें, लेकिन सुनिश्चित करें कि आप प्राथमिकताओं को पूरा करते हैं!
चौथा: अपनी I2C दिनचर्या क्यों विफल हो रही है, I2C खुद बहुत रुक-रुक कर समय, ठहराव और इंतजार आदि के लिए खड़ा हो सकता है, इसलिए आपकी दिनचर्या को इसे अनुमति देने के लिए संशोधन की आवश्यकता हो सकती है।
पांचवां: देखें कि क्या आप "चेन" को बाधित कर सकते हैं, तो आप पा सकते हैं कि आप ADC को और अधिक कुशलता से पढ़ सकते हैं, या ADC को एक अलग मोड में रख सकते हैं, जहाँ यह आपके लिए अधिक काम करता है, बीच में आने से पहले (ईजी के सभी रीडिंग उपलब्ध होने की प्रतीक्षा करें) तब सभी एक हिट में पढ़ें, 8 अलग-अलग एडीसी चैनल के लिए 8 अलग-अलग व्यवधानों के बजाय पढ़ता है)।
छठा: एक आस्टसीलस्कप या लॉजिक एनालाइज़र का उपयोग करें, और बोर्ड पर मौजूद IO पिन को यह पता लगाने के लिए कि प्रत्येक बिट कोड में आप कितना समय बिता रहे हैं, यह देखने के लिए कि क्या आप इसे गति दे सकते हैं। (जब आप किसी फ़ंक्शन / ISR में प्रवेश करते हैं, तो पिन को हाई सेट करें, इसे बाहर निकलने पर फिर से कम सेट करें)।
सातवाँ: यह तय करें कि क्या आपको वास्तव में एडीसी को पढ़ने की ज़रूरत है, क्या धीमी गति से काम करना बदतर हो जाएगा? यह काउंटर-सहज है, लेकिन कभी-कभी धीमी गति से चलने वाला वास्तव में अच्छे परिणाम देता है, जो आपके लिए सिग्नल के औसत का काम करता है और स्पाइक्स / ट्रांजिस्टर पर कटौती करता है जो समस्याओं का कारण बन सकता है या हटाने के लिए अतिरिक्त प्रसंस्करण की आवश्यकता हो सकती है। हमने प्रक्रिया में सीपीयू समय का एक भार मुक्त करते हुए, इसे केवल 1/4 गति से चलाकर एक मोटर नियंत्रण पीआईडी दिनचर्या में सुधार किया।