Thứ Bảy, 1 tháng 12, 2018

Bài 12. USART trong AVR vi điều khiển ATmega32A

Hướng dẫn này là về USART trong AVR vi điều khiển ATmega32A. USART là quan trọng nhất và được sử dụng rộng rãi ngoại vi trong khi phát triển vi điều khiển dựa trên hệ thống nhúng. Trong AVR ATmega32A, chúng tôi đã tích hợp hỗ trợ phần cứng cho thiết bị ngoại vi USART. Có rất nhiều hệ thống như bộ điều khiển, cảm biến và các thiết bị ngoại vi khác giao tiếp với vi điều khiển bằng USART. USART không chỉ sử dụng cho mục đích giao tiếp mà còn có thể hữu ích khi gỡ lỗi. Vì không có đơn vị hiển thị trên vi điều khiển. USART có thể được sử dụng để xem dữ liệu trên cửa sổ HyperTerminal / serial của PC cũng kiểm tra giá trị của biến và đăng ký ở các giai đoạn khác nhau của chương trình.

Giao thức nối tiếp được tạo ra từ nhiều năm trước. Nó được sử dụng bởi teletypes và thiết bị đầu cuối. Giao thức nối tiếp sử dụng 2 dây, một để truyền dữ liệu và một để nhận dữ liệu. Trong giao diện USART nối tiếp, gửi dữ liệu trong các khối nhỏ của một byte với một bit bắt đầu và một bit dừng.

                                                          USART FRAME-DATABITS

The clock signal of serial protocol is implicit, this means that is “Joined with the data stream and there is no need to have separate wire to transmit the clock from one device to another. In this case we only need to specify the USART which clock speed we want to use (this is nothing but baud rate). And USART module will take care remaining things. In this tutorial we’ll be implementing USART in AVR ATmega32A Microcontroller. ATmega32A has built-in programmable serial USART and we’ll be demonstrating functionality using simple project. We’ll be sending string from microcontroller to PC. This could be cool example to communicate MCU and PC over serial cable.  Also, it’s always good to have datasheet of ATmega32A in hand as it provides all information that we will need. [Refer Chapter No.19 and Page No:147-176].
Bây giờ chúng ta hãy nhìn vào các chân phần cứng liên quan đến USART. Các USART trong AVR Vi điều khiển ATmega32A chiếm ba ghim phần cứng.
  1. RXD - USART Receiver Pin ( chốt PD0 trên ATmega32 / ATmega32A)
  2. TXD - USART Transmitter Pin ( chốt PD1 trên ATmega32 / ATmega32A)
  3. XCK - Đồng hồ USART Pin ( pin PB0 trên ATmega32 / ATmega32A)
Chúng tôi không phải sử dụng pin XCK vì chúng tôi sẽ sử dụng chế độ giao tiếp không đồng bộ. Dữ liệu sẽ chuyển với tỷ lệ BAUD. Chúng tôi sẽ đăng ký vào UBRR Register. Điều này tương tự như hoạt động của UART. Đừng lo lắng nếu bạn không nhận được UBRR cho thời điểm này. Chúng ta sẽ thảo luận nhiều hơn khi chúng ta đi theo lời giải thích của mã.
Ở đây trong sơ đồ này, cho thấy làm thế nào để kết nối vi điều khiển và FT232RL Adapter / FTDI cáp (USB-UART Bridge) với máy tính của bạn. Nhớ TX của FT232RL Adapter được kết nối với RXD của vi điều khiển và ngược lại.

Kết nối phần cứng ATmega32A và FTDI

Ví dụ: USART trong AVR vi điều khiển ATmega32A

Bây giờ, hãy nói cụ thể về mô-đun USART và cách tạo chương trình để sử dụng nó. Trong hướng dẫn này thay vì chỉ đặt tất cả các mã lại với nhau trong hàm chính. Thay vào đó chúng ta sẽ tạo một số hàm cơ bản, vì vậy nếu chúng ta muốn sử dụng giao tiếp nối tiếp trong một dự án khác. Chúng ta chỉ cần sao chép các chức năng và gọi chúng là khi cần thiết. Vì vậy, trong mã giả, đây là những gì chúng ta cần làm:
  1. Bắt đầu và thiết lập USART
  2. Tạo một hàm để gửi một byte / char
  3. Tạo một hàm để nhận byte / char
  4. Tạo một chương trình echo đơn giản trong thói quen chính của chúng tôi
Đây là một chương trình / mã hoàn chỉnh. Trong phần sau của hướng dẫn này, chúng tôi sẽ chia chương trình thành nhiều phần để có được cái nhìn sâu sắc hơn về những gì đang xảy ra trong chức năng riêng lẻ.
LƯU Ý: một điều cần lưu ý rằng chúng ta phải sử dụng tinh thể bên ngoài 16 MHz với ATmega32A để hoạt động đúng mã này. Và chúng ta phải ghi các bit cầu chì LFUSE: 0xFF và HFUSE: 0x99 sau khi tải xuống tệp hex.

