Tìm theo

Danh mục

top banner

MAX7219 LED Dot Matrix Display với Raspberry Pi Pico

MAX7219 LED Dot Matrix Display với Raspberry Pi Pico

Màn hình ma trận LED LED MAX7219

Màn hình ma trận LED Dot MAX7219 là một trong những màn hình phổ biến hiện có trên thị trường và được sử dụng bởi sinh viên, những người có sở thích điện tử, và đặc biệt là trong các ứng dụng hiển thị công nghiệp. Có hai loại mô-đun thường có sẵn. Đây là mô-đun FC-16 và mô-đun chung.

MAX7219 dẫn mô-đun ma trận

Mỗi mô-đun bao gồm hai đơn vị. Một là ma trận điểm LED 8X8 và một là MAX7219 IC.

 

MAX7219 đơn vị mô-đun ma trận dẫn

Bạn có thể tìm thêm thông tin về MAX7219 tại đây:

Ma trận LED Dot

Ma trận chấm LED có sẵn ở nhiều kích thước khác nhau (7×5,8×8, 7×15, v.v.). Ma trận LED 8×8 điển hình được hiển thị bên dưới bao gồm 64 đèn LED, 8 cho mỗi hàng và cột. Mỗi đèn LED được giải quyết bằng số hàng và cột của nó. Mỗi đèn LED được gọi là một dấu chấm.

Để tạo ma trận điểm 8×8, tất cả các cực dương được kết nối với nhau thành các hàng R1 đến R8, tương tự, các cực âm được kết nối với nhau trong các cột C1 đến C8. Lý do kết nối tất cả các hàng và cột với nhau là để lưu số lượng chân cần thiết để điều khiển từng chấm LED. Bằng cách này, số lượng chân I / O cần thiết đã giảm xuống còn 16. Nếu không, chúng ta sẽ cần 64 chân để điều khiển ma trận LED 8×8. Phương pháp điều khiển một số lượng lớn đèn LED với ít chân này được gọi là ghép kênh.

Để Bật một việc làm cụ thể, chúng ta cần đặt một điện áp dương vào hàng tương ứng của dấu chấm đó và âm hoặc nối đất cho cột tương ứng của dấu chấm đó. Nếu hàng nhận được điện áp dương và cột bị âm thì chỉ một đèn LED cụ thể sẽ phát sáng.

Ví dụ: Nếu bạn muốn phát sáng một đèn LED được kết nối giữa R2 và C1, chúng ta phải áp dụng logic 00000010 trên hàng R2 và 11111110 trên cột C1. Nếu R5 được kéo cao và C4 kéo thấp, thì đèn LED ở hàng thứ năm và cột thứ tư sẽ cao. Logic tương tự cũng có thể được áp dụng cho các hàng và cột khác để bật và tắt mỗi hàng và cột LED. Hơn nữa, để hiển thị văn bản trên ma trận chấm, chúng tôi điều khiển từng đèn LED tốc độ rất nhanh mà mắt người cảm thấy như đèn LED liên tục bật.

Giao diện ma trận LED

MAX7219 IC

MAX7219 là một IC trình điều khiển hiển thị âm cực phổ biến với các đầu vào nối tiếp và chân đầu ra. Nó có khả năng điều chỉnh dòng điện có thể được đặt chỉ bằng một điện trở bên ngoài. Thêm vào đó, nó có giao diện nối tiếp bốn dây có thể dễ dàng kết nối với tất cả các bộ vi xử lý. Nó có thể điều khiển 64 đèn LED riêng lẻ được kết nối tại các chân đầu ra của nó chỉ bằng 4 dây bằng cách sử dụng bảng Raspberry Pi Pico. Hơn nữa, nó có thể điều khiển màn hình  và biểu đồ thanh.

MAX7219 8 chữ số Display Driver IC

