Tải bản đầy đủ (.pdf) (104 trang)

Tài liệu thực hànhnhúng 23042024

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.05 MB, 104 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP

<b>KHOA ĐIỆN TỬ </b>

<b>Bộ môn : Công nghệ Thông tin </b>

<b>TÀI LIỆU HƯỚNG DẪN THỰC HÀNH</b>

<b>Giáo viên hướng dẫn thực hành :</b>

<small>. . . </small>

<b>Giáo viên giảng dạy :</b>

<small>. …………... . . </small>

<b>Kỳ - Năm học :</b>

<small>. …………... . . …………... . . .</small><b><small>u</small></b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

Đánh giá kết quả quá trình

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>QUY ĐỊNH THỰC HIỆN VỚI MỖI BÀI THỰC HÀNH </b>

<b>Yêu cầu: </b>

thuyết khi kết thúc thực hành.

<b>Các bước cần chuẩn bị: </b>

<b>trả lời hết tất các câu hỏi trong tài liệu. Yêu cầu chép tay phần trả lời. </b>

 <b>Bước 2: Xin chữ ký xác nhận đã hoàn thành phần tự chuyển bị ở nhà của Giảng </b>

viên hướng dẫn thực hành trước khi vào phòng thực hành.

 <b>Bước 3: Đọc kỹ và thực hiện đúng quy trình thực hành đã in và dán trên mỗi Kit </b>

thực hành.

 <b>Bước 4: Thực hiện theo đúng tài liệu hướng dẫn đối với mỗi bài thực hành. </b>

 <b>Bước 5: Báo cáo kết quả bài thực hành theo yêu của của Giảng viên và yêu cầu </b>

Giảng viên chấm điểm.

<b>Bước 6: Ký nhận vào sổ Thực hành thực hành.</b>

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

số sử dụng IC dịch 74HC595

<b>1.1.2. Trình tự thực hành </b>

<b>A. Kết nối mạch thực hành </b>

<b>1) Kết nối mạch PIC16F877A và mạch LED </b>

Sử dụng 2 module PIC16F877A và module LED, cắm jack kết nối các chân trên module LED với module PIC16F877A theo thứ tự tương ứng với 2 cột ở bảng sau:

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>2) Kết nối nguồn: </b>

Sử dụng module nguồn tích hợp để cấp nguồn cho kit thực hành. Module nguồn hỗ trợ các dải điện áp: 3,3V, 5V, 12V.

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

Kết nối nguồn 5V với kit vi điều khiển và các module thành phần theo sơ đồ: Module nguồn ATX Module vi điều khiển Module LED

Kiểm tra kỹ chân kết nối trước khi thực hiện thao tác bật nguồn cho hệ thống. Gạt công tắc sang trạng thái ON để cấp nguồn.

<b>3) Cài đặt Kit LED làm việc ở chức năng LED đơn </b>

Module LED là module kết hợp giữa LED 7 thanh và LED đơn nên khi sử dụng cần gạt switch Bit để lựa chọn chức năng cần dùng.

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Khi sử dụng module với LED đơn cần gạt các switch ở vị trí: 4  8 lên trạng thái ON và các switch 1  3 trạng thái OFF.

Chiều gạt lên là ON và ngược lại

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>4) Sơ đồ nguyên lý phần kết nối PIC16F877A và led đơn: </b>

<b>B. Lập trình mẫu </b>

<b>1) Mục đích của chương trình </b>

chiều mong muốn.

<b>2) Mơ tả thuật tốn chương trình </b>

a) Thuật toán điều khiển IC dịch 74HC595

<b> Nguyên lý làm việc của IC 595: </b>

Thanh ghi dịch 74HC595 thường được sử dụng với bộ vi điều khiển hoặc bộ vi xử lý để mở rộng các chân ra số GIPO. 74HC595 chỉ yêu cầu 3 chân kết nối với MCU, đó là Clock, Data và Latch. 74HC595 có điện áp hoạt động rộng từ 2V đến 6V và có thể ghép nối tiếp để mở rộng không giới hạn số lượng đầu ra về mặt lý thuyết. Dưới đây là một mạch ứng dụng của IC tạo ra 8 đầu ra điều khiển LED đơn.

