Raspberry Pi Pico – MX7219 Oito Dígitos de Sete Segmento, Display, Contador BCD

Tempo de leitura: 6 minutes

Este artigo tem a ver com a interface de oito dígitos do display de sete segmentos usando o driver de display MAX7219 popular com Raspberry Pi Pico, e pode ser programado usando Python, para contagem de BCD

A Raspberry Pi Pico é uma placa pequena, rápida e versátil construída com RP2040 e apresenta um processador Arm Cortex-M0 + dual-core com 264 KB de RAM interna e suporte para até 16 MB de Flash fora do chip. Ele oferece uma ampla gama de opções de E/S flexíveis, incluindo I2C, SPI e pinos de E/S programáveis (GPIO) exclusivos.

No projeto de sistema incorporado, os visores de sete segmentos desempenham um papel importante como indicações visuais numéricas. As telas de LED de sete segmentos são mais brilhantes, mais atraentes e fornecem uma distância de visualização distante, bem como um ângulo de visualização mais amplo em comparação com as telas de LCD. Está disponível em grandes dimensões (0,3 polegadas a 6 polegadas) e cores diferentes (VERMELHO, VERDE, AZUL, LARANJA, BRANCO). Ele pode exibir dígitos de 0 a 9 e alguns caracteres como A, b, C, d, E, e, F, n, o, P, t, u, etc. Este intratável é sobre interface de 8 dígitos de 7 segmentos exibir usando o driver de vídeo MAX7219 popular com Raspberry Pi Pico, e pode ser programado usando Python, para contagem de BCD.

 

Material Necessário

Raspberry Pi Pico
Cabo Micro USB
CI Max7219 + 2 Displays de cátodo comum de 4 dígitos e 7 segmentos
Ou módulo Max7219 montado

Esquemático

O chip do driver de vídeo MAX7219 fornece uma interface serial de 3 fios (SPI) para acionar visores de LED de 7 segmentos (tipo cátodo comum) de até 8 dígitos.

O on-chip inclui um decodificador BCD, circuito de varredura multiplex, drivers de segmento e dígito e uma RAM estática 8 × 8 para armazenar os valores dos dígitos.

Os pinos DIN, CLOCK e CS do MAX7219 são conectados aos pinos GPIO3, GPIO2 e GPIO5 do Raspberry Pi Pico.

Dois visores de cátodo comum de quatro dígitos e sete segmentos são conectados aos pinos de acionamento no MAX7219.

Caso contrário, pode-se usar o módulo MAX7219 pré-montado com 8 dígitos e conectar os pinos do drive de acordo.

O módulo MAX7219 é alimentado com +5VDC (VBUS) e GND.

 

MAX7219 Library

É uma biblioteca MicroPython para placas de vídeo MAX7219 + 8 x 7 dígitos.

Abaixo o código da lib max7219_8digit.py lib.

Abra o seu Raspberry Pi Pico como unidade e copie a biblioteca para o diretório raiz.

A biblioteca oferece

– Inicializando o dispositivo

– Defina a intensidade do dispositivo

– Funcionalidade Write To Buffer

– Envie o buffer para o dispositivo MAX7219 para processamento posterior.

Código

# Licence: GPLv3
# Copyright 2017 Paul Dwerryhouse <paul@dwerryhouse.com.au>

CHAR_MAP = {
    '0': 0x7e, '1': 0x30, '2': 0x6d, '3': 0x79,
    '4': 0x33, '5': 0x5b, '6': 0x5f, '7': 0x70,
    '8': 0x7f, '9': 0x7b, 'a': 0x77, 'b': 0x1f,
    'c': 0x4e, 'd': 0x3d, 'e': 0x4f, 'f': 0x47,
    'g': 0x7b, 'h': 0x37, 'i': 0x30, 'j': 0x3c,
    'k': 0x57, 'l': 0x0e, 'm': 0x54, 'n': 0x15,
    'o': 0x1d, 'p': 0x67, 'q': 0x73, 'r': 0x05,
    's': 0x5b, 't': 0x0f, 'u': 0x1c, 'v': 0x3e,
    'w': 0x2a, 'x': 0x37, 'y': 0x3b, 'z': 0x6d,
    'A': 0x77, 'B': 0x1f, 'C': 0x4e, 'D': 0x3d, 
    'E': 0x4f, 'F': 0x47, 'G': 0x7b, 'H': 0x37, 
    'I': 0x30, 'J': 0x3c, 'K': 0x57, 'L': 0x0e, 
    'M': 0x54, 'N': 0x15, 'O': 0x1d, 'P': 0x67, 
    'Q': 0x73, 'R': 0x05, 'S': 0x5b, 'T': 0x0f, 
    'U': 0x1c, 'V': 0x3e, 'W': 0x2a, 'X': 0x37, 
    'Y': 0x3b, 'Z': 0x6d, ' ': 0x00, '-': 0x01, 
    '\xb0': 0x63, '.': 0x80
}