Trên hết, MAX7219 có bộ giải mã BCD tích hợp giúp bạn dễ dàng sử dụng với màn hình số bảy phân đoạn. Ngoài ra, nó có RAM tĩnh 8×8 mà chúng ta có thể sử dụng để lưu trữ số. Nó là một trong những màn hình phổ biến nhất trình điều khiển IC.

Một số tính năng chính của MAX7219 bao gồm:

  1. Nó là một IC hiển thị trình điều khiển LED với giao diện nối tiếp 10MHz cho phép người dùng chọn chữ số giải mã / Không giải mã.

  2. Hoạt động của nó được chỉ định trong dải điện áp từ +4,0 đến +5,5V. Thông thường, nguồn cung cấp điện áp +5V được sử dụng.

  3. Nó cung cấp một tính năng kiểm soát cường độ sáng kỹ thuật số và tương tự và chế độ tắt 150μA trong đó dòng điện của tất cả các phân đoạn được kéo xuống đất.

  4. Nó tiêu thụ điện năng rất thấp.

  5. Dữ liệu được hiển thị trên các phân đoạn có thời gian trễ là 2,2ms.

  6. MAX7219 hoạt động tốt trong phạm vi nhiệt độ từ 0 ° C đến + 70 ° C.

  7. Dòng điện tối đa cho mỗi chân phân đoạn là 100mA và đối với mỗi chân nối đất DIGIT là 500mA

MAX7219 Mô-đun ma trận điểm Pinout

Mô-đun MAX7219 có 5 thiết bị đầu cuối bao gồm SPI và thiết bị đầu cuối cung cấp điện. Cả hai loại mô-đun đều có kết nối giống nhau ở hai bên. Một bên là các kết nối đầu vào và mặt khác là các kết nối đầu ra Dưới đây bạn có thể xem sơ đồ chân của mô-đun chung.

MAX7219 led ma trận pin ra

Kết nối đầu vào

Các kết nối đầu vào của ma trận LED được kết nối với Raspberry Pi Pico

  • VCC: Chân này cung cấp năng lượng cho mô-đun MAX7219. Nó được kết nối với chân 5V của Raspberry Pi Pico.

  • GND: Đây là chân nối đất nên được kết nối với chân nối đất của Raspberry Pi Pico.

  • DIN: Đây là dữ liệu trong mã pin. Nó được sử dụng làm đầu vào SPI cho mô-đun.

  • CS: Đây là chân Chip Select để giao tiếp SPI.

  • CLK: Đây được gọi là chân 'Đồng hồ nối tiếp' được sử dụng trong đầu ra đồng hồ nối tiếp SPI.

Kết nối đầu ra

Các kết nối đầu ra của ma trận LED được kết nối với mô-đun tiếp theo nếu có nhu cầu gắn thêm đơn vị.

  • VCC: Nó được kết nối với VCC (5V) trên mô-đun tiếp theo

  • GND: Nó được kết nối với GND trên mô-đun tiếp theo

  • DOUT: Đây là mã pin Dữ liệu ra. Nó được kết nối với chân DIN của mô-đun tiếp theo.

  • CS: Cái này được kết nối với chân CS của mô-đun tiếp theo

  • CLK: Cái này được kết nối với chân CLK của mô-đun tiếp theo

MAX7219 Mô-đun ma trận LED giao diện với Raspberry Pi Pico

Các thành phần sau là bắt buộc:

  • Raspberry Pi Pico

  • Mô-đun MAX7219

  • Dây kết nối

Đối với dự án này, chúng tôi sẽ sử dụng mô-đun FC-16 bao gồm bốn đơn vị.

MAX7219 led matrix FC-16 module

Bây giờ, chúng tôi sẽ hướng dẫn bạn cách kết nối mô-đun MAX7219 và Raspberry Pi Pico với nhau.

