[Matrix LED] Bài 16: Hiển thị hình ảnh trên LED ma trận P5 FULL

pwm led matrix

Vui lòng đọc tất cả bài trước đó trong tutorial Ma trận LED thì các bạn mới hiểu bài này

Tiếp tục bài này, mình sẽ demo hiển thị hỉnh bất kì lên tấm led ma trận P5 có độ phân giải 64×32 pixel. Các bạn chuẩn bị project như đã làm ở bài 15 nhé

Trong bài trước, mình đã giới thiêu cách tạo PWM qua kĩ thuật điều chế mã nhị phân ( hay còn gọi là BAM) bằng cách căn chỉnh thời gian tồn tại của các bit. Phương pháp này có 1 nhược điểm điểm là nếu cái hàm ngắt quét led kia chạy lâu quá thì nó sẽ ảnh hưởng tới các bit1 và bit0 vì chúng có thời gian tồn tại rất thấp. Mình đã thử dùng logic để đo và thấy hầy như bit0,bit1 đều có timing dài bằng bit2. Điều này khiến cho màu sắc thực tế chúng ta tạo ra bị sai lệch đi khá nhiều làm ảnh hưởng tới chất lượng hình ảnh

Bây giờ mình sẽ giới thiệu 1 phương pháp khác, thay vì tạo ra các thời gian tồn tại khác nhau ở mỗi bit, mình sẽ cho các khoảng thời gian ở mỗi bit đều như nhau nhưng thay đổi giá trị PWM đưa vào chân OE. Tức là:
Bit 0: Chân OE sẽ có điện áp X
Bit 1: Chân OE sẽ có điện áp 2X
Bit 2: Chân OE sẽ có điện áp 4X
Bit 4: Chân OE sẽ có điện áp 8X
Bit 5: Chân OE sẽ có điện áp 16X
……………..Tương tự………………….

Về cơ bản, chúng ta sẽ tạo 1 ngắt timer đều đặn và khi vào ngắt thì thay đổi giá trị pwm ở chân OE, khá đơn giản phải không

Demo hiển thị ảnh

Trong project này, mình sẽ sử dụng mảng ma trận 1 chiều thay vì mảng đa chiều vì mảng 1 chiều có tính linh hoạt hơn

Tạo 2 Buff quen thuộc

Tạo thêm 1 array để chứa các giá trị pwm để nạp vào chân OE

Chương trình ngắt sẽ thay đổi 1 chút so với

Và chương trình ngắt quét led

Nói chung, chương trình chỉ thay đổi 1 chút xíu so với bài 15

Các bạn có thể tải FULL Project tại đây để tham khảo nhé !
https://drive.google.com/file/d/1Yz1m9uagFqZLKWiKq51uBFq5o_ym0jl4/view?usp=sharing

Trong ví dụ này, để hình ảnh hiện được đẹp nhất, mình đã nâng số bit pwm lên tới 8 bit. Điều này sẽ làm giảm tần số quét led đáng kể và trông sẽ hơi nháy 1 chút

Hiển ảnh

Lên mạng và tìm ảnh 1 em xinh tưới :P, mở ảnh bằng phần mềm vẽ Paint để cắt bớt ảnh và resize ảnh về 64×32 pixel nhé

crop ảnh
Resize ảnh

Mở tool chuyển đổi ảnh thành max HEX mà mình đã chia sẻ ở bài 15 hoặc tải tại đây

Do mình sử dụng pwm 8bit nên mình chọn RGB24 và thông số gamma để là 255->255. Hệ số gamma để khoảng 2.3 tới 3.5 tùy các bạn nhé. Tích chọn OK gamma để sử dụng hiệu chỉnh gamma

Sau đó copy mã hex nhận được vào mảng Buffer RGB

Và đây là kết quả của mình

pwm led matrix

Đương nhiên với cái độ phân giải 64×32 pixel thì không thể cho ra 1 bức ảnh “nuột” được ! Trong các bài tiếp chúng ta sẽ nâng độ phân giải lên cao hơn !

 

Từ tác giả:

Nếu có bất kì thắc mắc nào trong bài viết, vui lòng để lại comment dưới mỗi bài ! Mình sẽ không trả lời thắc mắc của các bạn ở facebook hay email !

Nếu trong phần code bạn nhìn thấy nhưng thứ kiểu như &amp; thì đó là lỗi hiển thị, cụ thể 3 kí tự < > & bị biến đổi thành như thế
&amp; là &
&lt;  là <
&gt; là >

Giới thiệu Đào Nguyện 80 bài viết
DIY,chế cháo, viết blog chia sẽ kiến thức về lập trình,điện tử - IoT. Rất mong được giao lưu, kết bạn với các bạn cùng đam mê. Địa chỉ Facebook: https://www.facebook.com/nguyendao207

3 bình luận

Đã đóng bình luận.