I2C Là Gì

I. I2C LÀ GÌ?

Tất nhiên là sẽ bao gồm bài viết ra mắt về I2C bên trên tamquoccola.com Tuy nhiên nội dung bài viết này mình xin nói tới một phía khác. Các chúng ta quan tâm hoàn toàn có thể xem lại hồ hết bài viết về I2C của những người sáng tác không giống nhé!

Đầu năm 1980 Phillips sẽ cải tiến và phát triển một chuẩn giao tiếp tiếp nối 2 dây được Call là I2C. I2C là tên gọi viết tắt của các tự Inter-Intergrated Circuit. Đây là mặt đường Bus tiếp xúc thân những IC với nhau. I2C tuy vậy được trở nên tân tiến bươi Philips, tuy vậy nó đã làm được không hề ít công ty phân phối IC bên trên thế giới sử dụng. I2C thay đổi một chuẩn chỉnh công nghiệp cho các tiếp xúc tinh chỉnh, hoàn toàn có thể kể ra đây một vài ba tiếng tăm quanh đó Philips như: Texas Intrument(TI), MaximDallas, analog Device, National Semiconductor ... Bus I2C được áp dụng có tác dụng bus tiếp xúc nước ngoài vi mang đến không hề ít nhiều loại IC không giống nhau nlỗi các một số loại Vi tinh chỉnh và điều khiển 8051, PIC, AVR, ARM... chip nhớ như: RAM tĩnh (Static Ram), EEPROM, bộ chuyển đổi tựa như số (ADC), số tương tự(DAC), IC điểu khiển LCD, LED...

Bạn đang xem: I2c là gì

Cấu tạo ra với nguyên lý hoạt động

I2C thực hiện hai tuyến đường truyền tín hiệu:

Một mặt đường xung nhịp đồng hồ(SCL) chỉ vì chưng Master phạt đi ( thông thường làm việc 100kHz với 400kHz. Mức cao nhất là 1Mhz với 3.4MHz).Một mặt đường dữ liệu(SDA) theo 2 hướng.

Có rất nhiều thiết bị rất có thể cùng được kết nối vào một trong những bus I2C, mặc dù sẽ không xảy ra cthị xã lầm lẫn giữa những thiết bị, vì từng trang bị sẽ được phân biệt bởỉ một liên hệ tuyệt nhất với 1 quan hệ tình dục chủ/tớ vĩnh cửu nhìn trong suốt thời gian liên kết. Mỗi trang bị rất có thể hoạt động như là lắp thêm nhận hoặc truyền tài liệu xuất xắc có thể vừa truyền vừa dấn. Hoạt hễ truyền tuyệt dìm còn tùy ở trong vào việc thứ đó là chủ (master) hãy tớ (slave).

Một sản phẩm hay là một IC Khi kết nối cùng với bus I2C, ngoại trừ một ảnh hưởng (duy nhất) để phân minh, nó còn được thông số kỹ thuật là sản phẩm công ty tuyệt tớ.Tại sao lại sở hữu sự phân minh này ? Đó là vì bên trên một bus I2C thì quyền điều khiển và tinh chỉnh nằm trong về lắp thêm công ty. Thiết bị công ty vắt mục đích tạo nên xung đồng hồ thời trang mang đến toàn hệ thống, khi giữa nhị thứ chủ-tớ tiếp xúc thì đồ vật nhà tất cả nhiệm vụ chế tác xung đồng hồ với làm chủ thúc đẩy của vật dụng tớ trong suốt quy trình giao tiếp. Thiết bị chủ giữ lại sứ mệnh dữ thế chủ động, còn đồ vật tớ duy trì mục đích tiêu cực trong vấn đề giao tiếp.

