Kết nối UART giữa các vi điều khiển bằng Proteus
UART là viết tắt của "Universal Asynchronous Reception and Transmission," dùng để truyền dữ liệu theo chuỗi giữa hai thiết bị. Phương pháp truyền thông này có ưu điểm là sử dụng ít chân I/O hơn. Đối với các khoảng cách truyền dài, điều này quan trọng vì liên quan đến ít dây truyền. Trong bài viết này, chúng ta sẽ xem cách hai vi điều khiển giao tiếp với nhau bằng cách sử dụng giao diện UART của chúng.
UART Bridge giữa Hai Vi Điều Khiển
Chúng ta sẽ thảo luận về một dự án mô phỏng liên quan đến công tắc và đèn LED. Dự án ví dụ này cập nhật trạng thái của các công tắc kết nối với vi điều khiển đến vi điều khiển đối diện thông qua Giao tiếp UART. Logic được phát triển sao cho, mỗi khi có sự thay đổi trong trạng thái của công tắc, trạng thái hiện tại của công tắc được gửi đến vi điều khiển đối diện. Do đó, trạng thái hiện tại của các công tắc kết nối với 'UART1' được hiển thị bởi 'UART2' và ngược lại. Các cổng đầu vào của vi điều khiển được kéo lên nội bộ. Vì vậy, Trạng thái BẬT của công tắc cho thấy đầu vào thấp và Trạng thái TẮT của công tắc cho thấy đầu vào cao đối với vi điều khiển.
Tiêu Chuẩn RS-232 cho Truyền Dữ Liệu Serial
Mạch được thảo luận trong ví dụ UART Bridge thích hợp cho các vi điều khiển trên bảng i.e., khi hai vi điều khiển nằm trên cùng một bo mạch hoặc gần nhau, thông thường là khoảng 6 inches với một bố trí PCB tốt. Trong trường hợp vi điều khiển ở một địa điểm xa, tín hiệu cần được khuếch đại và truyền đi. Để mục đích này, mức điện áp của tín hiệu được tăng lên
Ngoài các chân RX và TX cùng với chân đất/chung, Giao thức RS-232 chứa một số tín hiệu khác để thiết lập giao tiếp. Những chân này được sử dụng để kiểm soát luồng dữ liệu. Các chân này được kiểm soát độc lập bởi vi điều khiển để đảm bảo giao tiếp chính xác và hợp lệ và tránh mất dữ liệu. Những chân này bao gồm:
Ý tưởng Ứng dụng Thời gian Thực cho RS-232:
Giả sử có một đại hội có số lượng ghế hạn chế và có hai quầy phục vụ để phát vé. Những quầy này cách xa nhau đến mức không thể truyền thông dễ dàng về những thông tin như số lượng vé còn lại, và việc sử dụng vé đã in trước không khả thi. Trong trường hợp như vậy, mạch sau đây có thể được sử dụng. Đây chỉ là một ví dụ để minh họa khái niệm.
Luồng chương trình được thiết kế sao cho, mỗi khi một vé được phát tại một quầy, số lượng vé còn lại được cập nhật ở cả hai quầy để người phát vé biết được có bao nhiêu vé có thể phát tiếp theo. Vì quầy phục vụ được đặt xa nhau, chế độ RS-232 được sử dụng để kết nối hai quầy.
Sơ đồ luồng cho ví dụ trên được hiển thị ở cuối bài viết. Để thực hiện sơ đồ luồng này, chúng ta cần biết cách sử dụng Giao diện UART của một vi điều khiển. Hãy thảo luận về cách Chế độ UART của một vi điều khiển được sử dụng bằng cách thảo luận về các thông số khác nhau của giao thức truyền thông.
Mức Điện Áp
Giao thức UART là một trong những chế độ truyền dữ liệu nối tiếp. Mức điện áp của UART có thể là 5V-TTL hoặc 3.3V. Mức điện áp này thích hợp cho việc xử lý dữ liệu trên bảng giữa hai thiết bị trên một PCB đơn hoặc trong một bảng điều khiển nhỏ. Tuy nhiên, đối với việc truyền thông ở khoảng cách xa, mức điện áp được thay đổi. Hầu hết mức điện áp này được điều chỉnh đến Tiêu chuẩn RS-232 bằng cách sử dụng một IC chuyển đổi mức như 'MAX 232'. IC chuyển mức này được sử dụng bởi Terminal UART để chuyển đổi Dữ liệu TX (truyền) sang Mức RS-232 và Dữ liệu RX (nhận) sang Mức TTL. Các cáp truyền thông tiêu chuẩn RS-232 có sẵn. Dựa trên dung tích của các cáp, khoảng cách truyền sẽ thay đổi. Các cáp có độ dài lên đến 15 mét và cao hơn có sẵn. Nếu sử dụng cáp đặc biệt có dung tích thấp, khoảng cách có thể được tăng thêm.
Khung Dữ Liệu
Dữ liệu cần được gửi được đặt vào một định dạng cụ thể bởi Terminal UART và đẩy ra từ chân TX. Trước khi sử dụng Chế độ UART, việc xác định định dạng này là quan trọng. Số bit trong khung dữ liệu thay đổi tùy thuộc vào các thiết lập định dạng. Các tham số khác nhau của khung dữ liệu bao gồm:
Hình ảnh dưới đây là biểu đồ thời gian của tín hiệu cho một khung dữ liệu có 8 bit dữ liệu, không kiểm tra và một bit dừng.
Các thiết lập này nên giống nhau giữa hai terminal, tức là cả hai terminal đều phải được xác định với các tham số giống nhau. Cùng định dạng này cũng được áp dụng cho dữ liệu nhận được thông qua chân RX.
Bảng Đăng Ký UART
Các định dạng khung dữ liệu được xác định bằng cách sử dụng Bảng Đăng Ký UART. Có một bảng đăng ký dữ liệu và nó giữ dữ liệu để gửi và nhận dữ liệu. Các bảng đăng ký này được đặt tên khác nhau bởi các nhà sản xuất khác nhau, nhưng định dạng thực sự của dữ liệu là tương tự. Hãy xem xét các đăng ký của vi điều khiển ATMEL, đặc biệt là 'ATMEGA 16', vi điều khiển được sử dụng trong ví dụ ở trên. Nó có bốn bảng đăng ký điều khiển và một bảng đăng ký dữ liệu.
1 UCSRA – USART Control and Status Register A (Bảng Đăng Ký Kiểm Soát và Trạng Thái USART A):
Bảng đăng ký này chứa các bit cờ cho các hoạt động USART khác nhau mô tả trạng thái của giao tiếp.
Các cờ được đề cập trong Bảng Đăng Ký UCSRA chỉ ra các trạng thái khác nhau của giao tiếp. Hãy xem chúng một cách thực tế bằng cách tạo ra ý định làm lỗi để đặt các cờ. Để đạt được mục đích này, Bảng Đăng Ký UCSRA được đọc sau mỗi hoạt động. 8 bit của bảng đăng ký này được hiển thị bởi 8 chân của một cổng I/O của vi điều khiển.
Cờ DOR (Data OverRun): Nó được đặt nếu một byte dữ liệu mới được nhận trong khi có hai byte chưa đọc trong các bộ đệm. Trong ví dụ mô phỏng dưới đây, mỗi hoạt động chuyển đổi trong mạch sẽ truyền dữ liệu đến vi điều khiển đối diện. Hãy không đọc dữ liệu nhận được. Do đó, sau ba hoạt động chuyển đổi, Bit DOR, là chân ‘PC3’, sẽ được đặt.
2 UCSRB – Bảng Đăng Ký Kiểm Soát và Trạng Thái USART B:
Bảng đăng ký này chứa các bit cho phép ngắt cho các bit cờ đã được đề cập trước đó. Bit bảng đăng ký ngắt toàn cầu phải được kích hoạt để bật bất kỳ ngắt nào. Các bit cho phép nhận và truyền cũng được xác định trong bảng đăng ký này.
3 UCSRC – Bảng Đăng Ký Kiểm Soát và Trạng Thái USART C:
Bảng đăng ký này chứa các bit để lựa chọn chế độ đồng bộ/asynchronous, định nghĩa các bit kiểm tra chẵn lẻ, số bit dừng, số bit dữ liệu và lựa chọn cạnh xung đồng hồ.
Các Giá Trị Định Nghĩa Kiểm Tra Chẵn Lẻ:
Bộ nhận sẽ tạo ra một giá trị kiểm tra chẵn lẻ sau mỗi byte dữ liệu nhận và so sánh với các cài đặt kiểm tra chẵn lẻ. Nếu có sự không khớp giữa giá trị được tạo ra và giá trị được xác định, cờ Lỗi Kiểm tra Chẵn Lẻ trong Bảng Đăng Ký UCSRA sẽ được đặt. Do đó, nếu kiểm tra chẵn lẻ được kích hoạt, phần mềm phải kiểm tra cờ này trước khi sử dụng byte dữ liệu đã nhận được.
Các Giá Trị Định Nghĩa Số Bit Dữ Liệu:
1 UBRR – Bảng Đăng Ký Tốc Độ Baud USART:
Tốc độ baud của truyền thông được xác định thông qua bảng đăng ký này. Nó giữ một giá trị 12 bit và được chia thành hai bảng đăng ký UBRRH (4 bit cao nhất) và UBRRL (8 bit thấp nhất). Giá trị cụ thể phải được ghi vào bảng đăng ký này cho tốc độ baud mong muốn phụ thuộc vào tần số đồng hồ CPU. UBRRH phải được ghi trước khi ghi UBRRL. Giá trị này chỉ được thay đổi trong trạng thái không hoạt động. Nếu không, truyền thông đang diễn ra sẽ bị làm gián đoạn. Giá trị cho tốc độ baud 9600 ở dao động 16MHz với U2X=0 là '103', một giá trị thập phân. Các tờ dữ liệu chứa giá trị cho tất cả các tốc độ baud có thể.
2 UDR – Bảng Đăng Ký Dữ Liệu USART:
Byte dữ liệu cần được truyền được nạp hoặc byte dữ liệu đã nhận được được đọc thông qua bảng đăng ký này. Truyền thông viên là duy nhất được đệm, trong khi, người nhận có hai bộ đệm, tức là nó có thể giữ hai byte dữ liệu mới nhất đã nhận. Nếu điều kiện bắt đầu của một byte đang nhập được nhận khi cả hai bộ đệm chưa đọc, cờ Lỗi DOR sẽ được đặt trong Bảng Đăng Ký UCSRA. Dữ liệu từ các bộ đệm được chuyển đến UDR.
Hotline: 0979 466 469