Giao Diện SPI Và Arduino

Mục lục:

Giao Diện SPI Và Arduino
Giao Diện SPI Và Arduino

Video: Giao Diện SPI Và Arduino

Video: Giao Diện SPI Và Arduino
Video: Arduino Workshop - Chapter 5 - Using SPI 2024, Có thể
Anonim

Chúng tôi nghiên cứu giao diện SPI và kết nối thanh ghi dịch chuyển với Arduino, chúng tôi sẽ truy cập bằng giao thức này để điều khiển các đèn LED.

Giao diện SPI
Giao diện SPI

Cần thiết

  • - Arduino;
  • - đăng ký ca 74HC595;
  • - 8 đèn LED;
  • - 8 điện trở 220 Ohm.

Hướng dẫn

Bước 1

SPI - Giao diện ngoại vi nối tiếp hay "Giao diện ngoại vi nối tiếp" là một giao thức truyền dữ liệu đồng bộ để giao tiếp giữa thiết bị chính với các thiết bị ngoại vi (phụ). Master thường là một vi điều khiển. Giao tiếp giữa các thiết bị được thực hiện qua bốn dây, đó là lý do tại sao SPI đôi khi được gọi là "giao diện bốn dây". Những chiếc lốp này là:

MOSI (Master Out Slave In) - đường truyền dữ liệu từ thiết bị chủ đến các thiết bị phụ;

MISO (Master In Slave Out) - đường truyền từ nô lệ đến chủ;

SCLK (Serial Clock) - xung clock đồng bộ hóa được tạo ra bởi master;

SS (Slave Select) - dòng lựa chọn thiết bị phụ; khi ở dòng "0", nô lệ "hiểu" rằng nó đang được truy cập.

Có bốn chế độ truyền dữ liệu (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), do sự kết hợp của phân cực xung đồng hồ (chúng tôi làm việc ở mức CAO hoặc THẤP), Phân cực đồng hồ, CPOL và pha của xung đồng hồ (đồng bộ hóa trên cạnh tăng hoặc giảm của xung đồng hồ), Pha đồng hồ, CPHA.

Hình bên cho thấy hai tùy chọn để kết nối các thiết bị sử dụng giao thức SPI: độc lập và phân tầng. Khi được kết nối độc lập với bus SPI, master giao tiếp với từng slave riêng lẻ. Với một tầng - các thiết bị phụ được kích hoạt luân phiên, trong một tầng.

Các loại kết nối SPI
Các loại kết nối SPI

Bước 2

Trong Arduino, các bus SPI nằm trên các cổng cụ thể. Mỗi bảng có sự phân công pin riêng. Để thuận tiện, các chân được nhân đôi và đặt trên một đầu nối ICSP (Lập trình nối tiếp mạch) riêng biệt. Xin lưu ý rằng không có chân chọn nô lệ trên đầu nối ICSP - SS, vì nó được giả định rằng Arduino sẽ được sử dụng làm chủ trên mạng. Nhưng nếu cần, bạn có thể gán bất kỳ chân kỹ thuật số nào của Arduino dưới dạng SS.

Hình bên cho thấy sự phân công tiêu chuẩn của các chân cho các bus SPI cho Arduino UNO và Nano.

Triển khai SPI trong Arduino
Triển khai SPI trong Arduino

Bước 3

Một thư viện đặc biệt đã được viết cho Arduino thực hiện giao thức SPI. Nó được kết nối như thế này: ở đầu chương trình, thêm #include SPI.h

Để bắt đầu làm việc với giao thức SPI, bạn cần thiết lập cài đặt và sau đó khởi tạo giao thức bằng thủ tục SPI.beginTransaction (). Bạn có thể thực hiện việc này bằng một hướng dẫn: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Điều này có nghĩa là chúng tôi khởi tạo giao thức SPI ở tần số 14 MHz, truyền dữ liệu bắt đầu từ MSB (bit quan trọng nhất), ở chế độ "0".

