[Matrix LED] Bài 7: Tìm hiểu Module Led Ma Trận P10 – lập trình led ma trận

module led ma tran P10
module led ma tran P10

Phần 1 : Tìm hiểu module P10 và cách giao tiếp với vi điều khiển

 Ảnh mặt trước của module led matrix P10

Ảnh mặt sau của module led matrix P10

Module led ma trận P10 kích cỡ 16×32. Mỗi led là 1 pixel cách nhau 1 centi mét. Cấu tạo của module này bao gồm :

  • 16 IC ghi dịch 8 bit 74hc595
  • 1 IC ghi đệm dòng 74hc245
  • 1 IC vào 3 ra 8 74hc138
  • 4 con FET kích 16 hàng ( 1 còn kéo 4 hàng)
  • 2 jump kết nối 2×8. 1 cái là đầu vào dữ liệu, 1 cái là đầu ra ( để mắc nối tiếp với tấm khác)

Sơ đồ chân và chức năng

  • OE : Đây là chân điều khiển IC 138. Nếu nó OE=0 thì IC 138 không hoạt động. Tất cả các hàng đều không sáng ( cả biển LED sẽ tắt). Còn OE kéo lên 1 thì biển led sẽ được phép sáng (nó giống như 1 cái actomat tổng vậy). Như vậy chân này có 2 nhiệm vụ là quét led, và băm xung PWM điều khiển độ sáng của bảng LED.
  • 2 chân A và B : 2 chân này sẽ điều khiển ngõ ra của ic 138, thực ra nó còn chân C nhưng chân này được nối thằng xuống mass rồi (ta không sử dụng chân này). Khi A=B=0 thì hàng 1,5,9,13 sẽ được tích cực. Khi A=1,B=0 thì hàng 2,6,10,14 được tích cực. Khi A=0, B=1 thì hàng 3,7,11,15 được tích cực. Khi A=B=1 thì hàng 4,8,12,16 được tích cực. Đọc đến đây nếu đã biết qua về quét LED chắc bạn sẽ hiểu ngay module này chỉ quét 4 phát là quét xong cả bảng. ( 1 phát quét có 4 hàng sáng, 16 hàng nên có 4 lần quét)
  • CLK : Chân tạo xung đẩy dữ liệu vào HC595
  • SCLK : Chân tạo xung xuất dữ liệu trong HC595 ra ngoài
  • DATA (R) : Chân dữ liệu

Cái jump 2×8 đối diện nó cũng có sơ đồ y chang và các chân OE, A, B, CLK, SCLK của 2 jump thực chất nối thông với nhau. Duy chỉ có chân DATA là khác nhau. DATA của jump 2×8 (vào) thì nó nối với chân 14 của 74hc595 thứ 1. Còn DATA của cái jump 2×8 (ra) nó nối với chân 9 của con 74hc595 thứ 16

Các hàng của Module được kích bằng 4 con FET. Cấu tạo của module này khá đơn giản thế thôi. Bây giờ mình sẽ trình bày về chiều đi của dữ liệu. Các bạn nhìn vào mặt LED của module. Dữ liệu sẽ đi từ phải sang, từ trên xuống.

Ảnh trên thể hiện chiều đi của dữ liệu. Mỗi ô vuông là 1 ic 74HC595 và được đánh số từ 1 đến 16. Mỗi 1 ic như trên sẽ điều khiển 4 hàng led và 8 cột led. Ví dụ ic số 1 sẽ điều khiển được 4 hàng đầu 8 cột led ngoài cùng bên tay phải. Con số 2 sẽ điều khiển 4 hàng led tiếp theo của 8 cột ngoài cùng bên phải. Cứ thế các bạn tự tính tiếp nhé.

Phương pháp quét LED

