Índice:

Como fazer a interface de uma matriz 8x8 de LED acionada por MAX7219 com o microcontrolador ATtiny85: 7 etapas
Como fazer a interface de uma matriz 8x8 de LED acionada por MAX7219 com o microcontrolador ATtiny85: 7 etapas

Vídeo: Como fazer a interface de uma matriz 8x8 de LED acionada por MAX7219 com o microcontrolador ATtiny85: 7 etapas

Vídeo: Como fazer a interface de uma matriz 8x8 de LED acionada por MAX7219 com o microcontrolador ATtiny85: 7 etapas
Vídeo: Controlando Matriz De LED Com Arduíno 2024, Novembro
Anonim
Como fazer a interface de uma matriz LED 8x8 acionada por MAX7219 com o microcontrolador ATtiny85
Como fazer a interface de uma matriz LED 8x8 acionada por MAX7219 com o microcontrolador ATtiny85

O controlador MAX7219 é fabricado pela Maxim Integrated é compacto, driver de exibição de cátodo comum de entrada / saída serial que pode conectar microcontroladores a 64 LEDs individuais, displays de LED numéricos de 7 segmentos de até 8 dígitos, displays de gráfico de barras, etc. -chip são um decodificador BCD code-B, circuitos de varredura multiplex, drivers de segmento e dígito e uma RAM estática 8 × 8 que armazena cada dígito.

Os módulos MAX7219 são muito convenientes para uso com microcontroladores como o ATtiny85 ou, em nosso caso, a placa Tinusaur.

Etapa 1: O Hardware

O Hardware
O Hardware
O Hardware
O Hardware

Os módulos MAX7219 geralmente são assim. Eles têm um barramento de entrada de um lado e um barramento de saída do outro. Isso permite que você encadeie 2 ou mais módulos, ou seja, um após o outro, a fim de criar configurações mais complicadas.

Os módulos que estamos usando são capazes de se conectar em uma cadeia usando 5 pequenos jumpers. Veja a foto abaixo.

Etapa 2: Pinagem e sinais

O módulo MAX7219 tem 5 pinos:

  • VCC - potência (+)
  • GND - terra (-)
  • DIN - entrada de dados
  • CS - Seleção de Chip
  • CLK - Relógio

Isso significa que precisamos de 3 pinos no lado do microcontrolador ATtiny85 para controlar o módulo. Esses serão:

  • PB0 - conectado ao CLK
  • PB1 - conectado ao CS
  • PB2 - conectado ao DIN

Isso é suficiente para se conectar ao módulo MAX7219 e programá-lo.

Etapa 3: o protocolo

O protocolo
O protocolo

A comunicação com o MAX7219 é relativamente fácil - ele usa um protocolo síncrono, o que significa que para cada bit de dados que enviamos, há um ciclo de clock que significa a presença desse bit de dados.

Em outras palavras, enviamos 2 sequências paralelas para bits - uma para o relógio e outra para os dados. Isso é o que o software faz.

Etapa 4: o software

O software
O software

A forma como este módulo MAX7219 funciona é esta:

  • Escrevemos bytes em seu registro interno.
  • MAX7219 interpreta os dados.
  • MAX7219 controla os LEDs na matriz.

Isso também significa que não precisamos circular pela matriz de LEDs o tempo todo para acendê-los - o controlador MAX7219 cuida disso. Ele também pode gerenciar a intensidade dos LEDs.

Portanto, para usar os módulos MAX7219 de maneira conveniente, precisamos de uma biblioteca de funções para atender a esse propósito.

Primeiro, precisamos de algumas funções básicas para escrever nos registradores MAX7219.

  • Gravando um byte no MAX7219.
  • Escrevendo uma palavra (2 bytes) no MAX7219.

A função que grava um byte no controlador é assim:

void max7219_byte (dados uint8_t) {para (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // Define CLK para LOW if (data & 0x80) // Mascara o MSB dos dados PORTB | = (1 << MAX7219_DIN); // Defina DIN como HIGH else PORTB & = ~ (1 << MAX7219_DIN); // Defina DIN como LOW PORTB | = (1 << MAX7219_CLK); // Defina CLK para dados HIGH << = 1; // Mude para a esquerda}}

Agora que podemos enviar bytes para o MAX7219, podemos começar a enviar comandos. Isso é feito enviando 2 byes - o primeiro para o endereço do registro interno e o segundo para os dados que gostaríamos de enviar.

Há mais de uma dúzia de registros no controlador MAX7219.

Enviar um comando, ou uma palavra, é basicamente enviar 2 bytes consecutivos. A implementação da função é muito simples.

void max7219_word (endereço uint8_t, dados uint8_t) {PORTB & = ~ (1 << MAX7219_CS); // Defina CS para BAIXO max7219_byte (endereço); // Enviando o endereço max7219_byte (data); // Enviando os dados PORTB | = (1 << MAX7219_CS); // Definir CS para HIGH PORTB & = ~ (1 << MAX7219_CLK); // Defina CLK para BAIXO}

É importante observar aqui a linha onde trazemos o sinal CS de volta para HIGH - isso marca o final da sequência - neste caso, o final do comando. Uma técnica semelhante é usada ao controlar mais de uma matriz conectada em uma cadeia. A próxima etapa, antes de começarmos a ligar e desligar os LEDs, é inicializar o controlador MAX7219. Isso é feito gravando certos valores em certos registros. Por conveniência, ao codificá-lo, poderíamos colocar a sequência de inicialização em um array.

uint8_t initseq = {0x09, 0x00, // Registro de modo de decodificação, 00 = Sem decodificação 0x0a, 0x01, // Registro de intensidade, 0x00.. 0x0f 0x0b, 0x07, // Registro de limite de varredura, 0x07 para mostrar todas as linhas 0x0c, 0x01, // Registro de desligamento, 0x01 = Operação normal 0x0f, 0x00, // Registro de teste de exibição, 0x00 = Operação normal};

Precisamos apenas enviar os 5 comandos acima em uma sequência como pares de endereço / dados. Próxima etapa - acender uma fileira de LEDs.

Isso é muito simples - nós apenas escrevemos um comando onde o primeiro byte é o endereço (de 0 a 7) e o segundo byte são os 8 bits que representam os 8 LEDs na linha.

void max7219_row (endereço uint8_t, dados uint8_t) {if (endereço> = 1 && endereço <= 8) max7219_word (endereço, dados); }

É importante observar que isso funcionará apenas para 1 matriz. Se conectarmos mais matrizes em uma cadeia, todas mostrarão os mesmos dados. A razão para isso é que, após enviar o comando, trazemos o sinal CS de volta para HIGH, o que faz com que todos os controladores MAX7219 na cadeia travem e mostrem o que quer que tenha sido o último comando.

Recomendado: