Tất cả về bus Arduino I2C

Bus Arduino I2C

với Arduino có thể tạo ra một số lượng lớn các dự án như bạn đã thấy nếu bạn đọc Hwlibre, lập trình vi điều khiển một cách đơn giản. Nhưng giữa các kết nối analog và kỹ thuật số của bo mạch này hardware libre, có một số điều vẫn chưa được biết đến đối với nhiều người mới bắt đầu, chẳng hạn như tiềm năng thực sự của các kết nốiPWM, SPI, chân RX và TX của cổng nối tiếp hoặc chính bus I2C. Do đó, với mục này, ít nhất bạn sẽ có thể biết mọi thứ bạn cần về I2C.

với xe buýt I2C Bạn có thể kết nối và sử dụng nhiều thiết bị của bên thứ ba có loại giao thức này để giao tiếp với bảng Arduino. Giữa chúng, bạn có thể kết nối gia tốc kế, màn hình, bộ đếm, la bàn và nhiều mạch tích hợp khác nhờ phát minh này của Philips.

I2C là gì?

I2C đề cập đến mạch liên sóngtức là mạch tích hợp liên. Nó là một bus truyền dữ liệu nối tiếp được phát triển vào năm 1982 bởi công ty Philips Semiconductors, ngày nay là NXP Semiconductors sau khi loại bỏ phần này. Lúc đầu, nó được tạo ra cho TV của thương hiệu này, để giao tiếp với một số chip bên trong một cách đơn giản. Nhưng từ năm 1990 I2C đã lan rộng và được nhiều nhà sản xuất sử dụng.

Hiện đang được sử dụng bởi hàng chục nhà sản xuất chip cho nhiều chức năng. Atmel, người tạo ra bộ vi điều khiển cho bo mạch Arduino, đã giới thiệu ký hiệu TWI (Hai giao diện có dây) cho các mục đích cấp phép, mặc dù nó giống với I2C. Nhưng đến năm 2006, bằng sáng chế ban đầu hết hạn và không còn bản quyền nên thuật ngữ I2C đã được sử dụng lại (chỉ logo tiếp tục được bảo hộ, nhưng việc thực hiện hoặc sử dụng thuật ngữ này không bị hạn chế).

Chi tiết kỹ thuật bus I2C

Xe buýt I2C

El I2C bus đã trở thành một tiêu chuẩn công nghiệp và Arduino đã triển khai nó để giao tiếp với các thiết bị ngoại vi cần nó. Nó chỉ cần hai đường dây hoặc cáp để hoạt động, một đường cho tín hiệu đồng hồ (CLK) và đường kia để gửi dữ liệu nối tiếp (SDA). Điều này là thuận lợi so với các giao tiếp khác so với bus SPI, mặc dù hoạt động của nó có phần phức tạp hơn do yêu cầu mạch bổ sung.

Trên xe buýt này mỗi thiết bị được kết nối với nó có một địa chỉ được sử dụng để truy cập các thiết bị này riêng lẻ. Địa chỉ này được cố định bởi phần cứng, sửa đổi 3 bit cuối cùng thông qua jumper hoặc switch DIP, mặc dù nó cũng có thể được thực hiện bằng phần mềm. Mỗi thiết bị sẽ có một địa chỉ duy nhất, mặc dù một số thiết bị có thể có cùng địa chỉ và có thể cần sử dụng bus phụ để tránh xung đột hoặc thay đổi nếu có thể.

Ngoài ra, xe buýt I2C có Kiến trúc kiểu Master-Slave, đó là chủ-nô. Điều này có nghĩa là khi giao tiếp được bắt đầu bởi một thiết bị chủ, nó sẽ có thể gửi hoặc nhận dữ liệu từ các nô lệ của nó. Các nô lệ sẽ không thể bắt đầu giao tiếp, chỉ có chủ nhân mới có thể làm điều đó, và các nô lệ cũng không thể nói chuyện trực tiếp với nhau nếu không có sự can thiệp của chủ nhân.

Nếu bạn có một số giáo viên trên xe buýt, chỉ một người có thể đồng thời làm giáo viên. Nhưng điều đó không đáng, vì việc thay đổi giáo viên đòi hỏi tính phức tạp cao nên không thường xuyên.

Hãy nhớ rằng chủ cung cấp tín hiệu đồng hồ để đồng bộ hóa tất cả các thiết bị trên xe buýt. Điều đó loại bỏ nhu cầu mỗi nô lệ phải có đồng hồ của riêng họ.

Giao thức bus I2C cũng dự đoán việc sử dụng các điện trở kéo lên trong các đường điện áp cung cấp (Vcc), mặc dù các điện trở này không thường được sử dụng với Arduino kéo lên vì thư viện lập trình vì Dây kích hoạt những cái bên trong có giá trị 20-30 k. Điều này có thể quá mềm đối với một số dự án, do đó các cạnh tăng của tín hiệu sẽ chậm hơn, vì vậy có thể sử dụng tốc độ thấp hơn và khoảng cách truyền thông ngắn hơn. Để khắc phục điều đó, bạn có thể cần đặt điện trở kéo lên bên ngoài từ 1k đến 4k7.