REG_NO_OP           = 0x00
REG_DIGIT_BASE      = 0x01
REG_DECODE_MODE     = 0x09
REG_INTENSITY       = 0x0a
REG_SCAN_LIMIT      = 0x0b
REG_SHUTDOWN        = 0x0c
REG_DISPLAY_TEST    = 0x0f

class Display:

    def __init__(self, spi, ss, intensity=7):
        self.spi = spi
        self.ss = ss
        self.buffer = bytearray(8)
        self.intensity = intensity
        self.reset()
    
    def reset(self):
        self.set_register(REG_DECODE_MODE, 0)
        self.set_register(REG_INTENSITY, self.intensity)
        self.set_register(REG_SCAN_LIMIT, 7)
        self.set_register(REG_DISPLAY_TEST, 0)
        self.set_register(REG_SHUTDOWN, 1)

    def set_register(self, register, value):
        self.ss.low()
        self.spi.write(bytearray([register, value]))
        self.ss.high()

    def decode_char(self, c):
        d = CHAR_MAP.get(c)
        return d if d != None else ' '

    def write_to_buffer(self, s):
        l = len(s)
        if l < 8:
            s = "%-8s" % s
        for i in range(0,8):
            self.buffer[7-i] = self.decode_char(s[i])
        
    def display(self):
        for i in range(0,8):
            self.set_register(REG_DIGIT_BASE + i, self.buffer[i])

    def intensity(self, i):
        self.send(self.INTENSITY, i)

 

Contagem de quatro dígitos para cima

A biblioteca Raspberry Pi Pico “max7219_8digit.py” é usada para exibir dígitos em MAX7219.

A variável de contagem é inicializada com 9950 e adicionada por uma contagem, a cada intervalo de 100ms.

A variável de contagem será convertida em BCD e exibida nos 4,5,6 e 7º dígitos.

Se o valor da contagem chegar a 9999, ele será redefinido para zero.

Código – Max7219_UpCount_V01.py

'''
Demonstra o uso de MAX7219, dígitos da exibição de 7 segmentos.
 
* Demonstre "Contagem de 4 dígitos" no intervalo de 100 ms.
* Começando com 9950
* Reinicia após atingir 10.000

A conexão do circuito Raspberry Pi Pico para MAX7219:

* MAX7219 VCC pin para VBUS
* MAX7219 pino GND para GND
* MAX7219 pino DIN para GPIO3 digital
* Pino MAX7219 CS para GPIO5 digital
* MAX7219 CLOCK pin para digital GPIO2

 Name:- CapSistema
 Date:-  20out2021
 Version:- V0.1
 e-mail:- cacpnrj@gmail.com
'''

# Importar bibliotecas MicroPython de PIN e SPI
from machine import Pin, SPI

# Importar MicoPython MAX7219, biblioteca de 8 dígitos, 7 segmentos
import max7219_8digit

# Importar biblioteca de cronômetros
import time

#Intialize o SPI
spi = SPI(0, baudrate=10000000, polarity=1, phase=0, sck=Pin(2), mosi=Pin(3))
ss = Pin(5, Pin.OUT)

#Inicializar variável de contagem com 9950 como valor inicial
count=9950

# Criar exibição instantânea
display = max7219_8digit.Display(spi, ss)

# Executar o loop incondicionalmente
while True:
 
 # Prefixo "UP -" e adicione "variável de contagem" como string
 temp = "UP -" + str(count)
 
 # Escreva a string no buffer de exibição
 display.write_to_buffer(temp)
 
 # Grave o buffer em MAX7219
 display.display()
 
 # Incrementar a contagem
 count = count + 1
 
 # Valide o valor da contagem. Se exceder 10000, redefina para zero.
 if count == 10000:
     count = 0
     
 # Durma por cerca de 100 ms.
 time.sleep(0.1)

 

Contagem decrescente de quatro dígitos

A biblioteca Raspberry Pi Pico “max7219_8digit.py” é usada para exibir dígitos em MAX7219.

A variável de contagem é inicializada com 50 e diminuída em uma contagem, a cada intervalo de 100ms.

