Bu soru hakkında
Elektronik mühendisliği arka planım yok ve bu I2C aracılığıyla iletişim kurmak ve bir kayıt defterine yazmakla ilgili ilk zorluklarımdan biri, bu yüzden lütfen benim tarafımdan çok fazla bilgi almayın. Bir Arduino programlıyorum.
Belirli bir elektronik bileşen / çip hakkında sorurken, insanların bana doğru bir cevap vermek için deney yapamayacağını / test edemeyeceğini varsayıyorum. Ayrıca insanların bu bileşeni bile bilmeyeceklerini düşünüyorum. Bu yüzden bu soruya çok fazla bilgi eklemeye çalışacağım.
Daha fazla bilgiye ihtiyacınız varsa lütfen bana bildirin.
Bileşenin dört ADC'si var
4-Kanal bileşeni MCP3424 ( veri sayfası ) kullanıyorum. İki pakette gelir. MCP3424 E / SL, 4 kanallı SOIC sürümünü kullanıyorum, MCP3422 veya MCP3423 2 kanallı sürümünü kullanmıyorum.
Dört ADC'si olduğuna inanıyorum. RS-Online'da, E / SL sürümünde 4 ADC ( doğrudan bağlantı ) bulunurken, E / ST'de yalnızca bir ( doğrudan bağlantı ) vardır.
Bunun birkaç kanalda aynı anda örnekleme yapabileceği anlamına geldiğini varsayıyorum. Bileşene birden fazla ADC koymak için başka bir neden göremiyorum.
Haklı mıyım?
I2C üzerinden iletişim
İletişim, bir yapılandırma baytı gönderildikten sonra bir örneklemenin bitmesini bekleyerek ve sonucu okuyarak gerçekleşir.
Yapılandırma Baytının Biçimi
İlginç olanlar:
- soldan üç bit, 1'den sayma: Sürekli örnekleme
- soldan bir ve iki bit, 1'den sayma: Adres
Yapılandırma baytı hakkında daha fazla bilgiyi burada da gösterilen veri sayfası 18 sayfasında bulabilirsiniz .
Okuma sonucunun biçimi
Örneklerim sadece 18 bit çözünürlükte (bit 5 ve 6 1 olarak ayarlanmış) olacak. Tekrar okuma sonucu dört bayt olacaktır: ilk üç değer içerir ve dördüncü yapılandırma baytını içerir.
Ancak, en soldaki bit! RDY, değerin "yeni" olup olmadığını, yani son okumadan bu yana yeni bir okuma olup olmadığını söyler. Bir sonucu ilk kez okurken, değer 0'dır ve sonraki değerler için ADC yeni bir örnek değeri ile hazır olana kadar 1'dir.
Paralel olarak örneklemeden nasıl kullanılır
Bunu nasıl yapacağımı gayet iyi biliyorum. Ve çevrimiçi bulduğum tüm örnekler, bunun için de basit. Bileşene bir yapılandırma baytı yazıp bir değeri geri okuyun.
Her kanalı otomatik olarak sürekli örnekleme ve kanal paralel olarak okuma
Sahte kod şunun gibi olabilir
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
En iyi girişimim
Umarım, aşağıdakiler her ADC'yi sürekli olarak örneklemeye ayarlar. Bu Arduino kodu.
void setup() {
Wire.write(0b00011100);
Wire.write(0b01011100);
Wire.write(0b10011110);
Wire.write(0b11011101);
}
Ardından, belirli bir kanalı nasıl okurum. Bileşenden sadece sonuç için sorarsam, kanalın sonucunu kayıt defterine döndürür. Yukarıdaki kurulumla, kanal 4 için okumayı alacağım. Ama diyelim ki kanal 2'den okumayı istiyorum. Bir şekilde söylemeliyim ki kanal 2'nin sonucunu istiyorum. bir şey örneklemesini isteyin, sadece sürekli bir örnekleme yapmaya devam etmeli ve sadece otomatik örnekleme sırasında oluşturduğu en yeniden gönderilen örneği istiyorum.
Aşağıda benim en iyi tahminim
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
}
Benim en iyi tahminim. Kanal 2'yi okumak istersem, kanal 2'yi başlatmak için kullandığımla tamamen aynı olan bir yapılandırma baytı yazarım.
Ancak, bu işe yaramaz. Gerekli 375ms'den daha fazla olsa bile, hazır örnek yoktur.
Bunu nasıl başarabilirim?
İstediğim sonucu ve ne denediğimi anlatmak için elimden geleni yapmaya çalıştım, ama okumanın kolay olmadığını biliyorum.
Bana tüm ADC'lerin paralel olarak örneklemesine ve ardından müdahale etmeden okumalarına dair tavsiye verebilir misiniz?