इस सवाल के बारे में
मेरे पास एक इलेक्ट्रॉनिक्स इंजीनियरिंग पृष्ठभूमि नहीं है, और यह 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 से अधिक हो।
मुझे यह कैसे हासिल होगा?
मैंने वांछित परिणाम का वर्णन करने के साथ अपना सर्वश्रेष्ठ करने की कोशिश की है और जो मैंने कोशिश की है, लेकिन मुझे पता है कि इसे पढ़ना आसान नहीं है।
क्या आप मुझे सलाह दे सकते हैं कि कैसे सभी एडीसी को समानांतर में नमूना दें, और फिर उनसे हस्तक्षेप किए बिना पढ़ें?