MAX7219 no PIC16F628A

    Alguém já deve ter ficado cotando os pinos do PIC para poder multiplexar os displays de 7 segmentos os quais utilizam muitas saidas, por exemplo, para ligar 4 displays de 7 segmentos são usados nada mais nada menos do que 12 pinos o que é um número considerável de saídas e dependendo do projeto e do PIC utilizado fica impossível de utilizá-los.

    Há sim outra forma de resolver isso, existe um circuito integrado que faz a multiplexação dos displays e que pode ligar até 8 display de 7 segmentos este é o MAX7219, o qual também pode multiplexar matrizes de LED.

    MAX7219 datasheet

    O MAX7219 tem um funcionamento bem simples. segue abaixo um modelo de escrita

MAX7219_CS = 0;
Soft_SPI_Write(0x0A);//comando
Soft_SPI_Write(0x08);//valor
MAX7219_CS = 1;

   Ou seja, enviamos um bit baixo ao pino LOAD , logo após enviamos o comando e o valor que queremos escrever, depois disso enviamos o bit alto para o LOAD.

   A tabela 2 do datasheet mostra os comandos do MAX7219. Exemplo:

Queremos definir quantos leds serão utilizados e conforme a tabela 2 o comando é 0x0b então o comado fica assim:

 MAX7219_CS = 0;
 Soft_SPI_write(0x0b);
 Soft_SPI_write(7);  // 8 displays, displays de 0 a 7
 MAX7219_CS = 1;

   Da mesma forma definimos a intensidade do brilho nos displays e se será usado o modo de decodificação.

segue abaixo o diagrama do circuito o qual utilizamos para teste:


   Com base nestas informações preciosas que o datasheet nos dá criamos um arquivo com algumas funções as quais nos auxiliam bastante, porém se formos usar apenas uma ou duas é aconselhável copiá-las no próprio programa a fim de não utilizar espaço na memória do PIC principalmente se este estiver pouca memoria.

Funções:

void MAX7219_Init(char displays); --- Ex.: MAX7219_Init(8);

Esta função inicializa o MAX7219 com o RB0 em DIN, RB1 em LOAD, RB2 em CLOCK e RB3 em DOUT, deve ser passado como paramentro a quantidade de display que esta sendo multiplexado.


void MAX7219_putLetra(char letra, char digito); --- Ex.: MAX7219_putLetra('A', 1);

Esta função envia a letra ao digito especificado, esta letra deve estar entre aspas simples (apóstrofos).


void MAX7219_putAlfa(char *palavra); --- Ex.: MAX7219_putAlfa("MAX7219");

Esta função envia a String aos displays, lembrando que a palavra inicia de trás para a frente, ou seja, se a palavra for maior que o numero de displays aparecerá somente as últimas letras correspondente a quantidade de displays.


void MAX7219_putByte(char byte, char digito); --- Ex.: MAX7219_putByte(0b01110111, 1);

Esta função envia o byte ao digito especificado, sendo que o bit mais significativo é o "DP" o segundo mais significativo é o "A" e o menos significativo é o "G", entao para mandar o caractere F ao display 2 devemos escrever MAX7219_putByte(0b01000111,2)


void MAX7219_putNumber(int number); --- Ex.: MAX7219_putNumber(123);

como o nome diz esta função envia aos displays o numero passado como parametro, sendo que começa a escreve-lo da direita para a esquerda e se não completar o total de displays então estes serão completados com zeros, ou seja, se o numero passado for 23 e a quantidade de displays for 4 entao será exibido o numero 0023.


void MAX7219_scrollLeft(char *palavra,int delay); --- Ex.: MAX7219_scrollLeft("Senha",500);

Esta função rola a palavra passada como parametro na velocidade que também será passada como parametro da direita para a esquerda.


void MAX7219_scrollRight(char *palavra,int delay) --- Ex.: MAX7219_scrollRight("Senha",500);

E por fim esta função faz o contrário da fução anterior, os parametros que são passados são os mesmos porém a palavra rola da esquerda para a direita.



biblioteca para o MAX7219

Firmware do PIC16F628A e diagrama de ligação



https://www.youtube.com/watch?v=_h1tPErCrkE


galera foi eu mesmo que desenvolvi estas funções, caso alguma não esteja funcionando me avisem que tentaremos arrumar

Comentários

Postagens mais visitadas deste blog