Sơ đồ ghép nối mở rộng điều khiển 8 led đơn:

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<i>(Nguồn ảnh tham khảo internet) </i>

Sơ đồ ghép nối mở rộng điều khiển 16 led đơn sử dụng 2 IC 74HC595. Theo nguyên lý trên ta có thể mở rộng tuỳ ý số lượng OUTPUT thông qua việc ghép nối tiếp chuỗi n IC 74HC595 lại với nhau.

<i>(Nguồn ảnh tham khảo internet) </i>

<b> Ý nghĩa các chân IC74HC595 </b>

1 bit

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

 Q0  Q7 (output): (15, 1, 2, 3, 4, 5, 6, 7) Xuất dữ liệu khi chân 13 tích cực ở mức thấp và có một xung tích cực ở sườn âm tại chân chốt 12.

tất cả các đầu ra của 74HC595 trở về trạng thái cao trở, khơng có đầu ra nào được cho phép.

nhau thì chân này đưa vào đầu vào của IC tiếp theo khi đã dịch đủ 8bit.

dương (từ 0 lên 1) thì 1bit được dịch vào IC.

sườn dương thì cho phép xuất dữ liệu trên các chân output. (chú ý chiều dịch dữ liệu từ Q0Q7)

<b> Nguyên lý làm việc mô tả minh họa như hình dưới:</b>

Thuật tốn điều khiển hiển thị 8 led đơn

 Định nghĩa (đặt tên) các chân điều khiển chính để tiện sử dụng trong chương trình. Sinh viên có thể khơng cần các lệnh này nếu sử dụng các tên PIN_X có sẵn. Với X là pin muốn

#Define DS_PIN PIN_B0 #define SHCP_PIN PIN_B1

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

#define STCP_PIN PIN_B2

 Đưa 8 bit dữ liệu nối tiếp ở đầu vào chân DS vào thanh ghi đệm trong IC

Input: data => là tham số kiểu nguyên 8 bit, là dữ liệu cần đưa vào thanh ghi đệm của IC

void Init_74hc595(int data) // {

 Xuất dữ liệu trong thanh ghi đệm của IC ra 8 cổng ra Q0Q7 của IC

void OUTPUT_74HC595() // tạo xung dương để chốt dữ liệu

b) Thuật tốn chương trình chính

Chương trình chính sẽ thực hiện 2 chương trình con sáng dần và tắt dần tuần tự.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

c) Thuật tốn chương trình điều khiển LED sáng từ trái qua phải với thời gian trễ T

Với module LED sử dụng bao gồm 2 IC 74HC595 và 16 LED được gán lần lượt theo 2 IC 74HC595, thuật toán điều khiển LED sáng dần với thời gian trễ T:

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

for(int i = 0; i < 16 ; i++) //Lặp 16 lần tương ứng với số LED

Khi số LED nhỏ hơn 8 hay chỉ những LED trên IC 74HC595 số 1 được sáng, các LED trên IC 74HC595 số 2 tắt hết. Theo quy luật tràn của IC 74HC595 thì dữ liệu gửi đi sẽ lần lượt từ IC xa nhất rồi giảm dần, vậy cần gửi dữ liệu tắt LED đến IC 74HC595 2 trước rồi đến IC 74HC595 1.

Init_74hc595(0); //dữ liệu tắt LED đến IC 74HC595 số 2 Init_74hc595(Data_LED[i]); //dữ liệu LED sáng lần lượt đến IC 74HC595 số 1

OUTPUT_74HC595(); //Xuất giá trị ra OUTPUT delay_ms(toc_do); //delay T giây.

Tương tự khi số LED lớn hơn 8 hay số LED trên IC 74HC595 số 1 đã sáng hết.

Init_74hc595(Data_LED[i - 8]); //dữ liệu LED sáng lần lượt đến IC 74HC595 số 2

Init_74hc595(0xFF); //dữ liệu bật toàn bộ LED đến IC 74HC595 số 1

