Bạn muốn sử dụng USB để liên lạc với máy tính. Nếu bạn có một số bộ vi điều khiển, có lẽ bạn sẽ chỉ kết nối một trong những bộ vi điều khiển trực tiếp với máy tính. Các bộ vi điều khiển khác sẽ cần nhận lệnh từ vi điều khiển chính.
Giao tiếp bạn chọn sẽ phụ thuộc vào một số yếu tố:
- băng thông bắt buộc (chúng tôi sẽ cho rằng bạn đang chạy chúng ở 16 MHz)
- độ phức tạp (hệ thống dây và mã hóa)
- hai chiều, hoặc chủ nô
Hầu như tất cả các tùy chọn đều có hỗ trợ tích hợp trên vi điều khiển AVR. Không có tùy chọn nào bạn có thể thích hợp hơn các tùy chọn tích hợp sẽ yêu cầu phần cứng bổ sung. Vì chúng có hỗ trợ tích hợp, độ phức tạp của phần mềm hoàn toàn giống nhau, ở chỗ bạn chỉ cần cấu hình cổng (sử dụng các thanh ghi), đặt dữ liệu để truyền vào một thanh ghi khác, sau đó kích hoạt truyền bằng cách đặt một bit trong thanh ghi khác. Bất kỳ dữ liệu nhận được được tìm thấy trong một thanh ghi khác và một ngắt được kích hoạt để bạn có thể xử lý nó. Cho dù bạn chọn tùy chọn nào, sự khác biệt duy nhất là thay đổi vị trí đăng ký và một số thay đổi đối với các thanh ghi cấu hình.
Một vòng lặp USART có các tính năng sau:
- Tốc độ truyền tối đa CLK / 16 = 1 MHz (ở xung nhịp 16 MHz) là tốc độ truyền khoảng 90KB / s
- thông tin liên lạc hai chiều đầy đủ (không có chỉ định chủ hoặc nô lệ)
- yêu cầu các dây riêng biệt giữa mỗi cặp vi điều khiển - Atmega32u4 hỗ trợ hai cổng USART nguyên bản, hạn chế số lượng vi điều khiển bạn có thể kết nối trong mạng trong thực tế (hoặc nếu không bạn kết thúc bằng một chuỗi vi điều khiển dài - nghĩa là được kết nối trong một danh sách được liên kết cách thức)
Lưu ý: đây cũng là những gì bạn sẽ sử dụng để có được giao tiếp RS232, ngoại trừ bởi vì RS232 yêu cầu 10V, nó yêu cầu trình điều khiển để có được các mức điện áp đó. Đối với giao tiếp giữa các vi điều khiển, điều này không hữu ích (chỉ thay đổi mức điện áp).
RS485:
- Về cơ bản, bạn sử dụng cổng USART ở chế độ khác - không có lợi thế về băng thông và nó chỉ có thể đơn giản hóa việc nối dây một chút, nhưng nó cũng làm phức tạp nó. Điều này không được khuyến khích.
Giao diện hai dây:
Điều này cũng được gọi là I2C. Điều này có nghĩa là tất cả các thiết bị chia sẻ hai dây giống nhau.
Bạn cần một điện trở kéo lên trên cả hai dây
Nó chậm (vì các điện trở kéo lên bị giới hạn về giá trị, và có điện dung tăng khi số lượng thiết bị tăng và chiều dài dây tăng). Đối với vi điều khiển AVR này, tốc độ lên tới 400 kHz - chậm hơn USART (nhưng tốc độ này phụ thuộc vào việc giới hạn điện dung của bạn). Lý do là mặc dù một thiết bị điều khiển dây dữ liệu ở mức thấp, quá trình chuyển đổi ngược lại được thực hiện bằng cách để dây nổi cao trở lại (điện trở kéo lên).
Thậm chí còn chậm hơn khi bạn cho rằng TẤT CẢ thông tin liên lạc chia sẻ cùng một băng thông hạn chế. Bởi vì tất cả các giao tiếp chia sẻ cùng một băng thông hạn chế, có thể có sự chậm trễ trong giao tiếp, nơi dữ liệu phải đợi cho đến khi mạng không hoạt động trước khi có thể được gửi. Nếu dữ liệu khác liên tục được gửi, nó cũng có thể chặn dữ liệu không bao giờ được gửi.
Nó dựa vào giao thức chủ-nô, trong đó chủ xử lý một nô lệ, sau đó gửi lệnh / yêu cầu và nô lệ trả lời sau đó. Mỗi lần chỉ có một thiết bị có thể giao tiếp, vì vậy nô lệ phải đợi chủ hoàn thành.
Bất kỳ thiết bị nào cũng có thể hoạt động như một chủ và / hoặc nô lệ, làm cho nó khá linh hoạt.
SPI
Đây là những gì tôi muốn giới thiệu / sử dụng cho giao tiếp chung giữa các vi điều khiển.
Đó là tốc độ cao - lên tới CLK / 2 = 8 MHz (đối với CLK ở 16 MHz), làm cho nó trở thành phương pháp nhanh nhất. Điều này có thể đạt được vì dây riêng biệt của nó chỉ dành cho đồng hồ.
Dữ liệu MOSI, MISO và dây đồng hồ SCK được chia sẻ trên toàn bộ mạng, có nghĩa là nó có hệ thống dây đơn giản hơn.
Nó là định dạng chủ-nô, nhưng bất kỳ thiết bị nào cũng có thể là chủ và / hoặc nô lệ. Tuy nhiên, do các biến chứng chọn nô lệ, đối với hệ thống dây được chia sẻ (trong mạng), bạn chỉ nên sử dụng nó theo cách phân cấp (không giống như giao diện hai dây). I E. nếu bạn sắp xếp tất cả các thiết bị vào một cái cây, một thiết bị chỉ nên làm chủ cho con cái của nó và chỉ là một nô lệ cho cha mẹ của nó. Điều đó có nghĩa là trong chế độ nô lệ, một thiết bị sẽ luôn có cùng một chủ. Ngoài ra, để thực hiện điều này một cách chính xác, bạn cần thêm các điện trở vào MISO / MOSI / SCK cho chủ đầu nguồn, để nếu thiết bị giao tiếp xuôi dòng (khi không được chọn làm nô lệ), thông tin liên lạc sẽ không ảnh hưởng đến giao tiếp ở các phần khác của mạng (lưu ý số cấp độ bạn có thể thực hiện bằng cách sử dụng điện trở bị giới hạn, xem bên dưới để biết giải pháp tốt hơn bằng cả hai cổng SPI).
Bộ vi điều khiển AVR có thể tự động xác định trạng thái tín hiệu MOSI khi nó được chọn phụ và chuyển sang chế độ phụ (nếu ở chế độ chính).
Mặc dù nó có thể yêu cầu một mạng phân cấp, hầu hết các mạng có thể được tổ chức theo kiểu giống như cây, vì vậy nó thường không phải là một giới hạn quan trọng
Ở trên có thể được nới lỏng một chút, bởi vì mỗi vi điều khiển AVR hỗ trợ hai cổng SPI riêng biệt, vì vậy mỗi thiết bị có thể có các vị trí khác nhau trong hai mạng khác nhau.
Đã nói điều này, nếu bạn cần nhiều cấp độ trong cây / phân cấp của bạn (hơn 2), giải pháp trên sử dụng điện trở sẽ quá khó để làm việc. Trong trường hợp này, bạn nên thay đổi mạng SPI giữa mỗi lớp của cây. Điều này có nghĩa là mỗi thiết bị sẽ kết nối với con của nó trên một mạng SPI và cha mẹ của nó trên mạng SPI khác. Mặc dù điều đó có nghĩa là bạn chỉ có một cây kết nối duy nhất, nhưng lợi thế là một thiết bị có thể giao tiếp với cả một trong hai đứa trẻ và cha mẹ của nó cùng một lúc và bạn không có điện trở khó khăn (luôn khó chọn đúng giá trị) .
Bởi vì nó có dây MOSI và MISO riêng biệt, cả chủ và nô lệ có thể giao tiếp cùng một lúc, tạo cho nó một yếu tố tiềm năng tăng hai tốc độ. Cần thêm một pin cho lựa chọn nô lệ cho mỗi nô lệ bổ sung, nhưng đây không phải là một gánh nặng lớn, thậm chí 10 nô lệ khác nhau chỉ cần 10 chân phụ, có thể dễ dàng điều chỉnh trên một vi điều khiển AVR điển hình.
CAN không được hỗ trợ bởi vi điều khiển AVR mà bạn đã chỉ định. Vì có những lựa chọn tốt khác, có lẽ nó không quan trọng trong trường hợp này.
Khuyến nghị là SPI , vì nó nhanh, hệ thống dây điện không quá phức tạp và không yêu cầu điện trở kéo lên khó khăn. Trong trường hợp hiếm hoi khi SPI không đáp ứng đầy đủ nhu cầu của bạn (có thể trong các mạng phức tạp hơn), bạn có thể sử dụng nhiều tùy chọn (ví dụ: sử dụng cả hai cổng SPI, cùng với giao diện hai dây, cũng như ghép nối một số bộ vi điều khiển sử dụng vòng lặp USART!)
Trong trường hợp của bạn, sử dụng SPI có nghĩa là một cách tự nhiên, vi điều khiển có kết nối USB với máy tính có thể là chủ và nó có thể chuyển tiếp các lệnh có liên quan từ máy tính đến từng thiết bị phụ. Nó cũng có thể đọc các bản cập nhật / số đo từ mỗi nô lệ và gửi chúng đến máy tính.
Với 8 MHz và chiều dài dây 0,5m, tôi không nghĩ nó sẽ trở thành vấn đề. Nhưng nếu có, hãy cố gắng cẩn thận hơn về điện dung (giữ cho dây nối đất và tín hiệu quá gần, và cũng cẩn thận với các kết nối giữa các dây dẫn khác nhau), và cũng chấm dứt tín hiệu. Trong trường hợp không chắc là nó vẫn là một vấn đề, bạn có thể giảm tốc độ xung nhịp, nhưng tôi không nghĩ rằng điều đó là cần thiết.