Về định hướng lẫn thực tế I²C sử dụng 7 bit nhằm định liên can, cho nên vì vậy trên một bus có thể bao gồm tới 2^7 liên hệ tương ứng với 128 đồ vật hoàn toàn có thể kết nối, cơ mà chỉ gồm 112 , 16 địa chỉ từ lại được sử dụng vào mục đích riêng. Bit còn lại điều khoản vấn đề hiểu xuất xắc ghi dữ liệu (1 là write, 0 là read)

Điểm mạnh của I²C đó là năng suất với sự dễ dàng và đơn giản của nó: một kăn năn điều khiển trung tâm hoàn toàn có thể tinh chỉnh cả một mạng máy mà chỉ việc hai lối ra tinh chỉnh và điều khiển.

Xem thêm: Photodex Proshow Producer 5 Menjadi Full Version, Photodex Proshow Producer 5

Trong khi I2C còn tồn tại chính sách 10bit liên hệ tương đương cùng với 1024 địa chỉ, tựa như nhỏng 7 bit, chỉ tất cả 1008 lắp thêm hoàn toàn có thể kết nối, còn lại 16 địa chỉ sẽ dùng để làm sử dụng mục tiêu riêng biệt (Mình không rõ lắm)

Vậy, có tác dụng nuốm như thế nào để nó hoàn toàn có thể tiếp xúc với khá nhiều thiết bị?

II. LÀM THẾ NÀO?

Vâng, nlỗi mình đã nói ở trên, Mỗi máy có 1 can hệ được cài sẵn hoặc 1 liên hệ trang bị độc nhất nhằm sản phẩm chủ (Master) hoàn toàn có thể giao tiếp. 2 chân SDA VÀ SCL là 2 chân của giao tiếp I2C, trong những số đó chân SCL là chân Clock, có công dụng đồng nhất hóa bài toán truyền dữ liệu giữa những thứ, với bài toán tạo ra xung clochồng kia là do đồ vật công ty (Master). Chân còn lại là chân SDA là chân truyền dữ liệu (DATA). 2 chân này luôn vận động sinh hoạt chính sách msinh sống, vì chưng vậy nhằm áp dụng được rất cần được gồm trnghỉ ngơi kéo. Có nghĩa là nối +5v => trlàm việc => I2C vị những thiết bị trên bus i2c hoạt động ở tại mức rẻ. Giá trị thường được thực hiện cho các điện trngơi nghỉ là từ bỏ 2K đến vận tốc vào khoảng 400 kbps, và 10K mang đến vận tốc phải chăng rộng khoảng chừng 100 kbps.

Hãy tưởng tượng chúng ta là nhân viên phạt bưu phẩm, mang lại 1 thành phố bên trên tay tất cả bưu phẩm buộc phải đưa phạt. Tính năng của bạn có thể phân phát cùng nhấn bưu phẩm nhằm chuyển đi cho tất cả thành phố, tuy nhiên, yếu tố quan trọng là bạn cần phải bao gồm thúc đẩy. mỗi 1 máy đang có 1 hệ trọng riêng rẽ để sản phẩm nhà có thể truy cập để mang dữ liệu 

Hải Đăng PPK

lấy một ví dụ cảm ứng vận tốc ADXL345

Có 1 liên tưởng độc nhất mang lại riêng biệt module và mặt khác thêm bên phía trong có 3 thúc đẩy cá biệt cho những trục X,Y,Z. Nếu chúng ta yêu cầu gọi các dữ liệu từ bỏ trục X, thứ 1 bọn họ bắt buộc mang lại cửa hàng bao gồm của Module, tiếp nối mới mang đến tương tác của trục X. Việc kiếm tìm tên các ảnh hưởng này các bạn nên tìm kiếm trong datasheet của linh phụ kiện. Đây là datasheet của cảm ứng tốc độ ADXL345 Mlàm việc ra đọc trên mục Register bản đồ các chúng ta có thể thấy hệ trọng của trục X là 0x32 và 0x33

0x32 DATAX0 X-Axis Data 0

0x33 DATAX1 X-Axis Data 1