Sau khi khởi tạo, chúng ta chọn thiết bị tớ bằng cách đưa chân SS tương ứng vào trạng thái THẤP.

Sau đó, chúng tôi chuyển dữ liệu đến thiết bị phụ bằng lệnh SPI.transfer ().

Sau khi truyền xong, chúng ta đưa SS về trạng thái CAO.

Làm việc với giao thức kết thúc bằng lệnh SPI.endTransaction (). Bạn nên giảm thiểu thời gian thực hiện truyền giữa các lệnh SPI.beginTransaction () và SPI.endTransaction () để không có sự chồng chéo nếu thiết bị khác cố gắng khởi tạo truyền dữ liệu bằng các cài đặt khác nhau.

Truyền SPI
Truyền SPI

Bước 4

Chúng ta hãy xem xét ứng dụng thực tế của giao diện SPI. Chúng tôi sẽ chiếu sáng các đèn LED bằng cách điều khiển thanh ghi dịch chuyển 8-bit thông qua bus SPI. Hãy kết nối thanh ghi dịch chuyển 74HC595 với Arduino. Chúng tôi kết nối với mỗi đầu ra trong số 8 đầu ra thông qua một đèn LED (thông qua một điện trở giới hạn). Sơ đồ được thể hiện trong hình.

Kết nối thanh ghi shift 74HC595 với Arduino
Kết nối thanh ghi shift 74HC595 với Arduino

Bước 5

Hãy viết một bản phác thảo như vậy.

Đầu tiên, hãy kết nối thư viện SPI và khởi tạo giao diện SPI. Hãy xác định chân 8 là chân lựa chọn nô lệ. Hãy xóa sổ đăng ký shift bằng cách gửi giá trị "0" cho nó. Chúng tôi khởi tạo cổng nối tiếp.

Để thắp sáng một đèn LED cụ thể bằng thanh ghi dịch chuyển, bạn cần áp dụng số 8 bit cho đầu vào của nó. Ví dụ: để đèn LED đầu tiên sáng lên, chúng tôi cung cấp số nhị phân 00000001, cho đèn thứ hai - 00000010, cho đèn LED thứ ba - 00000100, v.v. Các số nhị phân này ở dạng ký hiệu thập phân tạo thành chuỗi sau: 1, 2, 4, 8, 16, 32, 64, 128 và là lũy thừa của hai từ 0 đến 7.

Theo đó, trong vòng lặp () theo số lượng đèn LED, chúng tôi tính toán lại từ 0 đến 7. Hàm pow (cơ sở, độ) tăng 2 lên công suất của bộ đếm chu kỳ. Các bộ vi điều khiển hoạt động không chính xác lắm với các số thuộc kiểu "kép", vì vậy để chuyển kết quả thành số nguyên, chúng ta sử dụng hàm round (). Và chúng tôi chuyển số kết quả vào sổ đăng ký ca. Để rõ ràng, màn hình cổng nối tiếp hiển thị các giá trị thu được trong quá trình hoạt động này: một giá trị chạy qua các chữ số - đèn LED sáng lên theo hình sóng.

Phác thảo để điều khiển thanh ghi ca qua xe buýt SPI
Phác thảo để điều khiển thanh ghi ca qua xe buýt SPI

Bước 6

Các đèn LED lần lượt sáng lên và chúng ta quan sát thấy một "làn sóng" đèn đang di chuyển. Các đèn LED được điều khiển bằng cách sử dụng một thanh ghi dịch chuyển mà chúng tôi đã kết nối qua giao diện SPI. Kết quả là, chỉ có 3 chân Arduino được sử dụng để điều khiển 8 đèn LED.

Chúng tôi đã nghiên cứu ví dụ đơn giản nhất về cách Arduino hoạt động với bus SPI. Chúng tôi sẽ xem xét kết nối của các thanh ghi shift chi tiết hơn trong một bài báo riêng biệt.

Đề xuất: