MCP3424, समानांतर में चैनल कैसे पढ़ें?


9

इस सवाल के बारे में

मेरे पास एक इलेक्ट्रॉनिक्स इंजीनियरिंग पृष्ठभूमि नहीं है, और यह I2C के माध्यम से संवाद करने और एक रजिस्टर में लिखने के साथ मेरी पहली चुनौतियों में से एक है, इसलिए कृपया मेरी तरफ से बहुत अधिक ज्ञान ग्रहण न करें। मैं एक Arduino प्रोग्रामिंग कर रहा हूं।

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

यदि आपको अधिक जानकारी की जरूरत है तो कृपया मुझे बता है।

घटक में चार एडीसी हैं

मैं 4-चैनल घटक, MCP3424 ( डेटाशीट ) का उपयोग कर रहा हूं । यह दो पैकेज में आता है। मैं MCP3424 E / SL, 4 चैनल SOIC संस्करण का उपयोग कर रहा हूं, MCP3422 या MCP3423 2 चैनल संस्करण का नहीं।

मेरा मानना ​​है कि इसमें चार एडीसी हैं। RS-Online पर, ऐसा लगता है कि E / SL संस्करण में 4 ADCs ( डायरेक्ट लिंक ) हैं, जबकि E / ST में केवल एक ( डायरेक्ट लिंक ) है। यहां छवि विवरण दर्ज करें

मेरा मानना ​​है कि इसका मतलब यह होना चाहिए कि यह एक साथ कई चैनलों पर सैंपलिंग कर सकता है। मुझे घटक पर एक से अधिक एडीसी डालने का कोई अन्य कारण नहीं दिखता है।

क्या मैं सही हू?

I2C के माध्यम से संचार

संचार एक कॉन्फ़िगर बाइट भेजकर होता है, फिर एक नमूना समाप्त होने की प्रतीक्षा करता है, और परिणाम पढ़ता है।

कॉन्फ़िगर बाइट का प्रारूप

यहां छवि विवरण दर्ज करें

दिलचस्प हैं:

  • बाईं ओर से तीन, 1 से गिनती: निरंतर नमूना
  • 1 से एक बिट और दो, 1 से पता: पता

कॉन्फ़िगर बाइट के बारे में और अधिक जानकारी यहां दी गई डेटाशीट पृष्ठ 18 पर देखी जा सकती है

पढ़ने के परिणाम का प्रारूप

मेरे उदाहरण केवल 18 बिट रिज़ॉल्यूशन (बिट 5 और 6 सेट से 1) के साथ होंगे। रीड बैक रिजल्ट चार बाइट्स होंगे: पहला तीन जिसमें वैल्यू होगी, और चौथे में कॉन्फिग बाइट होगा।

हालांकि, सबसे बाईं ओर; RDY, बताता है कि मान "नया" है, यानी यदि यह एक नया रीडिंग है, तो आखिरी रीडिंग के बाद से। पहली बार एक परिणाम को पढ़ने पर, मान 0 होता है, और बाद वाले लोगों के लिए यह 1 है, जब तक कि एडीसी एक नए नमूना मूल्य के साथ तैयार नहीं होता है।

समानांतर में नमूने के बिना इसका उपयोग कैसे करें

मुझे पूरी तरह से पता है कि यह कैसे करना है। और सभी उदाहरण मुझे ऑनलाइन मिले हैं, यह भी सरल डु इस। बस घटक को एक कॉन्फ़िगर बाइट लिखें, फिर एक मूल्य वापस पढ़ें।

प्रत्येक चैनल को स्वचालित रूप से नमूना करने के लिए कैसे सेट करें, और समानांतर में चैनल पढ़ें

छद्म कोड की तरह smth किया जा सकता है

setup():
    start sampling channel 1, 18bit, 0gain, continuously
    start sampling channel 2, 18bit, 0gain, continuously
    start sampling channel 3, 18bit, 4gain, continuously
    start sampling channel 1, 18bit, 2gain, continuously

readADCs():
    // Run every 500ms
    // 18 bit samples take 375ms, so must happen in parallel 
    // to get a new sample for all every 500ms
    read channel 1
    read channel 2
    read channel 3
    read channel 4

मेरी पूरी कोशिश

इसलिए मुझे आशा है, कि निम्नलिखित प्रत्येक एडीसी को लगातार नमूना देने के लिए सेट करता है। यह Arduino कोड है।

