I. I2C LÀ GÌ?

Tất nhiên là vẫn gồm bài viết trình làng về I2C trên chrissiemanby.com Tuy nhiên bài viết này mình xin nói tới một hướng khác. Các bạn quan tâm rất có thể xem lại hồ hết bài viết về I2C của các tác giả không giống nhé!

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

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

Cấu tạo cùng nguyên tắc hoạt động

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

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

Có không ít thứ hoàn toàn có thể thuộc được kết nối vào một bus I2C, tuy nhiên sẽ không còn xảy ra chuyện nhầm lẫn thân các đồ vật, vày từng máy sẽ tiến hành nhận biết bởỉ một xúc tiến duy nhất với cùng một quan hệ nam nữ chủ/tớ lâu dài trong veo thời hạn kết nối. Mỗi sản phẩm công nghệ rất có thể chuyển động như thể vật dụng dìm hoặc truyền tài liệu tuyệt hoàn toàn có thể vừa truyền vừa dìm. Hoạt hễ truyền giỏi dấn còn tùy ở trong vào vấn đề vật dụng sẽ là chủ (master) hãy tớ (slave).

Một vật dụng hay là 1 IC lúc kết nối với bus I2C, kế bên một liên can (duy nhất) nhằm sáng tỏ, nó còn được cấu hình là đồ vật nhà hay tớ.Tại sao lại sở hữu sự sáng tỏ này ? Đó bởi vì trên một bus I2C thì quyền tinh chỉnh thuộc về sản phẩm công nghệ công ty. Thiết bị chủ nạm phương châm tạo nên xung đồng hồ đeo tay mang đến toàn hệ thống, lúc thân nhì trang bị chủ-tớ giao tiếp thì đồ vật nhà gồm nhiệm vụ chế tạo xung đồng hồ thời trang cùng quản lý can dự của sản phẩm công nghệ tớ trong veo quá trình tiếp xúc. Thiết bị chủ giữ phương châm chủ động, còn lắp thêm tớ giữ lại mục đích bị động vào Việc giao tiếp.

Về triết lý lẫn thực tế I²C sử dụng 7 bit nhằm định xúc tiến, cho nên bên trên một bus hoàn toàn có thể có cho tới 2^7 liên tưởng tương xứng với 128 thiết bị rất có thể kết nối, tuy vậy chỉ bao gồm 112 , 16 địa chỉ còn lại được áp dụng vào mục tiêu riêng biệt. Bit còn sót lại qui định bài toán đọc tốt ghi dữ liệu (1 là write, 0 là read)

Điểm mạnh của I²C chính là công suất với sự dễ dàng và đơn giản của nó: một khối tinh chỉnh trung chổ chính giữa hoàn toàn có thể điều khiển cả một mạng trang bị nhưng chỉ cần nhị lối ra tinh chỉnh và điều khiển.

