Làm thế nào để tạo một bản sao Ambilight dựa trên nền tảng đồ họa?


10

Một số hình nền nhanh:
Ambilight là một hệ thống trên một số TV Philips phân tích thông tin màu sắc trên màn hình và sau đó đặt một số đèn LED ở mặt sau của màn hình để chiếu màu của màn hình lên tường. Đó là một hiệu ứng khá tiện lợi. Hiện tại có các bản sao của hệ thống này sử dụng PC để xử lý video và điều khiển đèn LED. Tôi thấy điều này là hơi quá mức - sử dụng toàn bộ máy để nhảy một số đèn LED ...

Tôi muốn sửa đổi NeTV của bunnie để xử lý không được mã hóaNguồn cấp dữ liệu video HDMI và lái một số đèn LED. Tôi biết NeTV đã được thiết kế cho các mục đích khác, nhưng tôi cảm thấy rằng nó có thể được sửa đổi để đạt được mục tiêu của mình. Tôi không quan tâm đến hệ thống con Linux cơ bản, giả mạo I2C, lớp phủ video, v.v. Tại thời điểm này, tôi không quan tâm đến việc làm việc với các luồng được mã hóa HDCP.

Sơ đồ NeTV

Mã nguồn NeTV

Sơ đồ khối đồ họa Sơ đồ khối NeTV
Đây là sơ đồ khối từ một trong các slide thuyết trình của bunnie.
Phần còn lại của bộ slide là ở đây .

Slide hiển thị HSYNC, VSYNC, PIXCLK
Slide này dường như ngụ ý rằng các pixel video trên thực tế đã được giải mã (không nhất thiết phải được giải mã ) .

Cuối cùng ... một số suy nghĩ và câu hỏi của tôi:

  1. Điều này có thể được thực hiện trên phần cứng mong muốn của tôi? Nếu "có", tiếp tục! Nếu "không", hãy nói cho tôi biết tôi cần gì hơn nữa!

  2. Tôi có thể xử lý thông tin video mà không cần bộ nhớ ngoài không? Không có bộ nhớ mà FPGA có thể truy cập trực tiếp, theo như tôi có thể nói. Điều này có lẽ phụ thuộc vào thuật toán mà tôi sử dụng để xử lý dữ liệu video - để sử dụng càng ít RAM Khối RAM càng tốt, tôi đoán tôi sẽ muốn sử dụng một số loại 'tổng hợp lặp' của các pixel đi vào, thay vì lưu trữ toàn bộ khung dữ liệu hình ảnh và sau đó lấy trung bình các màu. Bất kỳ gợi ý liên quan đến việc thực hiện thuật toán này? Làm thế nào để bắt đầu với điều này là trở ngại lớn nhất của tôi.

  3. Tôi đã điều tra mã nguồn về nơi tôi nên 'khai thác' dữ liệu video.
    Điều này trông giống như điểm thích hợp:
    Sơ đồ khối của bộ giải mã DVI
    Tôi biết, hình ảnh này dài - đó là điều tốt nhất tôi có thể làm trong khi làm cho nó rõ ràng để đọc. Đổ lỗi cho công cụ của Xilinx cho điều đó!
    Điều này dường như lấy dữ liệu TMDS và xuất 8 bit cho mỗi màu.

  4. Tôi nên có một số loại máy trạng thái cho trình điều khiển LED - mỗi chu kỳ đồng hồ, nó sẽ lấy thông tin pixel từ bất kỳ mô-đun nào tôi tạo để xử lý dữ liệu video.

Xin lỗi nếu điều này dài dòng hoặc lâu dài - Tôi đang cố gắng thấu đáo ... Tôi chỉ cần một số trợ giúp để khởi đầu với điều này. Đây là nỗ lực đầu tiên của tôi tại một dự án FPGA - một số có thể nói nó quá khó đối với người mới bắt đầu nhưng tôi nói ... phải bắt đầu ở đâu đó :) Cảm ơn đã đọc.


1
NeTV không giải mã được luồng HDMI. Nó tuân theo quy trình đàm phán HDCP và mã hóa luồng mới để khớp; Tôi không nghĩ bạn sẽ có thể lấy thông tin video từ việc này.
akohlsmith

Bạn có thể vui lòng gửi (một liên kết đến) sơ đồ liên quan? Ngoài ra, việc khai báo các mô-đun HDL có liên quan sẽ giúp ích.
drxzcl

1
@AndrewKohlsmith, vậy lớp phủ được thực hiện ở cuối TV? Ồ, tôi không biết HDMI có thể làm điều đó!
drxzcl

1
Tôi không chắc liệu bạn có thể làm mọi thứ bạn cần mà không cần sử dụng bộ đệm khung bộ nhớ ngoài hay không, nhưng dù sao, bạn đang dự định sử dụng phân tích màu nào? Nếu là FFT, thì sẽ mất một chút thời gian và tôi không chắc liệu ánh sáng xung quanh có quá trễ với màu video hay không. Trước tiên tôi muốn thử lấy dữ liệu từ HDMI và kiểm tra xem Bạn có thể phân tích nó không. Ví dụ, làm một bộ lọc thông thấp và đưa ra kết quả.
Socrates

1
Tôi nhớ đã đọc lại điều này khi NeTV xuất hiện. Theo bài đăng đó, Bunnie sử dụng sơ đồ lớp phủ phức tạp không yêu cầu giải mã HDMI nguồn; anh ta chỉ mã hóa lại khi cần thiết. Không có giải mã các luồng mã hóa.
mng