Tín hiệu

Tín hiệu I2C

La khung giao tiếp trong đó tín hiệu bus I2C bao gồm các bit hoặc trạng thái (những bit hoặc trạng thái được sử dụng trong Arduino, vì tiêu chuẩn I2C cho phép những người khác):

  • 8 bit, 7 trong số chúng địa chỉ của thiết bị phụ mà bạn muốn truy cập để gửi hoặc nhận dữ liệu từ thiết bị đó. Với 7 bit, có thể tạo tối đa 128 địa chỉ khác nhau, vì vậy về mặt lý thuyết có thể truy cập 128 thiết bị, nhưng chỉ có 112 thiết bị có thể được truy cập, vì 16 được dành cho các mục đích sử dụng đặc biệt. Và bit bổ sung cho biết nếu bạn muốn gửi hoặc nhận thông tin thiết bị nô lệ.
  • Ngoài ra còn có một bit xác nhận, nếu nó không hoạt động, giao tiếp sẽ không hợp lệ.
  • Sau đó, byte dữ liệu mà họ muốn gửi hoặc nhận bởi nô lệ. Mỗi byte, như bạn biết, được tạo thành từ 8 bit. Lưu ý rằng đối với mỗi 8 bit hoặc 1 byte dữ liệu được gửi hoặc nhận, cần thêm 18 bit xác nhận, địa chỉ, v.v., có nghĩa là bus rất hạn chế về tốc độ.
  • Một chút cuối cùng của xác nhận của giao tiếp.

Ngoài ra, tần số đồng hồ cho truyền là 100 Mhz theo tiêu chuẩn, mặc dù có một chế độ nhanh hơn ở 400 Mhz.

Ưu điểm và nhược điểm của bus I2C

các lợi thế âm thanh:

  • Đơn giản bằng cách chỉ sử dụng hai dòng.
  • Nó có cơ chế để biết nếu tín hiệu đã đến so với các giao thức truyền thông khác.

các bất lợi âm thanh:

  • Velocidad truyền tải khá thấp.
  • Nó không phải là một song công hoàn toànnghĩa là bạn không thể gửi và nhận đồng thời.
  • Không sử dụng tính chẵn lẻ cũng như bất kỳ loại cơ chế xác minh nào khác để biết liệu các bit dữ liệu nhận được có chính xác hay không.

I2C trên Arduino

Bus Arduino I2C

En Arduino, tùy thuộc vào kiểu máy, các chân có thể được kích hoạt để sử dụng bus I2C này khác nhau. Ví dụ:

  • Arduino UNO, Nano, MiniPro: A4 được sử dụng cho SDA (dữ liệu) và A5 cho SCK (đồng hồ).
  • Mega Arduino: chân 20 cho SDA và 21 cho SCK.

Hãy nhớ rằng để sử dụng nó, bạn phải sử dụng thư viện dây.h cho mã Arduino IDE của bạn, mặc dù có những mã khác như I2C y i2cdevlib. Bạn có thể đọc tài liệu của các thư viện này hoặc các bài báo của chúng tôi về các dự án mà bạn quan tâm để lấy mã về cách nó sẽ được lập trình.

Làm thế nào để biết địa chỉ của một thiết bị để sử dụng nó với I2C?

Chỉ một cảnh báo cuối cùng, đó là khi bạn mua IC từ các nhà sản xuất Châu Âu, Nhật Bản hoặc Mỹ, bạn chỉ ra hướng mà bạn nên sử dụng cho thiết bị. Mặt khác, người Trung Quốc đôi khi không chi tiết hóa nó hoặc không chính xác nên sẽ không hiệu quả. Điều đó có thể dễ dàng được giải quyết bằng máy quét địa chỉ để biết bạn nên tham khảo hướng nào trong bản phác thảo của mình.

La cộng đồng arduino đã tạo ra cái này mã để quét địa chỉ và xác định nó Theo một cách đơn giản. Mặc dù tôi chỉ cho bạn mã ngay tại đây:

#include "Wire.h"
 
extern "C" { 
    #include "utility/twi.h"
}
 
void scanI2CBus(byte from_addr, byte to_addr, void(*callback)(byte address, byte result) ) 
{
  byte rc;
  byte data = 0;
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1, 0);
    callback( addr, rc );
  }
}
 
void scanFunc( byte addr, byte result ) {
  Serial.print("addr: ");
  Serial.print(addr,DEC);
  Serial.print( (result==0) ? " Encontrado!":"       ");
  Serial.print( (addr%4) ? "\t":"\n");
}
 
 
const byte start_address = 8;
const byte end_address = 119;
 
void setup()
{
    Wire.begin();
 
    Serial.begin(9600);
    Serial.print("Escaneando bus I2C...");
    scanI2CBus( start_address, end_address, scanFunc );
    Serial.println("\nTerminado");
}
 
void loop() 
{
    delay(1000);
}


Hãy là người đầu tiên nhận xét

Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.