Trong ví dụ dưới đây mình vẫn đưa ra 1 ngôi trường phù hợp về câu hỏi kết nối tamquoccola.com với 2 cảm ứng (Cảm đổi thay vận tốc 10 bậc tự do thoải mái GY - 80 cùng Cảm phát triển thành vận tốc 6 bậc tự do GY521), cả 2 cảm biến đa số áp dụng giao tiếp I2C

Cảm phát triển thành vận tốc GY-521 

Cảm biến chuyển vận tốc GY-80

Dưới đây là biện pháp liên kết 2 module cùng với tamquoccola.com, những chúng ta cũng có thể thấy khá xích míc so với ban đầu bản thân nói, vì sao không tồn tại điện trlàm việc như thế nào kéo sinh hoạt đây? Thực tế thì bên phía trong module đang tất cả năng lượng điện trsinh sống kéo, vì thế bọn họ không buộc phải kéo gì nữa cả 

*

Bây tiếng nhằm tiếp xúc với bọn chúng, ta nên biết được tác động của chính nó là gì, so với từng 1 cảm ứng trên 1 module kia đang có 1 can hệ riêng biệt. Các bạn cần phải tìm bọn chúng vào datasheet của từng nhiều loại. Ở phía trên mình đưa ra các thúc đẩy của những cảm biến nhằm các bạn luôn tiện theo dõi

Đối với GY-521, chỉ gồm một liên quan với chính là 0x68. Các bạn cũng có thể chất vấn và khẳng định được can hệ của bọn chúng bằng cách thực hiện bạn dạng sketch mẫu mã I2C Scanner . Nạp code đó vào và nó đã từ mang đến các bạn biết những cửa hàng có trên thứ. 

Sau Khi đã tìm kiếm thấy can dự của các máy, họ cũng cần phải tìm thấy shop của các tkhô cứng ghi bên phía trong của chúng nhằm phát âm tài liệu. lấy một ví dụ, nếu như chúng ta muốn gọi tài liệu mang đến trục X từ bỏ những cảm ứng 3 trục tốc độ của GY-80, bọn họ rất cần được search hệ trọng địa điểm dữ liệu của trục X được tàng trữ. Bằng giải pháp đọc datasheet của các cảm ứng của GY-80 với sống đấy là datasheet của cảm ứng 3 trục tốc độ ADXL345 mà lại tôi đã nêu ở trong phần đầu bài viết, bạn có thể thấy rằng dữ liệu mang lại trục X được lưu trữ vào nhị tkhô cứng ghi, DATAX0 với cùng một liên tưởng 0x32 với DATAX1 với 1 shop 0x33.

Bây giờ đồng hồ chúng ta chỉ câu hỏi code với hãy nghiên cứu và phân tích xem code sẽ làm cho số đông gì?

#include int ADXLAddress = 0x53; // Địa chỉ của cảm biến vận tốc trong module GY80#define X_Axis_Register_DATAX0 0x32 // shop của data0 trục X trong cảm biến vận tốc ADXL345 vào module GY-80#define X_Axis_Register_DATAX1 0x33 //shop của data1 trục X vào cảm ứng gia tốc ADXL345 trong module GY-80#define Power_Register 0x2 chiều // tkhô hanh ghi điều khiển tích điện cung cấpint X0,X1,X_out;void setup() Wire.begin(); // Khởi tạo thỏng viện WIRE Serial.begin(9600); delay(100); // kích hoạt tuấn kiệt đo lường Wire.beginTransmission(ADXLAddress);//bắt đầu vấn đề truyền cài tận hưởng tới các cảm ứng Wire.write(Power_Register); // Cho phxay đo Wire.write(8); Wire.endTransmission();void loop() { Wire.beginTransmission(ADXLAddress); // Bắt đầu truyền mang lại cảm biếnr //Thu thập tài liệu từ bỏ các tkhô giòn ghi Wire.write(X_Axis_Register_DATAX0); Wire.write(X_Axis_Register_DATAX1); Wire.endTransmission(); // Kết thúc việc truyền tài liệu trường đoản cú 2 tkhô giòn ghi Wire.requestFrom(ADXLAddress,2); // Yêu cầu truyền 2 byte từ bỏ 2 tkhô nóng ghi if(Wire.available() 