Cấu hình PuTTy cho USART

Định cấu hình PuTTy cho USART nối tiếp và nhấn vào “Mở”. Chúng tôi sẽ nhận được dữ liệu trên màn hình từ Vi điều khiển

Đầu ra AVR USART

Chúng ta hãy nhìn vào mã; ngoài vài dòng ở đầu mã nguồn (một số bao gồm các câu lệnh và macro).
Cho phép giải thích tất cả những cái tên lạ đó có nghĩa là UBRRH và UBRRL là các thanh ghi mà chúng ta đặt baudrate nhưng không trực tiếp, trong hai thanh ghi này chúng ta đặt các giá trị tương ứng với baudrate mà chúng ta muốn sử dụng (ví dụ 9600) và CPU (crystal). Để tính toán các giá trị đó có hai cách, một là đọc bảng được cung cấp trong biểu dữ liệu (trong phần USART gần cuối) hoặc sử dụng công thức nhỏ được sử dụng để tạo ra những giá trị hiện diện trong biểu dữ liệu. Trong chương trình này, chúng tôi đã sử dụng #define và có trình biên dịch để làm tất cả các toán học. Chúng tôi chỉ có thể thay đổi giá trị baudrate và biên dịch lại mã vì vậy không cần phải đọc datasheet mỗi khi chúng tôi muốn thay đổi tốc độ truyền.
Bây giờ về UCSRB là thanh ghi kiểm soát nếu Rx (nhận, đây là một kích hoạt bởi bit RXEN) và Tx (máy phát, đây là một kích hoạt bởi bit TXEN) cũng là nơi chúng ta có thể cho phép ngắt kết hợp với USART. Và UCSRC là thanh ghi có một số bit cấu hình khác. Các bit này là giao thức cụ thể. Đây là nơi chúng ta cấu hình chiều dài bit dữ liệu, kiểm tra chẵn lẻ và số bit dừng. Chúng tôi khuyên bạn nên đọc to hơn với biểu dữ liệu và tìm hiểu thêm. Để khởi tạo USART trong AVR ATmega32A, chúng ta cần gọi hàm USART_init () và đó là nó. Bây giờ chúng ta hãy di chuyển xa hơn từ việc khởi tạo USART.
Trong vòng lặp đầu tiên của linethe while được sử dụng để kiểm tra xem dữ liệu có sẵn trong bộ đệm hay không, chúng ta trả về dữ liệu. Nếu dữ liệu mới xuất hiện, dữ liệu trước đó sẽ bị mất, do đó, điểm chờ đợi cho đến khi RXC (bit số 7) trong UCSRA là SET và sau đó đọc thanh ghi UDR của USART.
Dòng đầu tiên là một chút lẻ, nhưng nó là một lý do mà dòng đang kiểm tra xem có không gian trong bộ đệm truyền ATmega. Mỗi khi USART lấy dữ liệu của nó từ bộ đệm, làm cho nó trống rỗng, nó thông báo cho CPU bằng cách báo cho UDRE (USART Data Register Empty). Nó thực hiện điều này bằng cách thiết lập một chút (bit UDRE số 5) trong thanh ghi UCSRA. Chip ATmega có bộ đệm phần cứng 3 byte nhỏ trong kênh Tx / truyền. Để đặt ký tự / byte mới, nếu có ký tự / byte được nạp vào thanh ghi UDER làm cho một phần của phần cứng USART và nếu một cái gì đó được nạp vào bộ đệm đó, nó sẽ được gửi bởi USART, một lần nữa điều này rất đơn giản chỉ với hai dòng. Chúng tôi đã có thể gửi dữ liệu bằng cổng nối tiếp.
Ở đây trong hàm này, chúng ta sẽ xem xét cách gửi chuỗi thông qua giao tiếp nối tiếp. Đây là hàm hữu ích vì có rất nhiều tình huống mà chúng ta cần gửi nhiều hơn một byte / char để chúng ta xây dựng hàm USART_putstring để giúp chúng ta. Hàm này tận dụng thực tế rằng trong C mỗi chuỗi được kết thúc bằng một ký tự null, điều này có nghĩa là char cuối cùng luôn là '0', do đó, sử dụng hàm USART_send này, chúng ta làm cho nó hoạt động và gửi thành công chuỗi 'Wel-Come to BINARYUPDATES. COM 'đến PC qua giao tiếp nối tiếp. Đây là cách bạn có thể sử dụng USART trong AVR vi điều khiển ATmega32A để thiết lập giao tiếp giữa PC và hệ thống vi điều khiển. 

Không có nhận xét nào:

Đăng nhận xét

Bài đăng mới nhất

Hướng dẫn sử dụng Cân điện tử Fujihatsu FTC-01

Hướng dẫn sử dụng Cân điện tử Fujihatsu FTC-01 # candientu ,  # fujihatsu ,  # candientufujihatsu  #candientu,  # candientufujhatsu , #fuji...

Bài đăng phổ biến