Giao tiếp SPI giúp giao tiếp với mô-đun MAX7219, phổ biến trong mọi bộ vi điều khiển. Vì vậy, chúng tôi sẽ sử dụng giao diện SPI của Raspberry Pi Pico. Trước tiên chúng ta hãy tìm hiểu về giao diện Raspberry Pi Pico SPI.

Chân Raspberry Pi Pico SPI

Raspberry Pi Pico hỗ trợ hai thiết bị ngoại vi . Cả hai chân mô-đun SPI đều có thể truy cập được thông qua các chân GPIO của Raspberry Pi Pico. Bảng sau đây cho thấy kết nối của các chân GPIO với cả hai mô-đun SPI. Mỗi kết nối của chân điều khiển SPI có thể được cấu hình thông qua nhiều chân GPIO như trong hình. Nhưng trước khi sử dụng SPI, bạn nên định cấu hình trong phần mềm chân GPIO nào bạn muốn sử dụng với một thiết bị ngoại vi SP cụ thể.

 

Bộ điều khiển SPI

Chân GPIO

SPI0_RX

GP0 / GP4 / GP16

SPI0_TX

GP3 / GP7 / GP19

SPI0_SCK

GP2 / GP6 / GP18

SPI0_CSn

GP1 / GP5 / GP17

SPI1_RX

GP8 / GP12

SPI1_TX

GP11 / GP15

SPI1_SCK

GP10 / GP14

SPI1_CSn

GP9 / GP13

 

Hình dưới đây cho thấy các chân SPI của Raspberry Pi Pico.

Bảng dưới đây cho thấy các kết nối giữa các thiết bị mà chúng tôi sẽ sử dụng trong dự án của mình.

Raspberry Pi Pico với Mô-đun hiển thị ma trận LED MAX7219

Bây giờ chúng ta hãy xem cách kết nối mô-đun MAX7219 và bảng Raspberry Pi Pico. Bảng dưới đây cho thấy các kết nối giữa hai thiết bị:

Mô-đun MAX7219

Raspberry Pi Pico

VCC

VBUS (5V)

GND ·

GND ·

DIN

GP3 (SPI0_TX)

.CS

GP5 (SPI0_CSn)

CLK

GP2 (SPI0_SCK)

Như được hiển thị từ bảng, chúng tôi sẽ kết nối thiết bị đầu cuối VCC của mô-đun MAX7219 với chân 5V của Raspberry Pi Pico. Cả hai căn cứ sẽ là phổ biến. Các chân SPI GPIO của Raspberry Pi Pico đang được sử dụng để kết nối với từng thiết bị đầu cuối SPI còn lại của mô-đun MAX7219. Bạn cũng có thể sử dụng các chân Raspberry Pi Pico SPI khác.

Raspberry Pi Pico với sơ đồ kết nối Ma trận LED MAX7219

Raspberry Pi Pico với MAX7219 LED Dot Matrix

Cài đặt thư viện MAX7219 MicroPython

Chúng tôi sẽ sử dụng Thonny IDE để lập trình Raspberry Pi Pico của chúng tôi. Đảm bảo rằng bạn đã cài đặt phiên bản IDE mới nhất trong hệ thống của mình. Đối với dự án này, chúng tôi sẽ yêu cầu thư viện MicroPython max7219. Sao chép thư viện này và lưu nó trong Raspberry Pi Pico của bạn với tên tệp tương ứng (max7219.py).

Mở một tệp mới trong Thonny. Sao chép thư viện được cung cấp bên dưới hoặc từ liên kết được cung cấp ở trên. Lưu nó vào Raspberry Pi Pico với tên max7219.py trong thư mục lib.

max7219.py

"""

MicroPython max7219 cascadable 8x8 LED matrix driver

https://github.com/mcauser/micropython-max7219

MIT License

Copyright (c) 2017 Mike Causer

Permission is hereby granted, free of charge, to any person obtaining a copy

of this software and associated documentation files (the "Software"), to deal

in the Software without restriction, including without limitation the rights

to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

copies of the Software, and to permit persons to whom the Software is

furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all

copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

SOFTWARE.

"""

 

