Chúng tôi đã bảo hiểm bộ điều khiển Pad nút RGB mới của Sparkfun vài tuần trước. Đây là một bản sao đầy đủ màu của giao diện Monome; Một lưới 4 × 4 của các nút với đèn LED Tri-Color bên dưới. Mỗi đèn LED có 24 bit kiểm soát màu, với nhiều hơn 16 triệu kết hợp màu. Lên đến 10 tấm có thể được xích lại với nhau để tạo lưới nút đáng kể, như bàn Tetris của Sparkfun. Trước đây chúng tôi đã sử dụng một phiên bản nhỏ hơn trong khóa kết hợp RGB của chúng tôi.
Chúng tôi đã yêu cầu SparkFun gửi cho chúng tôi phiên bản SPI của bộ điều khiển nút để kiểm tra. Đây là một sản phẩm mới được phát triển tại nhà tại Sparkfun, với phần cứng và phần mềm nguồn mở. Đọc về trải nghiệm của chúng tôi Giao diện bảng này dưới đây.
Bộ điều khiển PAD nút 4 × 4 RGB SPI (SparkFun # Wig-09022, $ 39,95)
Bộ điều khiển nút Pad là một PCB trần, chúng tôi cũng đã nhận được một nút Pad (Sparkfun # com-07835, $ 9,95) và hai trong số mỗi viền (Sparkfun # com-08747, # com-08746, $ 3,95). Phiên bản SPI Chúng tôi đang làm việc với có thể được điều khiển trực tiếp bởi một vi điều khiển hoặc bằng USB ‘Master’. Phiên bản bộ điều khiển USB có bộ chuyển đổi nối tiếp usb-> usb-> bổ sung cho kết nối PC.
Khi Pad nút đến, chúng tôi ngay lập tức ngồi xuống với biểu dữ liệu và cố gắng giao diện bảng với giao diện nối tiếp Cướp biển Bus Universal của chúng tôi. Giao thức được mô tả trong phiên bản 1 của biểu dữ liệu không hoạt động.
Sparkfun mở nguồn dự án này, vì vậy chúng tôi đã xác định giao thức giao diện chính xác từ mã nguồn cho Pad Pad SPI (ZIP) và bộ điều khiển USB Pad (ZIP). Chúng tôi đã tìm ra hầu hết các giao thức từ nguồn, nhưng nó vẫn nhận được sự giúp đỡ từ các kỹ sư của Sparkfun để khám phá một số điểm không có giấy tờ, mịn hơn của hội đồng quản trị. Phiên bản 2 của biểu dữ liệu (PDF) miêu tả chính xác giao thức giao diện.
Kết nối
Bus Pirate.
Nút pad.
Miso.
Miso.
Mosi.
Mosi.
Cái đồng hồ
Sck.
Cs.
Cs.
+ 5Volts.
Vcc.
Gnd.
Gnd.
Các tín hiệu SPI của Pad được mô tả khi chúng liên quan đến vi điều khiển trên máy bay, điều này trái ngược với ký hiệu thông thường. Tín hiệu Mosi (Master Out, Slave In) thực sự là đầu ra dữ liệu của bảng và MISO (Master In, Slave Out) là đầu vào dữ liệu.
Chúng tôi đã thử nghiệm PAD nút bằng Cướp biển xe buýt, nhưng các hiệu trưởng cơ bản tương tự áp dụng cho bất kỳ mã vi điều khiển tùy chỉnh nào. Hội đồng quản trị chạy ở 5Volts, vì vậy chúng tôi cung cấp năng lượng cho nó từ nguồn cung cấp năng lượng 5Volt của Bus Pirate. Giao diện SPI hoạt động ở mức logic 5Volt, vì vậy chúng tôi đã kết nối các điện trở kéo lên của Bus Pirate với nguồn điện 5Volt và cho phép chúng trên tất cả các đường tín hiệu.
Chúng tôi giao tiếp với bảng nút bằng thư viện RAW3Wire của Bus Pirate. RAW3Wire là một thư viện SPI phần mềm với các hoạt động thông minh bit. Thư viện SPI phần cứng chỉ cho phép các hoạt động byte đầy đủ không đủ chi tiết để giao tiếp bảng. Chúng tôi đặt tên cướp biển trong chế độ RAW3Wire (tùy chọn menu M) và chọn tùy chọn PIN HIZ vì các điện trở kéo lên sẽ giữ xe buýt ở 5volts.
RAW3WIRE> L <-configure Bit Đặt hàng 1. MSB trước 2. LSB đầu tiên Chế độ> 2 <-Thêm bit đáng kể đầu tiên LSB SET: Bit ít nhất Sig bit đầu tiên Raw3wire> W .
Nút Pad giao tiếp bit đáng kể nhất trước, vì vậy chúng tôi cũng định cấu hình thư viện để giao tiếp LSB trước tiên. Cuối cùng, chúng tôi đã đánh thủ đô ‘W’ để kích hoạt nguồn cung cấp năng lượng của Bus Pirate. Bảng nút sẽ nhấp nháy mỗi màu trong giây lát như một phần của tự kiểm tra sức mạnh của nó.
Thiết lập bảng đơn / nhiều nút
Mỗi bảng cần được cấu hình để sử dụng đơn hoặc nhiều bảng. Các bảng được lập trình sẵn để vận hành một bảng, nhưng đó có thể là một ý tưởng tốt để đặt cấu hình dù sao đi nữa. Cấu hình bảng được lưu trữ vĩnh viễn trong EEPROM, vì vậy nó chỉ phải được thực hiện một lần.
RAW3Wire> [\ _ <-Take tất cả các tín hiệu thấp Đã bật CS <-cs được bật là 0volts Đồng hồ, 0. Đầu ra dữ liệu, 0 Raw3wire >.
Một chuỗi đặc biệt đặt bảng ở chế độ cấu hình. Bắt đầu với tất cả các đường tín hiệu thấp (] \ _).
RAW3WIRE> – ^ 1 1 <-SET Hoạt động bảng đơn Đầu ra dữ liệu, 1 <-Data cao 0x01 đồng hồ đánh dấu <-one đồng hồ đánh dấu Viết: 0x01 <-config tùy chọn 1, số bảng Viết: 0x01 <-set Số lượng bảng Raw3wire> w <-small 'w', tắt nguồn Nguồn cung điện áp tắt Raw3wire> W <-Capital 'W', bật nguồn Vật tư điện áp trên Raw3wire >.
Để nhập chế độ cấu hình, hãy lấy dòng dữ liệu cao (-) và gửi một xung đồng hồ (^), nhưng để lại chip chọn thấp. Bảng hiện đã sẵn sàng để chấp nhận cài đặt cấu hình.
Byte đầu tiên được gửi sau khi nhập chế độ cấu hình, hãy nói với bảng cài đặt để sửa đổi. Hiện tại, chỉ có số lượng bảng có thể được cấu hình (0x01). Tiếp theo, gửi số bảng được kết nối, từ 1 đến 10. Chúng tôi đã gửi 1 vì chúng tôi đang giao tiếp một bảng duy nhất. Đặt lại bảng và nó sẽ sáng đèn LED tương ứng với số bảng được lập trình.
Đặt màu sắc và đọc trạng thái nút
Bây giờ chúng tôi đã sẵn sàng để gửi dữ liệu màu vào bảng và đọc trạng thái nút. Đầu tiên, lưu ý rằng tín hiệu CS (CHIA SẺ) là tín hiệu đối diện với các quy ước bình thường. Thông thường CS kích hoạt một con chip khi tín hiệu là loW (0volts) và nhàn rỗi khi tín hiệu cao (5volts); Điều này thường được ký hiệu bởi / cs, #cs hoặc! cs. Thay vào đó, bộ điều khiển nút đang hoạt động khi CS cao.
Giao dịch 64byte đặt màu LED và lấy trạng thái nút. 16bytes đầu tiên chương trình Mức màu đỏ cho mỗi đèn LED, theo sau là 16byte màu xanh lá cây và 16byte màu xanh. Kết thúc bằng cách đọc 16Bytes từ bảng để lấy trạng thái của từng nút. Các nút dữ liệu được gửi dưới dạng 0x00 nếu nhấn và 0xFF nếu không nhấn. Datasheet khuyến nghị độ trễ 400us giữa việc ghi các khung màu và đọc dữ liệu nút, nhưng cướp biển xe buýt đủ chậm đến mức chúng ta sẽ không lo lắng về điều đó.
Giao thức đủ đơn giản, nhưng có một cái bắt lớn. Dòng đồng hồ phải cao trước khi nâng CS hoặc bytestream sẽ tắt 1 bit. Vì lý do này, nhiều mô-đun SPI phần cứng sẽ không hoạt động với bảng. Đây không phải là vấn đề nếu vi điều khiển của bạn cho phép bạn xoay chiều các chân được điều khiển bởi một mô-đun phần cứng, nhưng micros chúng ta đã làm việc với không cho phép điều này.
RAW3Wire> /] 255: 16 255: 16 255: 16 R: 16 [
Đồng hồ, 1 <-Clock phải cao trước khi nuôi cs
Cs vô hiệu hóa <-cs thành 5volts, đối diện sử dụng bình thường
Số lượng lớn viết 0xFF, 0x10 lần <đèn led -red
Số lượng lớn viết 0xFF, 0x10 lần <-green led
Số lượng lớn viết 0xFF, 0x10 lần <--LEDS LEDS
Số lượng lớn đọc 0x10 byte: <-Đọc trạng thái nút
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
CS đã bật <-cs thành 0volts, đối diện sử dụng bình thường
Raw3wire >.
Lệnh này đặt mọi màu của mỗi màu đã dẫn đến đầy đủ và đọc lại các byte trạng thái 16 nút.
Đầu tiên chúng tôi đặt đồng hồ cao (/), và chỉ sau đó chúng tôi có thể nâng CS sang 5Volts (]) và bắt đầu giao dịch dữ liệu. 255: 16 là một lệnh lặp đi lặp lại gửi giá trị 255 mười sáu lần. Vì mỗi kênh màu có 8 bit kiểm soát cường độ, 255 là 100%. Chúng tôi gửi 255 tổng cộng 48 lần, một lần cho mỗi màu của mỗi đèn LED. Cuối cùng, chúng tôi lấy được một khung hình ảnh 16Byte (R: 16) và CS thấp hơn để kết thúc giao dịch ([). Các giá trị nút là tất cả 0xFF, chỉ ra rằng không có nút nào được nhấn.
Raw3wire> /] 0:16 0:16 128: 16 R: 16 [
Đồng hồ, 1.
Cs bị vô hiệu hóa
Số lượng lớn viết 0x00, 0x10 lần
Số lượng lớn viết 0x00, 0x10 lần
Số lượng lớn viết 0x80, 0x10 lần <-all màu xanh đến 50%
Số lượng lớn đọc 0x10 byte:
0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
CS đã bật
Raw3wire >.
Ở đây, chúng tôi đặt mức độ màu xanh của mọi đèn LED đến 50% (128) và tắt tất cả các màu khác. Đầu ra nút hiện hiển thị nút 0 được nhấn.
RAW3Wire> /] 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0:16 0:16 R: 16 [
Đồng hồ, 1.
Cs bị vô hiệu hóa
Viết: 0x00 <- Đèn LED đỏ 0, tắt
...