Câu trả lời:


7

Tôi hoàn toàn dựa vào câu trả lời của mình dựa trên mã và tài liệu của mô-đun dvi_decoder và cho rằng nó thực sự hoạt động như quảng cáo. Tệp này dường như là một bản sao (đã sửa đổi?) Của IP trong ứng dụng ghi chú Kết nối video bằng cách sử dụng TMDS I / O trong Spartan-3A FPGA và / hoặc Thực hiện Giao diện video TMDS trong Spartan-6 FPGA . Các ghi chú ứng dụng này chứa đầy các chi tiết quan trọng và tôi khuyên bạn nên đọc kỹ.

Như bạn đã chỉ ra trong câu hỏi, tôi sẽ cho rằng bạn đang xử lý các luồng không được mã hóa, đó là các luồng không phải HDCP. Tôi khá chắc chắn rằng thông tin trong dự án NeTV có thể được điều chỉnh để giải mã HDCP, nhưng nó sẽ liên quan đến một lượng công việc bổ sung không hề nhỏ và dựa trên cơ sở pháp lý có thể nghi ngờ tùy thuộc vào thẩm quyền của bạn.

Có vẻ như bạn sẽ có thể có được dữ liệu bạn cần từ các đầu ra của khối dvi_decoder. Thông tin khối đầu ra 24-bit màu bằng cách sử dụng dây điện red, greenblue, đồng bộ hóa với đồng hồ điểm ảnh pclk. Đầu rahsyncvsynccảnh báo người dùng đến cuối dòng / màn hình tương ứng. Nói chung, bạn sẽ có thể thực hiện trung bình khi sử dụng các đầu ra này.

Bạn sẽ cần một số logic cơ bản để dịch hsync, vsyncvà đồng hồ điểm ảnh thành một (X, Y) địa điểm. Chỉ cần khởi tạo hai quầy, một cho Xvà một cho Y. Tăng Xở mỗi đồng hồ pixel. Đặt lại Xvề 0 tại hsync. Tăng Yở mỗi hsync. Cài lạiY về 0 ở mọi vsync.

Sử dụng red, green, blue, XY, bạn có thể làm trên trung bình ruồi. Bằng cách so sánh vớiXY, bạn có thể xác định hộp nào mỗi pixel riêng lẻ sẽ đóng góp vào, nếu có. Tính tổng các giá trị màu vào một thanh ghi tích lũy. Để có được giá trị trung bình, bạn cần chia giá trị trong thanh ghi cho số pixel. Nếu bạn thông minh, bạn sẽ đảm bảo số pixel là sức mạnh của hai. Sau đó, bạn có thể kết nối các MSB của thanh ghi với bất cứ thứ gì bạn muốn lái.

Bởi vì chúng tôi muốn điều khiển màn hình trong khi thực hiện tích lũy, chúng tôi sẽ cần thực hiện đệm đôi. Vì vậy, chúng ta sẽ cần hai thanh ghi cho mỗi hộp cho mỗi thành phần. Nếu bạn đang sử dụng chuỗi 25 led, điều này có nghĩa là bạn sẽ cần 25 * 3 * 2 = 150 thanh ghi. Đó là một chút, vì vậy bạn có thể muốn sử dụng khối ram thay vì đăng ký. Tất cả phụ thuộc vào yêu cầu chính xác của bạn, thử nghiệm!

Tôi giả sử bạn sẽ lái một chuỗi led giống như chuỗi được sử dụng trong bộ dự án adafbean ban đầu . Bạn sẽ có thể tìm ra cách điều khiển nó từ các giá trị trong các thanh ghi khá dễ dàng bằng SPI.

Mô-đun dvi_decoder là một bộ kit khá phức tạp. Tôi đề nghị bạn nghiên cứu các ghi chú ứng dụng một cách chi tiết.

Bên cạnh đó, nếu bạn chưa mua NeTV để sử dụng trong dự án này, tôi khuyên bạn cũng nên xem qua bảng Atlys của Digilent . Với hai đầu vào HDMI và hai đầu ra HDMI, nó dường như được thiết kế riêng cho các dự án loại này.


NP, cảm ơn câu hỏi tuyệt vời. Nếu bạn gặp phải bất kỳ vấn đề cụ thể nào với dự án này, vui lòng đăng lại.
drxzcl

Btw, (và điều này là cmpeletely nằm ngoài phạm vi của câu hỏi) bạn đã xem xét việc điều khiển từ một hệ thống vi điều khiển tương đối khó khăn chưa? Một cái gì đó như RaspberryPi rẻ hơn khoảng 6 lần và có thể lái các đèn led và hiển thị video cùng một lúc.
drxzcl

vẫn đang chờ công cụ JTAG của tôi xuất hiện để tôi có thể gỡ lỗi với ChipScope ... sẽ chấp nhận câu trả lời này; nó đưa ra một cách tiếp cận cơ bản để giải quyết vấn đề này. @drzxcl tôi đã sở hữu netv. RaspPi là một gợi ý thú vị, nhưng không thể sử dụng hdmi làm nguồn video.
dext0rb

Bạn đã bao giờ có được điều này để làm việc? Tôi rất thích xem một bài viết / video!
drxzcl

Không thật sự lắm. : | Tôi đã tạo ra một trình điều khiển LED nửa khẳng định , nhưng không có thời gian để vào nó nhiều hơn. Hy vọng sớm.
dext0rb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.