Trong hướng dẫn này, chúng ta sẽ thiết lập giao tiếp nối tiếp giữa hai vi điều khiển ATMEGA8. Giao tiếp được thiết lập ở đây là loại UART (Máy phát nhận không đồng bộ đa năng). Bằng cách này, dữ liệu giao tiếp nối tiếp có thể được chia sẻ giữa hai bộ vi điều khiển, được yêu cầu trong các hệ thống nhúng khác nhau.
Thành phần bắt buộc
Phần cứng: ATMEGA8 (2 miếng), nguồn điện (5v), BỘ LẬP TRÌNH AVR-ISP, tụ điện 100uF (kết nối qua nguồn điện), điện trở 1KΩ (hai miếng), LED, Nút.
Phần mềm: Atmel studio 6.1, progisp hoặc flash magic.
Sơ đồ mạch & Giải thích
Hãy để chúng tôi hiểu về giao tiếp nối tiếp trong vi điều khiển AVR. Tại đây ATMEGA gửi dữ liệu đến ATMEGA khác nối tiếp. Nó có phương thức giao tiếp khác nhưng để giao tiếp dễ dàng, chúng tôi chọn RS232. Chân RS232 của ATMEGA8 đầu tiên được kết nối với chân RXD của ATMEGA8 thứ hai.
Giao tiếp dữ liệu được thiết lập được lập trình để có:
- Tám bit dữ liệu
- Hai bit dừng
- Không có bit kiểm tra chẵn lẻ
- Tốc độ truyền 2400 BPS (Bit trên giây)
- Giao tiếp không đồng bộ (Không có chia sẻ đồng hồ giữa hai ATMEGA8)
Vì vậy, chúng tôi có hai thanh ghi đặt cho hai ATMEGA8 khác nhau, trong đó một thanh ghi hoạt động như TRANSMITTER và một thanh ghi khác hoạt động như RECEIVER.
Bây giờ đối với giao tiếp RS232 giữa hai vi điều khiển ATmega, các tính năng sau phải được đáp ứng cho BỘ TRUYỀN VÀ BỘ NHẬN:
1. Chân TXD (tính năng nhận dữ liệu) của bộ điều khiển thứ nhất phải được bật cho TRANSMITTER và chân RXD của bộ điều khiển thứ hai phải được bật cho RECEIVER.
2. Vì giao tiếp là nối tiếp nên chúng ta cần biết bất cứ khi nào nhận được byte dữ liệu, để có thể dừng chương trình cho đến khi nhận được byte hoàn chỉnh. Điều này được thực hiện bằng cách cho phép ngắt hoàn toàn nhận dữ liệu.
3. DATA được truyền và nhận đến bộ điều khiển ở chế độ 8bit. Vì vậy, hai ký tự sẽ được gửi đến bộ điều khiển tại một thời điểm.
4. Không có bit chẵn lẻ, một bit dừng trong dữ liệu được gửi bởi mô-đun.
Các tính năng trên được thiết lập trong thanh ghi bộ điều khiển; chúng ta sẽ thảo luận ngắn gọn về chúng,
DARK GRAY (UDRE): (TRASMITTER SIDE) Bit này không được đặt trong quá trình khởi động nhưng nó được sử dụng trong quá trình làm việc để kiểm tra xem máy phát đã sẵn sàng truyền hay chưa. Xem chương trình trên TRASMITTER SIDE để biết thêm chi tiết.
LIGHT GRAY (RXC): (MẶT PHNG NHẬN) Bit này không được đặt trong quá trình khởi động nhưng nó được sử dụng trong quá trình làm việc để kiểm tra xem bộ thu đã sẵn sàng nhận dữ liệu hay chưa. Xem chương trình NHẬN MẶT bên để biết thêm chi tiết.
VOILET (TXEN): (TRASMITTER SIDE) Bit này được thiết lập để bật chân máy phát trên TRASMITTER SIDE.
ĐỎ (RXEN): (MẶT BẰNG TIẾP NHẬN) Bit này đại diện cho tính năng nhận dữ liệu, bit này phải được thiết lập để dữ liệu từ mô-đun được bộ điều khiển nhận, nó cũng kích hoạt chân RXD của bộ điều khiển.
BROWN (RXCIE): Bit này phải được đặt để nhận ngắt sau khi nhận dữ liệu thành công. Bằng cách kích hoạt bit này, chúng ta sẽ biết, ngay sau khi nhận dữ liệu 8 bit. Chúng tôi sẽ không sử dụng bit này ở đây vì vậy nó được để một mình.
PINK (URSEL): Bit này phải được đặt trước khi bật các bit khác trong UCSRC, sau khi đặt các bit cần thiết khác trong UCSRC; URSEL phải bị vô hiệu hóa hoặc đưa về 0. Chúng tôi sẽ không sử dụng bit này ở đây vì vậy nó được để một mình.
VÀNG (UCSZ0, UCSZ1, UCSZ2): (MẶT PHNG NHẬN & MẶT BẰNG TRASMITTER) Ba bit này được sử dụng để chọn số lượng bit dữ liệu mà chúng tôi đang nhận hoặc gửi trong một lần.
Giao tiếp giữa hai ATMEGA được thiết lập như giao tiếp tám bit. Bằng cách kết hợp giao tiếp với bảng, chúng tôi có, UCSZ0, UCSZ1 thành một và UCSZ2 thành không.
Chúng ta phải đặt chúng ở cả phía nhận và truyền.
ORANGE (UMSEL): (MẶT BẰNG GHI NHẬN & MẶT BẰNG TRASMITTER) Bit này được thiết lập dựa trên việc hệ thống đang giao tiếp không đồng bộ (cả hai sử dụng đồng hồ khác nhau) hay đồng bộ (cả hai sử dụng cùng một đồng hồ).
Cả hai bộ điều khiển không chia sẻ bất kỳ đồng hồ nào. Vì cả hai đều sử dụng đồng hồ nội bộ của riêng mình. Vì vậy, chúng ta cần đặt UMSEL thành 0 trong cả hai bộ điều khiển.
XANH LÁ (UPM1, UPM0): (MẶT PH RECNG NHẬN & MẶT BẰNG TRASMITTER) Hai bit này được điều chỉnh dựa trên tính chẵn lẻ của bit mà chúng ta đang sử dụng trong giao tiếp.
ATMEGA được lập trình để gửi dữ liệu không có tính chẵn lẻ, vì độ dài truyền dữ liệu nhỏ, chúng ta rõ ràng có thể không mất dữ liệu hoặc lỗi. Vì vậy, chúng tôi không đặt bất kỳ tính chẵn lẻ nào ở đây. Vì vậy, chúng tôi đặt cả UPM1, UPM0 thành 0 hoặc chúng được để lại, vì tất cả các bit đều là 0 theo mặc định..
BLUE (USBS): (MẶT BẰNG GHI NHẬN & MẶT BẰNG TRASMITTER) Bit này được sử dụng để chọn số lượng bit dừng mà chúng ta đang sử dụng trong quá trình giao tiếp.
Giao tiếp được thiết lập ở đây thuộc loại không đồng bộ, vì vậy để truyền và nhận dữ liệu chính xác hơn, chúng tôi cần sử dụng hai bit dừng, Do đó chúng tôi đặt USBS thành '1' trong cả hai bộ điều khiển.
Tốc độ truyền được đặt trong bộ điều khiển bằng cách chọn UBRRH thích hợp.
Giá trị UBRRH được chọn bằng tốc độ truyền tham chiếu chéo và tần số tinh thể CPU.
Vì vậy, giá trị UBRR tham chiếu chéo được xem là '25' và do đó tốc độ truyền được đặt.
Như được hiển thị trong mạch, một nút được kết nối ở phía máy phát. Khi nhấn nút này, dữ liệu tám bit được gửi bởi TRANSMITTER và dữ liệu này được nhận bởi RECEIVER. Khi nhận thành công dữ liệu này, nó sẽ bật và tắt đèn LED được kết nối với nó BẬT và TẮT, hiển thị quá trình truyền dữ liệu thành công giữa hai bộ điều khiển.