A variável de contagem será convertida em BCD e exibida nos 4,5,6 e 7º dígitos.

Se o valor da contagem atingir o valor negativo (-1), ele será redefinido para 9999.

Código – Max7219_DownCount_V01.py

'''
Demonstra o uso de MAX7219, dígitos da exibição de 7 segmentos.
 
* Demonstre "Contagem decrescente de 4 dígitos" no intervalo de 100 ms.
* Começando com 50
* Reinicia após atingir 0, para 9999

A conexão do circuito Raspberry Pi Pico para MAX7219:

* MAX7219 VCC pin para VBUS
* MAX7219 pino GND para GND
* MAX7219 pino DIN para GPIO3 digital
* Pino MAX7219 CS para GPIO5 digital
* MAX7219 CLOCK pin para digital GPIO2

 Name:- CapSistema
 Date:-  20out2021
 Version:- V0.1
 e-mail:- cacpnrj@gmail.com
'''

# Importar bibliotecas MicroPython de PIN e SPI
from machine import Pin, SPI

# Importar MicoPython MAX7219, biblioteca de 8 dígitos, 7 segmentos
import max7219_8digit

# Importar biblioteca de cronômetros
import time

#Intialize o SPI
spi = SPI(0, baudrate=10000000, polarity=1, phase=0, sck=Pin(2), mosi=Pin(3))
ss = Pin(5, Pin.OUT)

#Inicializar variável de contagem com 50 como valor inicial
count=50

# Criar exibição instantânea
display = max7219_8digit.Display(spi, ss)

# Executar o loop incondicionalmente
while True:
 
 # Prefixo "LOW-" e adicione "variável de contagem" como string
 temp = "LO -" + str(count)
 
 # Escreva a string no buffer de exibição
 display.write_to_buffer(temp)
 
 # Grave o buffer em MAX7219
 display.display()
 
 # Incrementar a contagem
 count = count - 1
 
 # Valide o valor da contagem. Se for menor que 0, redefina para 9999.
 if count == -1:
     count = 9999
     
 # Durma por cerca de 100 ms.
 time.sleep(0.1)

 

Display de caracteres alfanuméricos

A biblioteca Raspberry Pi Pico “max7219_8digit.py” é usada para exibir dígitos em MAX7219.

Os 8 dígitos de possíveis cartas alfanuméricas são exibidos em intervalos de 2 segundos.

Código Max7219_DigitAscii.py

'''
 Demonstra o uso de MAX7219, dígitos da exibição de 7 segmentos.
 
* Demonstre a exibição de caracteres alfanuméricos no intervalo de 2S.
 
A conexão do circuito Raspberry Pi Pico para MAX7219:

* MAX7219 VCC pin para VBUS
* MAX7219 pino GND para GND
* MAX7219 pino DIN para GPIO3 digital
* Pino MAX7219 CS para GPIO5 digital
* MAX7219 CLOCK pin para digital GPIO2

 Name:- CapSistema
 Date:-  20out2021
 Version:- V0.1
 e-mail:- cacpnrj@gmail.com
'''

# Importar bibliotecas MicroPython de PIN e SPI
from machine import Pin, SPI

# Importar MicoPython MAX7219, biblioteca de 8 dígitos, 7 segmentos
import max7219_8digit

# Importar biblioteca de cronômetros
import time

#Intialize o SPI
spi = SPI(0, baudrate=10000000, polarity=1, phase=0, sck=Pin(2), mosi=Pin(3))
ss = Pin(5, Pin.OUT)

# Criar exibição instantânea
display = max7219_8digit.Display(spi, ss)

# Executar o loop incondicionalmente
while True:
    # Exibir "01234567" por 2 segundos
    display.write_to_buffer("01234567")
    display.display()
    time.sleep(2)

    # Exibir "89ABCDEF" por 2 segundos
    display.write_to_buffer("89ABCDEF")
    display.display()
    time.sleep(2)

    # Exibir "GHIJKLMN" por 2 segundos
    display.write_to_buffer("GHIJKLMN")
    display.display()
    time.sleep(2)

    # Exibir "OPQRSTUV" por 2 segundos
    display.write_to_buffer("OPQRSTUV")
    display.display()
    time.sleep(2)

    # Exibir "WXYZ - .." por 2 segundos
    display.write_to_buffer("WXYZ -..")
    display.display()
    time.sleep(2)

 

Conclusão

O projeto foi concluído com sucesso com o módulo Raspberry Pi Pico e MAX7219.

O MAX7219 pode ser usado para muitos projetos incorporados como display numérico.