Tự học AVR ( Bài 5 - Giao tiếp UART )

544 1 0
                                    

Bài 5 - Giao tiếp UART

của hocavr.com

I. Giới thiệu.

       Bài này giúp các bạn biết cách sử dụng cách truyền thông nối tiếp UART trên AVR. Công cụ chính cũng là 2 bộ phần mềm quen thuộc WinAVR và Proteus nhưng trong bài này (và các bài sau nữa) chúng ta sẽ sử dụng chip Atmega32 làm chip minh họa. Về cơ bản việc thay đổi chip minh họa không ảnh hưởng lớn đến tính mạch lạc của loạt bài vì sự khác biệt của hai chip Atmega8 và Atmega32 là không đáng kể. Tuy nhiên, nếu có sự khác biệt lớn ở phần nào đó tôi sẽ kể ra cho bạn tiện so sánh.

       Sau bài này, tôi hy vọng bạn có thể hiểu và thực hiện được:

Nguyên lý truyền thông nối tiếp đồng bộ và không đồng bộ.

 Module truyền thông nối tiếp USART trên AVR.

 Truyền thông đa xử lí bằng UART.

II. Truyền thông nối tiếp không đồng bộ.

       Thuật ngữ USART trong tiếng anh là viết tắt của cụm từ: Universal Synchronous & Asynchronous serial Reveiver and Transmitter, nghĩa là bộ truyền nhận nối tiếp đồng bộ và không đồng bộ. Cần chú ý rằng khái niệm USART (hay UART nếu chỉ nói đến bộ truyền nhận không đồng bộ) thường để chỉ thiết bị phần cứng (device, hardware), không phải chỉ một chuẩn giao tiếp. USART hay UART cần phải kết hợp với một thiết bị chuyển đổi mức điện áp để tạo ra một chuẩn giao tiếp nào đó. Ví dụ, chuẩn RS232 (hay COM) trên các máy tính cá nhân là sự kết hợp của chip UART và chip chuyển đổi mức điện áp. Tín hiệu từ chip UART thường theo mức TTL: mức logic high là 5, mức low là 0V. Trong khi đó, tín hiệu theo chuẩn RS232 trên máy tính cá nhân thường là -12V cho mức logic high và +12 cho mức low (tham khảo hình 1). Chú ý là các giải thích trong tài liệu này theo mức logic TTL của USART, không theo RS232.

Hình 1. Tín hiệu tương đương của UART và RS232.

       Truyền thông nối tiếp: giả sử bạn đang xây dựng một ứng dụng phức tạp cần sử dụng nhiều vi điều khiển (hoặc vi điều khiển và máy tính) kết nối với nhau. Trong quá trình làm việc các vi điều khiển cần trao đổi dữ liệu cho nhau, ví dụ tình huống Master truyền lệnh cho Slaver hoặc Slaver gởi tín hiệu thu thập được về Master xử lí…Giả sử dữ liệu cần trao đổi là các mã có chiều dài 8 bits, bạn có thể sẽ nghĩ đến cách kết nối đơn giản nhất là kết nối 1 PORT (8 bit) của mỗi  vi điều khiển với nhau, mỗi line trên PORT sẽ chịu trách nhiệm truyền/nhận 1 bit dữ liệu. Đây gọi là cách giao tiếp song song, cách này là cách đơn giản nhất vì dữ liệu được xuất và nhận trực tiếp không thông qua bất kỳ một giải thuật biến đổi nào và vì thế tốc độ truyền cũng rất nhanh. Tuy nhiên, như bạn thấy, nhược điểm của cách truyền này là số đường truyền quá nhiều, bạn hãy tưởng tượng nếu dữ liệu của bạn có giá trị càng lớn thì số đường truyền cũng sẽ nhiều thêm. Hệ thống truyền thông song song thường rất cồng kềnh và vì thế kém hiệu quả. Truyền thông nối tiếp sẽ giải quyết vần đề này, trong tuyền thông nối tiếp dữ liệu được truyền từng bit trên 1 (hoặc một ít) đường truyền. Vì lý do này, cho dù dữ liệu của bạn có lớn đến đâu bạn cũng chỉ dùng rất ít đường truyền. Hình 2 mô tả sự so sánh giữa 2 cách truyền song song và nối tiếp trong việc truyền con số 187 thập phân (tức 10111011 nhị phân).

Tự học AVR ( Bài 1 - Làm quen với AVR )Nơi câu chuyện tồn tại. Hãy khám phá bây giờ