OUTPUT_74HC595(); //Xuất giá trị ra OUTPUT delay_ms(toc_do); //delay T giây.

d) Thuật toán chương trình điều khiển LED sang từ phải qua trái với thời gian trễ T Ngược với bài toán trên ta chỉ việc đảo ngược thuật toán như sau:

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

Init_74hc595(Data_LED[i - 8]);//dữ liệu LED 2 tắt lần lượt ngược với bật lần lượt

Init_74hc595(0xFF);//dữ liệu LED 1 sáng hết OUTPUT_74HC595(); //Xuất giá trị ra OUTPUT delay_ms(toc_do); //delay T giây.

<b>3) Mã chương trình mẫu hồn chỉnh </b>

Code mẫu tham khảo trên link:

#include <16F877A.h> #device ADC=10

#use delay(crystal=12MHz) #define DS_PIN PIN_B0 #define SHCP_PIN PIN_B1 #define STCP_PIN PIN_B2

unsigned char Data_LED[] = {0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF};

void Init_74hc595(int data); void OUTPUT_74HC595();

void LED_sang_dan_trai_qua_phai(int16 toc_do); void LED_tat_dan_phai_qua_trai(int16 toc_do);

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Thực hiện tạo project trên phần mềm CCS và viết lại chương trình trên. Thực hiện biên dịch và hiệu chỉnh lỗi nếu có. Sau khi hồn tất, gắn chip và nạp chương trình. Cấp nguồn cho KIT và kiểm tra kết quả chạy thực. Thay đổi giá trị tốc độ và kiểm tra kết quả.

<b>1.1.3. Bài tập </b>

1. Bật lần lượt 2 LED từ trái qua phải sau mỗi t giây. 2. Tắt lần lượt 2 LED từ phải qua trái sau mỗi t giây.

3. Bật các LED chẵn tắt các LED lẻ và đổi trạng thái sau t giây.

<b>1.2. Lập trình LED 7 đoạn 1.2.1. Mục đích </b>

sử dụng kit mạch thực.

ra số sử dụng IC dịch 74HC595.

<b>1.2.2. Trình tự thực hành </b>

<b>A. Kết nối mạch thực hành </b>

<b>1) Kết nối mạch PIC16F877A và mạch LED </b>

Sử dụng 2 module PIC16F877A và module LED, cắm jack kết nối các chân trên module LED với module PIC16F877A theo thứ tự tương ứng với 2 cột ở bảng sau:

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

Kết nối nguồn 5V với kit vi điều khiển và các module thành phần theo sơ đồ: Module nguồn ATX Module vi điều khiển Module LED

Kiểm tra kỹ chân kết nối trước khi thực hiện thao tác bật nguồn cho hệ thống. Gạt công tắc sang trạng thái ON để cấp nguồn.

<b>3) Cài đặt Kit LED làm việc ở chức năng LED đơn </b>

Module LED là module kết hợp giữa LED 7 thanh và LED đơn nên khi sử dụng cần gạt switch Bit để lựa chọn chức năng cần dùng.

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

Khi sử dụng module với LED đơn cần gạt các switch ở vị trí: 4  8 lên trạng thái ON và các switch 1  3 trạng thái OFF.

Chiều gạt lên là ON và ngược lại

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<b>4) Sơ đồ nguyên lý phần kết nối PIC16F877A và led đơn: </b>

<b>B. Lập trình mẫu </b>

<b>1) Mục đích của chương trình </b>

<b>2) Mơ tả thuật tốn chương trình </b>

a) Thuật tốn điều khiển LED 7 đoạn sử dụng IC74HC595

<b> Nguyên lý làm việc của LED 7 đoạn: </b>

LED 7 đoạn là một thiết bị hiển thị điện tử được sử dụng để hiển thị số. Nó bao gồm 7 đoạn LED, được sắp xếp thành hình chữ nhật đứng. Mỗi đoạn LED có thể được bật hoặc tắt để tạo ra các ký tự và số.

Có hai loại LED 7 đoạn chính là:

được nối chung lại với nhau. Để bật một đoạn LED, cần cấp điện áp dương cho anode của đoạn LED đó.