from micropython import const

import framebuf

 

_NOOP = const(0)

_DIGIT0 = const(1)

_DECODEMODE = const(9)

_INTENSITY = const(10)

_SCANLIMIT = const(11)

_SHUTDOWN = const(12)

_DISPLAYTEST = const(15)

 

class Matrix8x8:

    def __init__(self, spi, cs, num):

        """

        Driver for cascading MAX7219 8x8 LED matrices.

        >>> import max7219

        >>> from machine import Pin, SPI

        >>> spi = SPI(1)

        >>> display = max7219.Matrix8x8(spi, Pin('X5'), 4)

        >>> display.text('1234',0,0,1)

        >>> display.show()

        """

        self.spi = spi

        self.cs = cs

        self.cs.init(cs.OUT, True)

        self.buffer = bytearray(8 * num)

        self.num = num

        fb = framebuf.FrameBuffer(self.buffer, 8 * num, 8, framebuf.MONO_HLSB)

        self.framebuf = fb

        # Provide methods for accessing FrameBuffer graphics primitives. This is a workround

        # because inheritance from a native class is currently unsupported.

        # http://docs.micropython.org/en/latest/pyboard/library/framebuf.html

        self.fill = fb.fill  # (col)

        self.pixel = fb.pixel # (x, y[, c])

        self.hline = fb.hline  # (x, y, w, col)

        self.vline = fb.vline  # (x, y, h, col)

        self.line = fb.line  # (x1, y1, x2, y2, col)

        self.rect = fb.rect  # (x, y, w, h, col)

        self.fill_rect = fb.fill_rect  # (x, y, w, h, col)

        self.text = fb.text  # (string, x, y, col=1)

        self.scroll = fb.scroll  # (dx, dy)

        self.blit = fb.blit  # (fbuf, x, y[, key])

        self.init()

 

    def _write(self, command, data):

        self.cs(0)

        for m in range(self.num):

            self.spi.write(bytearray([command, data]))

        self.cs(1)

 

    def init(self):

        for command, data in (

            (_SHUTDOWN, 0),

            (_DISPLAYTEST, 0),

            (_SCANLIMIT, 7),

            (_DECODEMODE, 0),

            (_SHUTDOWN, 1),

        ):

            self._write(command, data)

 

    def brightness(self, value):

        if not 0 <= value <= 15:

            raise ValueError("Brightness out of range")

        self._write(_INTENSITY, value)

 

    def show(self):

        for y in range(8):

            self.cs(0)

            for m in range(self.num):

                self.spi.write(bytearray([_DIGIT0 + y, self.buffer[(y * self.num) + m]]))

            self.cs(1)

Raspberry Pi Pico với Ma trận LED MAX7219: Bản phác thảo MicroPython

Trong phần này, chúng tôi sẽ hướng dẫn bạn cách sử dụng ma trận LED MAX7219 với hai bản phác thảo. Chúng tôi sẽ có thể in các văn bản khác nhau trên ma trận LED. Ngoài ra, chúng tôi cũng sẽ cuộn một văn bản đơn giản từ phải sang trái.

MAX7219 Dot Matrix hiển thị văn bản

Mở Thonny IDE của bạn và đi tới Tệp > Mới. Sao chép mã bên dưới trong tệp đó. Bản phác thảo này sẽ hiển thị ba văn bản khác nhau trên ma trận LED sau thời gian trễ 1 giây.

from machine import Pin, SPI

import max7219

from time import sleep

 

spi = SPI(0,sck=Pin(2),mosi=Pin(3))

cs = Pin(5, Pin.OUT)

 

display = max7219.Matrix8x8(spi, cs, 4)

 

display.brightness(10)

 