void setup() {

    Wire.write(0b00011100);
    Wire.write(0b01011100);
    Wire.write(0b10011110);
    Wire.write(0b11011101);
}

फिर, मैं एक विशिष्ट चैनल कैसे पढ़ूं। यदि मैं सिर्फ परिणाम के लिए घटक पूछता हूं, तो यह रजिस्टर पर चैनल का परिणाम लौटाएगा। ऊपर के सेटअप के साथ, मुझे चैनल 4 के लिए रीडिंग मिलेगी। लेकिन मान लीजिए कि मैं चैनल 2 से रीडिंग चाहता हूं। किसी तरह से मुझे यह बताने की जरूरत है, कि मुझे चैनल 2 का परिणाम चाहिए। मुझे नहीं करना है। इसे किसी भी चीज का नमूना लेने के लिए कहें, यह सिर्फ एक निरंतर नमूना करना चाहिए, और मैं बस सबसे अधिक नाराज नमूना चाहता हूं जो इसे स्वचालित रूप से नमूना बनाते समय बनाया गया था।

नीचे मेरा सबसे अच्छा अनुमान है

void readADCs() {

    // Channel 1
    // ...

    // Channel 2
    Wire.beginTransmission(104);
    Wire.write(0b01011100); // I hope not to affect, just to select
    Wire.endTransmission();
    Wire.requestFrom(104);
    Wire.read(); // val byte 1
    Wire.read(); // val byte 2
    Wire.read(); // val byte 3
    Wire.read(); // config byte
}

तो मेरा सबसे अच्छा अनुमान है। अगर मैं चैनल 2 पढ़ना चाहता हूं, तो मैं एक कॉन्फ़िगर बाइट लिखता हूं, जो बिल्कुल वैसा ही है, जैसा कि मैंने चैनल 2 को शुरू करने के लिए इस्तेमाल किया था।

हालांकि, यह काम नहीं करता है। कोई नमूना तैयार नहीं है, भले ही यह आवश्यक 375ms से अधिक हो।

मुझे यह कैसे हासिल होगा?

मैंने वांछित परिणाम का वर्णन करने के साथ अपना सर्वश्रेष्ठ करने की कोशिश की है और जो मैंने कोशिश की है, लेकिन मुझे पता है कि इसे पढ़ना आसान नहीं है।

क्या आप मुझे सलाह दे सकते हैं कि कैसे सभी एडीसी को समानांतर में नमूना दें, और फिर उनसे हस्तक्षेप किए बिना पढ़ें?


अच्छी शुरुआत। केवल एक चीज गायब है जो MCP3424 के लिए डेटशीट का लिंक है, जिसे मैंने जोड़ा है।
JRE

MCP3424 दो पैकेज में आता है, न कि संस्करण, और दोनों 4 चैनल हैं। ST TSSOP है, SL Soic है। इसमें MCP3422 2 चैनल, निश्चित पता, MCP3423, 2 चैनल, समायोज्य पता और MCP3424 4 चैनल है।
राहगीर

+1 बहुत गहन, अच्छी तरह से लिखित प्रश्न। अफसोस की बात है कि चिप एक एकल एडीसी है। इसका वर्णन "कार्यात्मक ब्लॉक आरेख" में इसकी डेटशीट में किया गया है। आपने ADCs के रूप में इनपुट चैनल पढ़े हैं। कई इनपुट चैनल होने से एक एडीसी का उपयोग कई अलग-अलग संकेतों (क्रमिक रूप से) के नमूने के लिए किया जा सकता है। एडीसी एक एनालॉग मल्टीप्लेक्सर (जो चैनल का चयन करता है) की तुलना में बहुत अधिक महंगा है, और कई संकेतों का नमूना लेना एक सामान्य आवश्यकता है। इसलिए एडीसी चिप्स अक्सर इस तरह से काम करते हैं। एंडी उर्फ ​​ने आपके सवाल का जवाब दिया है, लेकिन शायद स्वीकार करने से पहले प्रतीक्षा करें, क्योंकि आपको अधिक जानकारी मिल सकती है।
गूलर

मेरा मानना ​​था कि इसमें 4 ADCs थे, क्योंकि RS-Online ने कहा कि E / SL में 4 था, और E / ST था 1. मैंने विवरण में जोड़ा है
Mads Skjern

2
@MadsSkjern ने आरएस, माइक्रोचिप की अनदेखी की और उनकी डेटा शीट राजा है। यह RS पर एक गलती है। वितरक साइटों पर गलतियाँ बहुत आम हैं।
राहगीर

