Về câu hỏi này
Tôi không có nền tảng kỹ thuật điện tử và đây là một trong những thách thức đầu tiên của tôi khi giao tiếp qua I2C, và bằng cách viết vào sổ đăng ký, vì vậy xin đừng thừa nhận quá nhiều kiến thức từ phía tôi. Tôi đang lập trình một Arduino.
Khi hỏi về một thành phần / chip điện tử cụ thể, tôi cho rằng mọi người không thể thử nghiệm / kiểm tra để cho tôi một câu trả lời chính xác. Tôi cũng mong rằng mọi người thậm chí sẽ không biết thành phần này. Vì vậy tôi sẽ cố gắng thêm nhiều thông tin trong câu hỏi này.
Xin hãy để tôi biết nếu bạn cần nhiều thông tin hơn.
Thành phần này có bốn ADC
Tôi đang sử dụng thành phần 4 kênh, MCP3424 (biểu dữ liệu ). Nó có hai gói. Tôi đang sử dụng MCP3424 E / SL, phiên bản SOIC 4 kênh, không phải phiên bản 2 kênh MCP3422 hoặc MCP3423.
Tôi tin rằng nó có bốn ADC. Trên RS-Online, có vẻ như phiên bản E / SL có 4 ADC ( liên kết trực tiếp ), trong khi E / ST chỉ có một ( liên kết trực tiếp ).
Tôi cho rằng điều này phải có nghĩa là nó có thể lấy mẫu trên một số kênh cùng một lúc. Tôi không thấy bất kỳ lý do nào khác để đặt nhiều hơn một ADC vào thành phần.
Tôi có đúng không
Giao tiếp qua I2C
Giao tiếp xảy ra bằng cách gửi một byte cấu hình, sau đó chờ lấy mẫu kết thúc và đọc kết quả.
Định dạng của Cấu hình byte
Những điều thú vị là:
- bit ba từ trái, đếm từ 1: Lấy mẫu liên tục
- bit một và hai từ trái, đếm từ 1: Địa chỉ
Thông tin thêm về byte cấu hình có thể được tìm thấy trên trang dữ liệu 18, cũng được mô tả ở đây .
Định dạng kết quả đọc
Các ví dụ của tôi sẽ chỉ có độ phân giải 18 bit (bit 5 và 6 được đặt thành 1). Kết quả đọc lại sẽ là bốn byte: ba byte đầu tiên chứa giá trị và thứ tư chứa byte cấu hình.
Tuy nhiên, bit ngoài cùng bên trái ,! RDY, cho biết nếu giá trị là "mới", tức là nếu đó là lần đọc mới, kể từ lần đọc cuối cùng. Lần đầu tiên đọc một kết quả, giá trị là 0 và đối với các kết quả tiếp theo là 1, cho đến khi ADC sẵn sàng với một giá trị mẫu mới.
Cách sử dụng mà không cần lấy mẫu song song
Tôi biết rất rõ làm thế nào để làm điều này. Và tất cả các ví dụ tôi đã tìm thấy trực tuyến, cũng đơn giản du này. Chỉ cần viết một byte cấu hình cho thành phần, sau đó đọc lại một giá trị.
Cách đặt từng kênh để lấy mẫu tự động và đọc song song các kênh
Mã giả có thể là smth như
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
Nỗ lực tốt nhất của tôi
Vì vậy, tôi hy vọng rằng các điều sau đây sẽ đặt từng ADC để lấy mẫu liên tục. Đây là mã Arduino.
void setup() {
Wire.write(0b00011100);
Wire.write(0b01011100);
Wire.write(0b10011110);
Wire.write(0b11011101);
}
Sau đó, làm thế nào để tôi đọc một kênh cụ thể. Nếu tôi chỉ hỏi thành phần cho kết quả, nó sẽ trả về kết quả của kênh trên thanh ghi. Với thiết lập ở trên, tôi sẽ có được cách đọc cho kênh 4. Nhưng hãy nói rằng tôi muốn đọc từ kênh 2. Theo một cách nào đó tôi chỉ cần nói với nó, rằng tôi muốn kết quả của kênh 2. Tôi không muốn yêu cầu nó lấy mẫu bất cứ thứ gì, nó chỉ nên tiếp tục lấy mẫu liên tục và tôi chỉ muốn mẫu bực bội nhất mà nó tạo ra trong khi tự động lấy mẫu.
Dưới đây là dự đoán tốt nhất của tôi
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
}
Vì vậy, dự đoán tốt nhất của tôi là. Nếu tôi muốn đọc kênh 2, tôi viết một byte cấu hình hoàn toàn giống với kênh tôi đã sử dụng để bắt đầu lấy mẫu kênh 2.
Tuy nhiên, điều này không hoạt động. Không có mẫu nào sẵn sàng, ngay cả khi nó đã có nhiều hơn 375ms cần thiết.
Làm thế nào để tôi đạt được điều này?
Tôi đã cố gắng làm hết sức mình với việc mô tả kết quả mong muốn và những gì tôi đã cố gắng, nhưng tôi biết nó không dễ đọc.
Bạn có thể cho tôi lời khuyên về cách để cho tất cả các mẫu ADC song song, sau đó đọc từ chúng mà không can thiệp không?