while True:

 

    display.fill(0)

    display.text('PICO',0,0,1)

    display.show()

    sleep(1)

 

    display.fill(0)

    display.text('1234',0,0,1)

    display.show()

    sleep(1)

 

    display.fill(0)

    display.text('done',0,0,1)

    display.show()

    sleep(1)

Mã hoạt động như thế nào?

Trong phần này, chúng ta sẽ thảo luận về cách code hoạt động.

Nhập thư viện

Chúng tôi sẽ nhập thư viện cho lớp Pin và lớp SPI từ mô-đun máy. Để tương tác với các GPIO đầu vào / đầu ra, chúng tôi sẽ nhập mô-đun máy có chứa các lớp để tương tác với GPIO. Chúng ta cũng nên nhập mô-đun ngủ để chèn độ trễ trong tập lệnh MicroPython của chúng ta. Hơn nữa, chúng tôi cũng sẽ nhập thư viện max7219 để hoạt động với màn hình LED.

from machine import Pin, SPI

import max7219

from time import sleep

Khởi tạo SPI

Bước tiếp theo là khởi tạo giao diện SPI với các tham số cần thiết bao gồm số kênh SPI và chân SPI bằng cách tạo một đối tượng 'spi'. Bằng cách sử dụng SPI (), chúng tôi đã chỉ định số kênh SPI làm tham số đầu tiên và các chân SPI sck và mosi làm phần còn lại của các tham số.

spi = SPI(0,sck=Pin(2),mosi=Pin(3))

Tiếp theo, chúng tôi sẽ định cấu hình chân GPIO được kết nối với chân CS của mô-đun làm chân đầu ra. Đối số đầu tiên trong lớp Pin() là số pin mà chúng ta đang cấu hình đầu ra. Đầu ra là trên GP5 được kết nối với CS. Đối số thứ hai cho thấy chế độ pin, ví dụ: đầu vào kỹ thuật số hoặc chế độ đầu ra kỹ thuật số. Khi chúng tôi đang định cấu hình GP5 làm đầu ra kỹ thuật số, chúng tôi đã cung cấp cho nó là 'Pin.Out'. Điều này được lưu trữ trong đối tượng 'cs'.

cs = Pin(5, Pin.OUT)

Sau đó, chúng ta sẽ tạo đối tượng 'hiển thị' ma trận và chỉ định 4 thiết bị.

display = max7219.Matrix8x8(spi, cs, 4)

Chúng ta sẽ thiết lập độ sáng của màn hình bằng cách sử dụng phương thức brightness() trên đối tượng hiển thị. Điều này lấy một tham số từ 1-15 trong đó 15 là mức độ sáng cao nhất.

display.brightness(10)

Hiển thị văn bản

Chúng tôi sẽ liên tục thay đổi văn bản sau mỗi 1 giây. Đầu tiên chúng ta sẽ hiển thị "PICO" sau đó là các số "1234" và sau đó là "xong".

while True:

 

    display.fill(0)

    display.text('PICO',0,0,1)

    display.show()

    sleep(1)

 

    display.fill(0)

    display.text('1234',0,0,1)

    display.show()

    sleep(1)

 

    display.fill(0)

    display.text('done',0,0,1)

    display.show()

    sleep(1)

Sử dụng phương thức fill() trên đối tượng display và truyền 0 làm tham số bên trong nó, trước tiên chúng ta sẽ xóa display.

Đầu tiên chúng ta sẽ hiển thị văn bản 'PICO' trong 1 giây. Điều này sẽ đạt được bằng cách sử dụng text() và truyền chuỗi làm tham số đầu tiên, x là tham số thứ hai, y là tham số thứ ba và col = 1 làm tham số cuối cùng. Phương thức show() sẽ hiển thị chuỗi trên màn hình LED.

Raspberry Pi Pico với MAX7219 LED Dot Matrix hiển thị văn bản 1

    display.fill(0)

    display.text('PICO',0,0,1)

    display.show()

    sleep(1)

Tương tự như vậy, chúng tôi sẽ hiển thị các số '1234' và văn bản 'xong' sau đó.