Do module quét 1/4. Mà tổng số led của module 16×32 là 512 led nên trong 1 thời điểm ta điều khiển 512*1/4 = 128 LED
Nói đơn giản bạn phải đẩy vào 128 bit dữ liệu (16 byte) cho 1 phát quét

  • Phát 1 : Tắt OE . Gửi 16 byte vào HC595 -> Bật sáng hàng 1 5 9 13 bằng cách đưa A=B=0, OE=1
  • Phát 2: Tắt OE . Gửi 16 byte tiếp theo vào HC595 -> Bật sáng hàng 2 6 10 14 bằng cách đưa A=1;B=0, OE=1
  • Phát 3: Tắt OE . Gửi 16 byte tiếp theo vào HC595 -> Bật sáng hàng 3 7 11 15 bằng cách đưa A=0;B=1, OE=1
  • Phát 4: Tắt OE . Gửi 16 byte tiếp theo vào HC595 -> Bật sáng hàng 4 8 12 16 bằng cách đưa A=1;B=1, OE=1

Thế là xong 1 chu kì quét rồi đó. Do quét 1/4 nên ta cần 4 phát. Tương tự 1/8 thì 8 phát và 1/16 thì 16 phát. Lấy nghịch đảo chu kì quét này ta sẽ có tần số quét ( tần số làm tươi) hãy chú ý tính toán sao cho tần số nằm ở mức tối thiểu 120Hz cho đẹp nhé. ( tức là chu kì tối đa cho 1 lần quét là 8ms)

Lập trình điều khiển

OK bây giờ mình cùng thử làm hiện 1 chữ gì đó lên một tấm Matrix P10 nhé. Code dưới này chung chung không dành cho bất kì vi điều khiển nào cả, mục đích là để các bạn hiểu cách để điều khiển tấm LED này

Tạo 1 mảng buffer display có tên là Buffer_display[16][4]. Trong đó 16 số chính là số hàng. Và 4 biến cho 32 cột ( vì mỗi biến chứa 8 bit nên cần 4 biến là đủ rồi )

Tiếp đến mình sẽ xây dựng hàm phục vụ điều khiển IC 138 quét hàng

Khi mình gọi hang(1); thì nó sẽ là sáng 4 hàng 1 5 9 13. Tương tự với các hàng khác.

Tiếp theo là hàm gửi dữ liệu vào IC ghi dịch HC595

Cuối cùng là hàm hiển thị, hàm này có nhiệm vụ lấy từng byte trong mảng ma[16][4] để xuất ra màn hình sau đó bật sáng các hàng tương ứng.

Các bạn hãy để ý biến “sang”. Đây là biến có giá trị từ 0 đến 1000 chính là để băm chân OE điều khiển độ sáng của bảng matrix. Khi biến này này bằng 0 thì matrix gần như không sáng. Còn nếu các bạn để = 1000 thì sáng MAX và giải giá trị theo mình thấy nhìn sáng đẹp nhất là trong khoảng từ 20 đến 300.

OK bây giờ chỉ việc tống hàm hiển thị vào vòng lặp while(1) trong hàm Main là được. Sau đó các bạn có thể xây dựng các hàm render dữ liệu để ghi data vào bộ đệm hiển thị nhé.

Phần code trên tương thích hầu hết với mọi vi điều khiển. Tuy nhiên các bạn không nên ứng dụng nó vào lập trình thực tế, vì chúng ta nên tận dụng bộ SPI cứng của vi điều khiển để đẩy dữ liệu thay vì đẩy data bằng code mềm như trên. Hơn nữa hàm hiển thị nên đưa vào 1 module ngắt timer như các bài trước mình đã hướng dẫn.

Về cơ bản, không cần biết các bạn làm việc với loại led ma trận nào, phần cứng ra sao. Các bạn chỉ cần xây dựng 1 module hiển thị như trên. Công việc còn lại là làm việc với dữ liệu (tức là thao tác lên pixel, điểm ảnh – bộ đệm hiển thị). Cho nên chương trình điều khiển đồ họa là như nhau, với mỗi phần cứng khác nhau ta thiết kế module hiển thị lại cho phù hợp thôi

 

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

6 bình luận

  1. Thanks for all of your work on this website. Betty takes pleasure in conducting research and it’s obvious why. Most people notice all concerning the powerful method you offer informative guidelines by means of the web site and as well as welcome response from other people about this article so our favorite girl is really being taught a lot of things. Enjoy the rest of the year. You are always conducting a brilliant job.

  2. chào a, e đang làm trên led p10 rg e có dùng code tương tự như trên để hiển thị chữ cái lên led mà chỉ thấy bảng led nó sáng full các led chứ k hiển thị chữ là sai gì ạ.

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