nối chung lại với nhau. Để bật một đoạn LED, cần cấp điện áp âm cho cathode của đoạn LED đó.

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

Theo sơ đồ trên ta có thể thấy cấu tạo LED 7 đoạn được cấu thành từ 7 LED đơn xếp thành 1 hình chữ nhật và 1 dấu “.”.

Quy định các chân LED được kí hiệu từ a  f, chân COM là chân chung sẽ được cấp GND nếu LED chung cathode và cấp VCC nếu LED chung anode, chân DP là vị trí dấu

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

“.”. Từ đó ta có thể xây dựng mơ hình hiển thị các giá trị số và chữ thông qua bật/tắt các LED tương ứng theo hình sau.

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

Xây dựng bản giá trị đầu ra tương ứng với 2 loại LED. Từ mơ hình sử dụng 1 LED ứng dụng phát triển trên LED 7 thanh có 4 chữ số.

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

Dựa trên nguyên lý IC74HC595 đã ứng dụng tại bài thực hành LED.

Thanh ghi dịch 74HC595 thường được sử dụng với bộ vi điều khiển hoặc bộ vi xử lý để mở rộng các chân ra số GIPO. 74HC595 chỉ yêu cầu 3 chân kết nối với MCU, đó là Clock, Data và Latch. 74HC595 có điện áp hoạt động rộng từ 2V đến 6V và có thể ghép nối tiếp để mở rộng không giới hạn số lượng đầu ra về mặt lý thuyết. Dưới đây là một mạch ứng dụng của IC tạo ra 8 đầu ra điều khiển LED đơn.

Sơ đồ ghép nối mở rộng điều khiển 8 led đơn:

<i>(Nguồn ảnh tham khảo internet) </i>

Sơ đồ ghép nối mở rộng điều khiển 16 led đơn sử dụng 2 IC 74HC595. Theo nguyên lý trên ta có thể mở rộng tuỳ ý số lượng OUTPUT thông qua việc ghép nối tiếp chuỗi n IC 74HC595 lại với nhau.

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

<i>(Nguồn ảnh tham khảo internet) </i>

<b> Ý nghĩa các chân IC74HC595 </b>

1 bit

mức thấp và có một xung tích cực ở sườn âm tại chân chốt 12.

tất cả các đầu ra của 74HC595 trở về trạng thái cao trở, khơng có đầu ra nào được cho phép.

nhau thì chân này đưa vào đầu vào của IC tiếp theo khi đã dịch đủ 8bit.

dương (từ 0 lên 1) thì 1bit được dịch vào IC.

sườn dương thì cho phép xuất dữ liệu trên các chân output. (chú ý chiều dịch dữ liệu từ Q0Q7)

<b>3) Mã chương trình mẫu hồn chỉnh </b>

Code mẫu hiển thị 1 số có 8 chữ số bất kì lên màn hình LED 7 thanh thơng qua hàm

hien_thi_led([số cần hiển thị]);

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