Raspberry Pi Pico với MAX7219 LED Dot Matrix hiển thị văn bản 2Raspberry Pi Pico với MAX7219 LED Dot Matrix hiển thị văn bản 3

    display.fill(0)

    display.text('1234',0,0,1)

    display.show()

    sleep(1)

 

    display.fill(0)

    display.text('done',0,0,1)

    display.show()

    sleep(1)

Demonstration

Để xem trình diễn đoạn mã trên, hãy tải mã lên Raspberry Pi Pico.

Sau khi mã được tải lên, ma trận LED sẽ bắt đầu hiển thị các văn bản. Xem video dưới đây:

MAX7219 Dot Matrix MicroPython Sketch: Cuộn văn bản

Mở Thonny IDE của bạn và đi tới Tệp > Mới. Sao chép mã bên dưới trong tệp đó. Bản phác thảo này sẽ cuộn văn bản từ phải sang trái với tốc độ đã đặt.

from machine import Pin, SPI

import max7219

from time import sleep

 

spi = SPI(0,sck=Pin(2),mosi=Pin(3))

cs = Pin(5, Pin.OUT)

 

display = max7219.Matrix8x8(spi,cs,4)

 

display.brightness(10)

 

scrolling_message = "SCROLLING"

length = len(scrolling_message)

column = (length * 8)

 

display.fill(0)

display.show()

sleep(1)

 

while True:

    for x in range(32, -column, -1):     

        display.fill(0)

        display.text(scrolling_message ,x,0,1)

        display.show()

        sleep(0.1)

Code hoạt động như thế nào?

Chúng tôi sẽ thảo luận về các phần mà chúng tôi đang kết hợp tính năng cuộn. Phần còn lại của mã tương tự như mã mà chúng ta đã thảo luận ở trên.

Sau khi khởi tạo giao diện SPI, đặt độ sáng của nó và xóa màn hình, chúng tôi sẽ tạo một biến để giữ văn bản mà chúng tôi muốn cuộn. Trong trường hợp của chúng tôi, đó là 'CUỘN.' Điều này được lưu trong biến 'scrolling_message.'

scrolling_message = "SCROLLING"

Tiếp theo, tìm độ dài của văn bản.

length = len(scrolling_message)

Ngoài ra, hãy tính toán các cột cho văn bản cuộn. Điều này được tìm thấy bằng cách nhân độ dài của văn bản với 8.

column = (length * 8)

Bên trong vòng lặp while vô hạn, chúng ta sẽ sử dụng câu lệnh for để cuộn văn bản. Đầu tiên chúng tôi xóa màn hình LED. Sau đó, chúng ta sử dụng phương thức text() trên đối tượng display và viết văn bản cuộn vào frame buffer. Sau đó, chúng ta hiển thị văn bản bằng phương thức show() trên đối tượng display. Để đặt tốc độ của văn bản cuộn, chúng ta thêm độ trễ 100 mili giây bằng phương thức sleep().

while True:

    for x in range(32, -column, -1):     

        display.fill(0)

        display.text(scrolling_message ,x,0,1)

        display.show()

        sleep(0.1)

Demonstration

Để xem trình diễn đoạn mã trên, hãy tải mã lên Raspberry Pi Pico.

Sau khi mã được tải lên bảng, văn bản SCROLLING sẽ bắt đầu cuộn về phía bên trái. Điều này sẽ xảy ra liên tục.

Kết luận

Tóm lại, chúng ta đã học cách giao diện mô-đun hiển thị ma trận LED điểm MAX7219 với Raspberry Pi Pico. Chúng tôi đã xem xét hai bản phác thảo MicroPython. Những bản phác thảo này đã giúp chúng tôi làm quen với việc hiển thị văn bản thuần túy trên màn hình và cũng cuộn nó với tốc độ đã đặt.

Bài viết cùng chuyên mục