Việc lấy dữ liệu từ những cảm ứng bên trên module không giống cũng giống như. Bởi vậy chúng ta đã biết phương pháp áp dụng giao tiếp I2C. Và cụ thể 2 module này còn có vẻ ko được đa số chúng ta quyên tâm sử dụng lắm do giá thành cũng giống như là về vấn đề các bạn đề xuất ứng dụng đến rất ít. Vì cố gắng bản thân xin liên tục chỉ dẫn ví dụ thứ 2 mà lại hơi nhiều bạn còn băn khoăn. Đó là vấn đề thực hiện LCD 1602 module i2c và module thời hạn thực DS1307 cùng với tamquoccola.com uno.

 

Trước lúc đọc tiếp phần này, mình lại 1 lần tiếp nữa mong ước các bạn gọi datasheet của linh phụ kiện.

Tại trên đây, đối với LCD1602 cần sử dụng module I2C. tương tác tùy trực thuộc vào jump các bạn cắm trên module i2c. Các bạn có thể hiểu datasheet của LCD này trên trên đây Mình mang ví dụ cửa hàng OPEN là 0x27 Hoặc nó rất có thể đổi khác trường đoản cú 0Xđôi mươi - 0X27

Với module thời hạn thực DS1307 các bạn cũng có thể hiểu datasheet tại đây. Địa chỉ của module DS1307 là 0x68. Làm nuốm làm sao để tìm hiểu nó là 0X68 thì các bạn hãy tham khảo lại phần đầu nội dung bài viết, phần I2C SCANNER.. Bên vào DS1307 sẽ sở hữu các liên tưởng để gọi những cực hiếm giờ đồng hồ, phút, giây...

Vậy nên để kết nối 2 module thuộc sử dụng i2c chúng ta chỉ cần Gọi tác động của LCD là 0x27, liên quan của DS1307 là 0X68 là có thể sử dụng mặt khác 2 module trên cùng 2 chân SDA, SCL của tamquoccola.com

#include #include "RTClib.h"#include LiquidCrystal_I2C lcd(0xtrăng tròn,16,2); // 0x27 là liên hệ của lcd 16x2RTC_DS1307 RTC;void cài đặt () lcd.init(); lcd.backlight(); //đèn nền bật // setup số cột với số loại lcd.begin(16, 2); // in nhãn hiệu lên màn hình lcd.print("www.tamquoccola.com"); lcd.setCursor(0, 1); lcd.print("haidangppk"); delay (2500); lcd.clear(); // Serial.begin(9600); Wire.begin();Wire.beginTransmission(0x68);// xúc tiến của ds1307Wire.write(0x07); // Wire.write(0x10); // Wire.endTransmission(); RTC.begin(); if (! RTC.isrunning()) Serial.println("RTC is NOT running!"); RTC.adjust(DateTime(__DATE__, __TIME__)); void loop () DateTime now = RTC.now(); lcd.setCursor(6, 0); lcd.print(now.hour(), DEC); lcd.print(":"); lcd.print(now.minute(), DEC); lcd.print(":"); lcd.print(now.second(), DEC); lcd.print(" "); lcd.setCursor(5, 1); lcd.print(now.day(), DEC); lcd.print("/"); lcd.print(now.month(), DEC); lcd.print("/"); lcd.print(now.year(), DEC); lcd.print(""); delay(1000);Bài viết của chính bản thân mình hoàn toàn có thể tất cả sai sót, mong các bạn góp ý. Chúc các bạn thành công!