const unsigned char Code7Seg[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //mã LED 7 thanh với từng số dạng hex: 0  9

const unsigned char CodeNumber[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; //mã quét LED với 8 LED

void Init_74hc595(unsigned int data); //Hàm xuất dữ liệu đến IC 74HC595

void OUTPUT_74HC595(); // Hàm gửi dữ liệu xác nhận IC 74HC595 xuất dữ liệu đầu ra

void hien_thi_led(int32 so_hien_thi); //Hàm hiển thị số đã

hien_thi_led(12345678); //kiểm tra hiển thị số “12345678” lên LED 7 thanh

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

void OUTPUT_74HC595() //// Hàm gửi dữ liệu xác nhận IC 74HC595 xuất dữ liệu đầu ra

Thực hiện thao tác tạo project trên phần mềm ccs và nạp code chạy thử với giá trị ngày tháng năm sinh dưới dạng: dd/mm/yyyy ví dụ 23/11/1996.

Chương trình ứng dụng làm đồng hồ bấm giờ sử dụng timer:

#include <16F877A.h>

#use delay(crystal=12MHz) #define DS_PIN PIN_B0

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

#define SHCP_PIN PIN_B1 #define STCP_PIN PIN_B2

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

void Init_74hc595(unsigned int data)

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

2. Vẽ lại sơ đồ kết nối các chân giữa module PIC1F877A và Module LED 3. Vẽ lại sơ đồ kết nối các chân giữa module PIC1F877A và Module LED với

6. Trình bày nguyên lý làm việc của IC595 7. Trình bày nguyên lý làm việc của LED 7 đoạn

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

<b>Bài 2: Lập trình đọc tín hiệu Analog và hiển thị LCD 16x2 2.1. Lập trình hiển thị LCD </b>

<b>2.1.1. Mục đích </b>

sử dụng kit mạch thực.

truyền thơng I2C

<b>2.1.2. Trình tự thực hành </b>

<b>A. Giới thiệu màn hình LCD 2004 </b>

LCD 20x4 là loại màn hình tinh thể lỏng nhỏ dùng để hiển thị chữ hoặc số trong bảng mã ASCII. Mỗi ô của Text LCD bao gồm các chấm tinh thể lỏng, các chấm này kết hợp với nhau theo trình tự “ẩn” hoặc “hiện” sẽ tạo nên các kí tự cần hiển thị và mỗi ơ chỉ hiển thị được một kí tự duy nhất.

LCD 20x4 nghĩa là loại LCD có 4 dịng và mỗi dịng có thể hiển thị được 20 kí tự. Đây là loại màn hình được sử dụng rất phổ biến trong các loại mạch điện. Cấu trúc hiển thị của màn hình như sau:

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

*Lưu ý:

sử dụng và bài toán lựa chọn phương pháp phù hợp.

tăng giảm đến khi có được độ sáng mong muốn.

Sử dụng màn hình LCD với I2C:

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

<b>B. Giới thiệu về chuẩn truyền thông I2C: </b>

I2C kết hợp các tính năng tốt nhất của SPI và UART. Với I2C, bạn có thể kết nối nhiều slave với một master duy nhất (như SPI) và bạn có thể có nhiều master điều khiển một hoặc nhiều slave. Điều này thực sự hữu ích khi bạn muốn có nhiều hơn một vi điều khiển ghi dữ liệu vào một thẻ nhớ duy nhất hoặc hiển thị văn bản trên một màn hình LCD.

Giống như giao tiếp UART, I2C chỉ sử dụng hai dây để truyền dữ liệu giữa các thiết bị:

dọc theo một đường duy nhất (đường SDA).

Giống như SPI, I2C là đồng bộ, do đó đầu ra của các bit được đồng bộ hóa với việc lấy mẫu các bit bởi một tín hiệu xung nhịp được chia sẻ giữa master và slave. Tín hiệu xung nhịp ln được điều khiển bởi master.

<i>Cách hoạt động của I2C: </i>

Với I2C, dữ liệu được truyền trong các tin nhắn. Tin nhắn được chia thành các khung dữ liệu. Mỗi tin nhắn có một khung địa chỉ chứa địa chỉ nhị phân của địa chỉ slave và một hoặc nhiều khung dữ liệu chứa dữ liệu đang được truyền. Thông điệp cũng bao gồm điều

</div><span class="text_page_counter">Trang 41</span><div class="page_container" data-page="41">

kiện khởi động và điều kiện dừng, các bit đọc / ghi và các bit ACK / NACK giữa mỗi khung dữ liệu:

Điều kiện khởi động: Đường SDA chuyển từ mức điện áp cao xuống mức điện áp thấp trước khi đường SCL chuyển từ mức cao xuống mức thấp.

Điều kiện dừng: Đường SDA chuyển từ mức điện áp thấp sang mức điện áp cao sau khi đường SCL chuyển từ mức thấp lên mức cao.

Khung địa chỉ: Một chuỗi 7 hoặc 10 bit duy nhất cho mỗi slave để xác định slave khi master muốn giao tiếp với nó.

Bit Đọc / Ghi: Một bit duy nhất chỉ định master đang gửi dữ liệu đến slave (mức điện áp thấp) hay yêu cầu dữ liệu từ nó (mức điện áp cao).

Bit ACK / NACK: Mỗi khung trong một tin nhắn được theo sau bởi một bit xác nhận / không xác nhận. Nếu một khung địa chỉ hoặc khung dữ liệu được nhận thành công, một bit ACK sẽ được trả lại cho thiết bị gửi từ thiết bị nhận.

<i>Địa chỉ: </i>

slave biết rằng dữ liệu đang được gửi đến slave này chứ không phải slave khác. Nó thực hiện điều này bằng cách định địa chỉ. Khung địa chỉ luôn là khung đầu tiên sau bit khởi động trong một tin nhắn mới.

nó. Sau đó, mỗi slave sẽ so sánh địa chỉ được gửi từ master với địa chỉ của chính nó. Nếu địa chỉ phù hợp, nó sẽ gửi lại một bit ACK điện áp thấp cho master. Nếu địa chỉ khơng khớp, slave khơng làm gì cả và đường SDA vẫn ở mức cao.

ghi dữ liệu vào nó hay nhận dữ liệu từ nó. Nếu master muốn gửi dữ liệu đến slave,

</div><span class="text_page_counter">Trang 42</span><div class="page_container" data-page="42">

bit đọc / ghi ở mức điện áp thấp. Nếu master đang yêu cầu dữ liệu từ slave, thì bit ở mức điện áp cao.

<i>Khung dữ liệu: </i>

Sau khi master phát hiện bit ACK từ slave, khung dữ liệu đầu tiên đã sẵn sàng được gửi.

Khung dữ liệu ln có độ dài 8 bit và được gửi với bit quan trọng nhất trước. Mỗi khung dữ liệu ngay sau đó là một bit ACK / NACK để xác minh rằng khung đã được nhận thành công. Bit ACK phải được nhận bởi master hoặc slave (tùy thuộc vào cái nào đang gửi dữ liệu) trước khi khung dữ liệu tiếp theo có thể được gửi.

Sau khi tất cả các khung dữ liệu đã được gửi, master có thể gửi một điều kiện dừng cho slave để tạm dừng quá trình truyền. Điều kiện dừng là sự chuyển đổi điện áp từ thấp lên cao trên đường SDA sau khi chuyển tiếp từ thấp lên cao trên đường SCL , với đường SCL vẫn ở mức cao.

<i>Các bước truyền dữ liệu I2C: </i>

Master gửi điều kiện khởi động đến mọi slave được kết nối bằng cách chuyển đường SDA từ mức điện áp cao sang mức điện áp thấp trước khi chuyển đường SCL từ mức cao xuống mức thấp.

Master gửi cho mỗi slave địa chỉ 7 hoặc 10 bit của slave mà nó muốn giao tiếp, cùng với bit đọc / ghi.

Mỗi slave sẽ so sánh địa chỉ được gửi từ master với địa chỉ của chính nó. Nếu địa chỉ trùng khớp, slave sẽ trả về một bit ACK bằng cách kéo dòng SDA xuống thấp cho một bit. Nếu địa chỉ từ master không khớp với địa chỉ của slave, slave rời khỏi đường SDA cao. Master gửi hoặc nhận khung dữ liệu.

Sau khi mỗi khung dữ liệu được chuyển, thiết bị nhận trả về một bit ACK khác cho thiết bị gửi để xác nhận đã nhận thành công khung.

Để dừng truyền dữ liệu, master gửi điều kiện dừng đến slave bằng cách chuyển đổi mức cao SCL trước khi chuyển mức cao SDA.

<i>Một master với nhiều slave: </i>

Vì I2C sử dụng định địa chỉ nên nhiều slave có thể được điều khiển từ một master duy nhất. Với địa chỉ 7 bit sẽ có 128 (2 mũ 7) địa chỉ duy nhất. Việc sử dụng địa chỉ 10 bit không phổ biến, nhưng nó cung cấp 1.024 (2 mũ 10) địa chỉ duy nhất. Để kết nối nhiều slave đến một master duy nhất, bạn có thể đấu dây như thế này, với điện trở kéo lên 4,7K Ohm kết nối đường SDA và SCL với Vcc:

</div>

×