जवाबों:


11

मेरे पास चार एडीसी हैं। मेरा मानना ​​है कि इसका मतलब यह होना चाहिए कि यह एक साथ कई चैनलों पर सैंपलिंग कर सकता है।

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

यहां छवि विवरण दर्ज करें

नोट इनपुट मल्टीप्लेक्सर किसी भी एक समय में चार में से केवल एक चैनल का चयन करता है। यह कई चैनलों को पढ़ने के लिए उपयोग की जाने वाली एक सामान्य विधि है, लेकिन एक साथ नमूना लेने वाले एडीसी हैं। रैखिक तकनीक, टीआई या एडीआई के विभागों को देखने का प्रयास करें।


+1, फिर मुझे हरा दें :-) यह इस तथ्य को वर्तनी देने के लायक हो सकता है कि यह एक एडीसी नमूना कई चैनलों के लिए काफी सामान्य है, क्योंकि यह विभिन्न एनालॉग संकेतों का नमूना ले सकता है, जो एक सामान्य मामला है।
gulmer

इसके अलावा, यदि कम नमूना दरों के लिए बुलाया जाता है, तो बहुसंकेतन / इंटरलेविंग अक्सर पर्याप्त होता है
स्कॉट सेडमन

सुधार सुधार, श्रीमान।
गूलर

@ गुलबमेर तुम भी दयालु हो सर !!
एंडी उर्फ

5

MCP3424 सामने के छोर पर एक बहुसंकेतक के साथ एक एकल एडीसी है।

डेटाशीट से यह आरेख यह काफी स्पष्ट रूप से दिखाता है

MCP3424 आर्किटेक्चर

डेटाशीट इस प्रस्ताव के साथ वापस आती है:

4.1 सामान्य अवलोकन

MCP3422 / 3/4 डिवाइस विभेदक मल्टीचैनल कम-शक्ति, 18-बिट डेल्टा-सिग्मा ए / डी कन्वर्टर्स एक I2C सीरियल इंटरफ़ेस के साथ हैं। उपकरणों में एक इनपुट चैनल चयन मल्टीप्लेक्स (mux), एक प्रोग्राम योग्य एम्पलीफायर (PGA), एक ऑन-बोर्ड वोल्टेज संदर्भ (2.048V) और एक आंतरिक थरथरानवाला होता है।

इसलिए, आप विभिन्न चैनलों को सही मायने में एक साथ परिवर्तित नहीं कर सकते हैं, लेकिन आप चैनलों को क्रमिक रूप से उनके बीच अपेक्षाकृत कम देरी के साथ नमूना बना सकते हैं।

डिवाइस का उपयोग करते समय, आपको यह सुनिश्चित करने की आवश्यकता है कि I2C पता बिट्स स्थिर हैं; एक बार फिर, डेटाशीट से:

MCP3423 और MCP3424 में दो बाहरी उपकरण पता पिन (Adr1, Adr0) हैं। इन पिनों को एक तर्क उच्च (या VDD से बंधा हुआ), निम्न (या VSS से बंधा हुआ) पर सेट किया जा सकता है, या फ्लोटिंग छोड़ दिया जा सकता है (किसी भी चीज़ से जुड़ा नहीं है, या VDD / 2 से बंधा हुआ है), दो पिन का उपयोग करके तर्क स्तर के ये संयोजन आठ संभावित पते की अनुमति दें। तालिका 5-3 पता चयन पिन की तर्क स्थिति के आधार पर डिवाइस पता दिखाता है। डिवाइस निम्न घटनाओं में Adr0 और Adr1 पिन की तर्क स्थिति का नमूना लेता है:

ए। डिवाइस पावर-अप।

ख। सामान्य कॉल रीसेट

(धारा 5.4 "सामान्य कॉल" देखें)।

सी। सामान्य कॉल लैच

(धारा 5.4 "सामान्य कॉल" देखें)।

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

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

मेरा सुझाव है कि आप इस सिफारिश का पालन करें ताकि यह सुनिश्चित हो सके कि आप वास्तव में डिवाइस के साथ संवाद कर रहे हैं।

किसी विशेष चैनल को पढ़ने के लिए, आपको कॉन्फ़िगरेशन रजिस्टर में चैनल का चयन करना होगा और रूपांतरण शुरू करना होगा। जब उत्पादन रूपांतरण रजिस्टर में उपलब्ध है, तो RDY बिट कम हो जाएगी।

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