Bài 6 I2C

Tài liệu này được biên soạn không nhằm vào bất kỳ mục đích nào mang tính thương mại. Bạn có quyền sao chép, sửa chữa và phân phát bằng bất kỳ hình thức nào. Hãy sử dụng tài liệu này, sửa chữa, bổ sung và gửi cho những ai cần nó. Chúng tôi không đề tên tác giả biên soạn. Tài liệu này thuộc quyền sở hữu những ai đang dùng nó.

Pay it forward…

Bài 6:

I2C

Mục tiêu
Học lập trình giao tiếp I2C.
Đọc giá trị đồng hồ số (DS1307) (hiển thị lên LCD), hẹn giờ bật/tắt tải AC (đèn, quạt, máy bơm, …)

I. PHẦN CỨNG

Sơ đồ nguyên lý

DS1307 module

TRIAC module

Hướng dẫn thực hiện mạch DS1307 + TRIAC, sơ đồ nguyên lý + Layout, các linh kiện trong bài các bạn xem ở bài này

–> Tham khảo giá linh kiện 🙂 tại luồng này

II. KẾT NỐI:

– Nguồn:
2 module Ds1307 và Triac trong board hoàn toàn độc lập với nhau, không chung nguồn 5V và GND.
Tuy nhiên trên board có 2 cái jumper (mình hàn 2 cái header 2) dùng để nối VCC 2 module và GND 2 module trong trường hợp muốn cấp 1 nguồn 5V cho cả 2 module cùng hoạt động.

Trong bài này, chúng ta sẽ đọc thời gian từ DS1307 về để kích TRIAC, nên ta sẽ cấp 1 nguồn 5V (nguồn từ board MainPIC) cho cả 2 module. Vì vậy:

+ Dùng 2 cái jumper / hoặc 2 cái bus 1 để nối 2 thằng VCC và 2 thằng GND lại với nhau (xem hình: jumper màu xanh và màu vàng)
+ Cấp nguồn 5V từ mạch mainPIC sang: có 2 chỗ để cắm dây, ví dụ như trong hình, sợi vàng là +5V, sợi đen là GND.
(Phía mặt dưới board có in chữ chú thích các bạn xem kĩ để khỏi cắm lộn)

– Tín hiệu:

+ Nếu trên mạch MainPIC không có 2 điện trở kéo SCL và SDA lên nguồn thì gạt công tắc SW sang phía có chữ ON (như hình trên). Lưu ý là cứ gạt công tắc sang phía nào có chữ ON, còn bạn hàn cái công tắc theo chiều nào cũng được.

Thật ra mạch mainPIC từ đầu chúng ta thiết kế cũng có 2 R 4.7k, nhưng chưa được nối vào port I2C (ngăn cách bởi cái header 2×2). Vậy bạn có thể tuỳ chọn:

*Gạt SW trên board DS1307 sang ON.
*Hoặc nối jumper cho port I2C trên MainPIC.

+ Nối 2 dây SDA và SCL trên board DS1307 với 2 chân SDA, SCL tương ứng của PIC.
*Lật mặt dưới board DS1307 các bạn sẽ thấy chú thích chân nào là SDA, chân nào là SCL.
*Đối với PIC: SDA là chân RC4, SCL là chân RC3.

Nên: Xoắn đôi 2 dây SDA và SCL lại với nhau để hạn chế nhiễu. Nguyên nhân có thể gây ra nhiễu là do chúng ta làm 2 mạch riêng rẽ, nguồn kéo sang gây nhiễu và dây tín hiệu quá dài.
+ Chân CTRL: tín hiệu điều khiển TRIAC
*Nối chân CTRL trên board DS1307 với 1 chân I/O nào đó của PIC để điều khiển đóng/cắt TRIAC (trong hình là dây màu trắng)

III. HEADER FILES

1. Các hàm dùng để giao tiếp I2C được defined trong i2c.h
Source code tương ứng được viết trong i2c.c

Lưu ý:
– Phải copy 2 files này vào folder chứa project bài học I2C.
– Phải thêm [COLOR=”royalblue”]#include “i2c.h”[/COLOR] ở đầu chương trình.
– Add 2 files tương ứng vào phần header files và source files của project.
(tương tự như dùng các hàm hiển thị LCD)

2. Nếu muốn configure lại module I2C thì sửa hàm i2c_init() trong file i2c.c

3. Khi đã dùng giao tiếp I2C thì không được dùng 2 chân RC3 và RC4 cho mục đích khác (tất nhiên :D). Và 2 chân này đã được config trong hàm i2c_init() rồi, nên bạn không cần phải cấu hình cho nó nữa.

Download i2c.c

Download i2c.h

IV. BÀI GIẢNG

Phần 1:

(Nếu không xem được clip, mời bạn xem tại đây I2C.Part1)

Phần 2:

(Nếu không xem được clip, mời bạn xem tại đây I2C.Part2)

Phần 3:

(Nếu không xem được clip, mời bạn xem tại đây I2C.Part3)

V. BÀI TẬP:
Tham khảo bài tập I2Cthông tin bổ sung.

Xem thêm chương trình học trên forum.

Comments are closed