Địa chỉ của PCF8574T Địa chỉ hexa 7 bit (không R/𝒘̅) A6 A5 A4 A3 A2 A1 A0 R/𝒘̅ 0 1 0 0 0 0 0 - 0x20 0 1 0 0 0 0 1 - 0x21 0 1 0 0 0 1 0 - 0x22 0 1 0 0 0 1 1 - 0x23 0 1 0 0 1 0 0 - 0x24 0 1 0 0 1 0 1 - 0x25 0 1 0 0 1 1 0 - 0x26 0 1 0 0 1 1 1 - 0x27
2.8 Chuẩn giao tiếp I2C
2.8.1 Giới thiệu I2C
I2C Bus (Inter-Integrated Circuit Bus) là một chuẩn truyền thông trong hệ thống nhúng (embedded system) rất được ưa chuộng. Kết nối giữa thiết bị chủ - master (hoặc multimaster) với một thiết bị tớ - single slave (hoặc multi slave). Một trong những ưu
23
điểm nổi bật của chuẩn giao tiếp I2C là nó chỉ duy nhất 2 dây SCL (serial clock) và SDA (serial data) để truyền nhận tín hiệu.
Hình 2.18 Nhiều thiết bị ngoại vi được gắn vào bus chung I2C.
Kéo xuống mức thấp.
Khi giao tiếp qua 2 dây SCL và SDA. Integrated Circuit (IC) sẽ tạo ra xung vuông slave mức cao và mức thấp để truyền nhận tín hiệu. Nguyên lý để tạo ra mức thấp là khi IC (Slave hoặc Master) kéo FET xuống mức thấp, VBus sẽ đi qua FET và nối đất
(ground) –> Logic 0.
Hình 2.19 Kéo xuống mức thấp.
Kéo lên mức cao
Khi ngừng kích FET, thì điện áp qua trở kéo Rpu và kéo VBus lên mức cao – > Logic 1.
24
Hình 2.20 Kéo lên mức cao.
2.8.2 Nguyên lý hoạt động của I2C
Trình tự Master muốn truyền dữ liệu cho Slave:
Master là transmitter (IC gửi) sẽ truyền bit START và địa chỉ của Slave
Master sẽ truyền dữ liệu cho slaver nhận (receiver)
Master sẽ truyền bit STOP để kết thúc quá trình gửi Trình tự Master muốn nhận (hoặc đọc) dữ liệu từ Slave:
Master là receiver ((IC nhận) sẽ truyền bit START và địa chỉ của Slave (transmitter))
Master (receiver) gửi thanh ghi được yêu cầu để đọc từ Slave (transmitter)
Master (receiver) sẽ nhận dữ liệu từ Slave truyền đến
Master sẽ gửi bit STOP để kết thúc quá trình gửi
Bit điều kiện START và STOP
Giao tiếp I2C với thiết bị này được bắt đầu bởi Master gửi điều kiện START và STOP.
Chuyển đổi từ cao –> thấp trên dây SDA trong khi SCL ở mức cao là định nghĩa START.
Chuyển đổi từ thấp –> cao trên dòng SDA trong khi SCL ở mức cao là định nghĩa STOP.
25
Hình 2.21 Bit điều kiện START và STOP.
Định dạng byte
Mỗi bit được truyền bởi mỗi xung của SCL. 1 byte = 8 bit trên được truyền bởi SDA. Một byte ở đây có thể là địa chỉ I2C của IC, địa chỉ thanh ghi, dữ liệu truyền và nhận. Dữ liệu được truyền với Most Signigicant Bit (MSB) đầu tiên.
Hình 2.22 Định dạng byte.
Acknowledge (ACK) và Not Acknowledge (NACK) Bit
Mỗi byte dữ liệu (bao gồm byte địa chỉ- address byte) được theo sau bởi một bit ACK từ receiver. Bit ACK cho phép receiver giao tiếp với transmiter rằng byte đã được nhận thành cơng và một byte khác byte có thể được gửi.
26
Trước khi gửi kit ACK, transmitter phải nhả (release) chân SDA. Để gửi ACK bit, receiver phải kéo chân SDA xuống mức thấp trong khi SCL ở mức cao. Nếu trường hợp chân SDA vẫn ở mức cao lúc này sẽ xuất hiện bit NACK.
Hình 2.23 Acknowledge (ACK) và Not Acknowledge (NACK) Bit.
Bit NACK xuất hiện khi:
Receiver khơng nhận và truyền vì chưa sẵn sàng giao tiếp với Master
Trong quá trình truyền nhận, receiver nhận dữ liệu hoặc lệnh mà nó khơng hiểu
Trong q trình truyền nhận, receiver khơng thể nhận hoặc truyền thêm bất kì dữ liệu nào nữa
Một Master-receiver kết thúc q trình nhận dữ liệu và thơng báo đến Slave qua bit NACK
2.8.3 Dữ liệu I2C
Dữ liệu được gửi hoặc nhận được từ Slave. Thanh ghi (register) được lưu trong bộ nhớ của Slave, thanh ghi có thể được chứa các cấu hình (configuration) hoặc dữ liệu và được gửi đến Master. Master có thể viết (write) tất cả các thông tin vào những thanh ghi này để hướng dẫn Slave làm những nhiệm vụ cụ thể.
Viết dữ liệu cho Slave thông qua I2C Bus
Để viết dữ liệu thông qua I2C bus, Master phải gửi bit START qua bus và địa chỉ của Slave + bit cuối (R/W=0) biểu thị việc viết. Sau đó Slave gửi ACK để xác nhận việc kết nối giữa Master –> Slave. Sau đó Master sẽ gửi địa chỉ thanh ghi (Register Adress) và dữ liệu tới thanh ghi (Data byte to Register). Để kết thúc quá trình truyền dữ liệu Master gửi tín hiệu STOP.
27
Hình 2.24 I2C ghi vào thanh ghi của Slave.
Đọc từ Slave qua I2C Bus
Việc đọc dữ liệu từ Slave cũng khá giống với việc viết dữ liệu. Sau khi thực hiện các bước giống như đọc dữ liệu ở trên, Master sẽ gửi thêm một bit START một lần nữa (Repeated Start) sau đó là địa chỉ của Slave + (R/W =1) biểu thị việc đọc. Ngay lập tức Master release chân SDA nhưng vẫn tiếp tục cấp xung cho chân SCL, trong lúc này Master trở thành Receiver và Slave trở thành transmitter.
Mỗi lần Master nhận được 1 byte data, nó sẽ gửi bit ACK đến Slave để thơng báo rằng muốn nhận thêm data. Một khi Master nhận đủ lượng data cần thiết, nó sẽ gửi bit NACK để dừng việc giao tiếp. Sau đó là bit STOP.
Hình 2.25 Đọc từ Slave qua I2C Bus.
2.9 Mơ-đun âm thanh DFPlayer Mini
Trình phát MP3 Mini của DFPlayer cho Arduino là một mô-đun MP3 nhỏ và giá thấp với đầu ra được đơn giản hóa trực tiếp đến loa. Mơ-đun này có thể được sử dụng như một mơ-đun độc lập có gắn pin, loa và nút nhấn hoặc được sử dụng kết hợp với Arduino UNO hoặc bất kỳ loại nào khác có khả năng RX / TX, hỗ trợ kết nối thẻ nhớ lên đến 32Gbyte và đầu ra âm thanh tối đa 3W. Nó được sử dụng cho một số ứng dụng như trạm thu phí
28
nhắc nhở bằng giọng nói, trạm xe lửa, nhắc nhở kiểm tra an toàn xe buýt, báo động sự cố thiết bị cơ điện, báo cháy nhắc nhở và nhiều ứng dụng phát âm thanh khác.
Hình 2.26 Mơ-đun âm thanh DFPlayer Mini.
Thông số kỹ thuật
Tốc độ lấy mẫu được hỗ trợ (kHz): 8/11.025/12/16/22.05/24/32/44.1/48
Đầu ra DAC 24 bit, hỗ trợ dải động 90dB, SNR hỗ trợ 85dB
Hỗ trợ đầy đủ hệ thống tệp FAT16, FAT32, hỗ trợ tối đa 32G thẻ TF, hỗ trợ 32G đĩa U, 64M byte NORFLASH
Nhiều chế độ điều khiển, chế độ điều khiển I/O, chế độ nối tiếp, chế độ điều khiển nút AD
Chức năng chờ âm thanh quảng cáo, âm nhạc có thể bị đình chỉ. khi quảng cáo kết thúc trong âm nhạc tiếp tục phát
Dữ liệu âm thanh được sắp xếp theo thư mục, hỗ trợ tối đa 100 thư mục, mỗi thư mục có thể chứa tới 255 bài hát
Điều chỉnh âm lượng 30 cấp, điều chỉnh EQ 6 cấp
29
Hình 2.27 Sơ đồ chân của DFPlayer Mini.