Xem thêm: Ilv: International Lighting Vocabulary, 2Nd Edition, Invesco Sp Intl Dev Low Vol Idx (Ilv

Hình như I2C còn tồn tại cơ chế 10bit thúc đẩy tương đương với 1024 can hệ, tương tự như nlỗi 7 bit, chỉ tất cả 1008 đồ vật có thể kết nối, sót lại 16 liên hệ đang dùng để làm sử dụng mục tiêu riêng biệt (Mình chưa rõ lắm)

Vậy, có tác dụng cố gắng làm sao để nó có thể tiếp xúc với tương đối nhiều thiết bị?

II. LÀM THẾ NÀO?

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

Hãy tưởng tượng các bạn là nhân viên cấp dưới vạc bưu phđộ ẩm, cho 1 thành phố trên tay có bưu phđộ ẩm buộc phải gửi phát. Tính năng của bạn có thể phát với thừa nhận bưu phđộ ẩm nhằm chuyển đi cho cả khu phố, tuy nhiên, nhân tố đặc biệt quan trọng là bạn phải có tác động. từng 1 thứ đang có một liên quan riêng rẽ để sản phẩm công nghệ công ty rất có thể truy cập để đưa dữ liệu 

Hải Đăng PPK

lấy ví dụ như cảm biến vận tốc ADXL345

Có 1 liên can tốt nhất mang lại riêng rẽ module với bên cạnh đó bổ xung bên phía trong gồm 3 liên can lẻ tẻ cho những trục X,Y,Z. Nếu chúng ta bắt buộc gọi những tài liệu từ bỏ trục X, trước tiên họ đề nghị mang lại can dự bao gồm của Module, kế tiếp new mang lại liên tưởng của trục X. Việc kiếm tìm thương hiệu các tương tác này các bạn đề xuất kiếm tìm trong datasheet của linh kiện. Đây là datasheet của cảm biến vận tốc ADXL345 Mngơi nghỉ ra phát âm tại mục Register bản đồ những chúng ta cũng có thể thấy liên can của trục X là 0x32 với 0x33

0x32 DATAX0 X-Axis Data 0

0x33 DATAX1 X-Axis Data 1

Trong ví dụ sau đây bản thân vẫn giới thiệu 1 ngôi trường hợp về việc liên kết chrissiemanby.com với 2 cảm biến (Cảm phát triển thành vận tốc 10 bậc tự do thoải mái GY - 80 và Cảm biến chuyển vận tốc 6 bậc tự do GY521), cả hai cảm ứng phần lớn áp dụng tiếp xúc I2C

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

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

Dưới đây là cách kết nối 2 module cùng với chrissiemanby.com, các bạn cũng có thể thấy hơi xích míc đối với lúc đầu mình nói, tại vì sao không tồn tại năng lượng điện trnghỉ ngơi như thế nào kéo sinh sống đây? Thực tế thì phía bên trong module sẽ tất cả điện trngơi nghỉ kéo, vì thế bọn họ ko bắt buộc kéo gì nữa cả 

*

Bây tiếng để giao tiếp với chúng, ta nên biết được shop của nó là gì, so với từng 1 cảm ứng trên 1 module kia đang có một liên tưởng riêng. Các bạn cần phải tìm kiếm bọn chúng vào datasheet của từng loại. Tại phía trên mình giới thiệu những liên quan của những cảm biến để chúng ta nhân thể theo dõi

Đối cùng với GY-521, chỉ tất cả một địa chỉ và chính là 0x68. Các chúng ta cũng có thể bình chọn và xác minh được liên can của chúng bằng phương pháp sử dụng bạn dạng sketch mẫu mã I2C Scanner . Nạp code kia vào cùng nó vẫn trường đoản cú mang đến chúng ta biết những cửa hàng có trên đồ vật. 

Sau Khi đang search thấy xúc tiến của những trang bị, chúng ta cũng cần phải tìm ra xúc tiến của những tkhô giòn ghi phía bên trong của bọn chúng để đọc dữ liệu. lấy ví dụ, nếu như bọn họ muốn gọi dữ liệu đến trục X trường đoản cú những cảm ứng 3 trục tốc độ của GY-80, họ rất cần phải tra cứu cửa hàng chỗ tài liệu của trục X được lưu trữ. Bằng giải pháp gọi datasheet của các cảm biến của GY-80 với ở đó là datasheet của cảm ứng 3 trục vận tốc ADXL345 nhưng tôi đã nêu tại vị trí đầu bài viết, chúng ta cũng có thể thấy rằng dữ liệu cho trục X được tàng trữ vào hai thanh hao ghi, DATAX0 với cùng 1 can dự 0x32 với DATAX1 với 1 liên can 0x33.

Bây tiếng chúng ta chỉ câu hỏi code với hãy phân tích coi code sẽ làm những gì?

#include int ADXLAddress = 0x53; // Địa chỉ của cảm ứng tốc độ vào module GY80#define X_Axis_Register_DATAX0 0x32 // hệ trọng của data0 trục X vào cảm ứng vận tốc ADXL345 trong module GY-80#define X_Axis_Register_DATAX1 0x33 //thúc đẩy của data1 trục X vào cảm biến gia tốc ADXL345 vào module GY-80#define Power_Register 0x2 chiều // thanh ghi tinh chỉnh và điều khiển tích điện cung cấpint X0,X1,X_out;void setup() Wire.begin(); // Khởi tạo ra thỏng viện WIRE Serial.begin(9600); delay(100); // kích hoạt công dụng đo lường Wire.beginTransmission(ADXLAddress);//ban đầu việc truyền download thử khám phá tới những cảm ứng Wire.write(Power_Register); // Cho phnghiền đ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 dữ liệu từ các thanh khô ghi Wire.write(X_Axis_Register_DATAX0); Wire.write(X_Axis_Register_DATAX1); Wire.endTransmission(); // Kết thúc bài toán truyền tài liệu từ bỏ 2 tkhô cứng ghi Wire.requestFrom(ADXLAddress,2); // Yêu cầu truyền 2 byte từ 2 tkhô cứng ghi if(Wire.available() 

Việc mang dữ liệu trường đoản cú những cảm biến trên module khác cũng như. Bởi vậy chúng ta đã hiểu phương pháp sử dụng tiếp xúc I2C. Và ví dụ 2 module này có vẻ không được nhiều người quyên tâm áp dụng lắm do Ngân sách cũng giống như là về sự việc chúng ta phải áp dụng mang đến không nhiều. Vì nỗ lực mình xin tiếp tục giới thiệu ví dụ thứ 2 mà hơi nhiều người còn băn khoăn. Đó là bài toán thực hiện LCD 1602 module i2c và module thời gian thực DS1307 cùng với chrissiemanby.com uno.

 

Trước khi hiểu tiếp phần này, bản thân lại 1 lần nữa mong muốn chúng ta đọc datasheet của linh phụ kiện.

Ở trên đây, so với LCD1602 cần sử dụng module I2C. thúc đẩy tùy trực thuộc vào jump chúng ta cắm trên module i2c. Các bạn có thể gọi datasheet của LCD này tại trên đây Mình lấy ví dụ shop OPEN là 0x27 Hoặc nó hoàn toàn có thể chuyển đổi từ bỏ 0Xtrăng tròn - 0X27

Với module thời gian thực DS1307 những bạn cũng có thể phát âm datasheet trên trên đây. Địa chỉ của module DS1307 là 0x68. Làm cố kỉnh nào để hiểu nó là 0X68 thì chúng ta hãy đọc lại phần đầu bài viết, phần I2C SCANNER.. Bên trong DS1307 sẽ có được các liên can nhằm đọc các giá trị giờ, phút, giây...

vì vậy nhằm liên kết 2 module thuộc sử dụng i2c chúng ta chỉ việc gọi tương tác của LCD là 0x27, cửa hàng của DS1307 là 0X68 là rất có thể áp dụng đôi khi 2 module bên trên cùng 2 chân SDA, SCL của chrissiemanby.com

#include #include "RTClib.h"#include LiquidCrystal_I2C lcd(0xđôi mươi,16,2); // 0x27 là tương tác của lcd 16x2RTC_DS1307 RTC;void cài đặt () lcd.init(); lcd.backlight(); //đèn nền nhảy // thiết đặt số cột và số chiếc lcd.begin(16, 2); // in logo nhãn hiệu lên screen lcd.print("www.chrissiemanby.com"); lcd.setCursor(0, 1); lcd.print("haidangppk"); delay (2500); lcd.clear(); // Serial.begin(9600); Wire.begin();Wire.beginTransmission(0x68);// hệ trọng 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 rất có thể có không nên sót, hy vọng chúng ta góp ý. Chúc chúng ta thành công!