CONTROLE
MAX7219 COM DISPLAYS 7 SEGMENTOS COM PIC Quem gosta e curte
microcontroladores, sabe que nem sempre um determinado
periférico de controle pode estar disponível
internamente no tipo/versão selecionado. Esse é o caso
do microcontrolador PIC16F628A, muito difundido e ainda
utilizado mesmo nos dias atuais para projetos mais
simples. Esse microcontrolador não tem, por exemplo,
pinos/registradores específicos para usar com
dispositivos externos tipo SPI e/ou I2C. Ou seja, não dá
para usar esse tipo de microcontrolador para controlar
dispositivos do tipo que citei, certo?!?! Errado!!! Você
pode com alguma criatividade e conhecendo o protocolo em
questão fazer da forma "manual" ou como dizia-se
antigamente: "na unha"!!
CONHECENDO O PROTOCOLO SPI - PINOUT E CONEXÃO O protocolo SPI foi desenvolvido pela Motorola em 1979 (velho?!?!) para permitir a comunicação serial síncrona entre periféricos a curta distância. E quando falo curta distância, estou me referindo a dispositivos instalados em uma mesma placa ou ainda num mesmo "sistema" (caixa). Ele utiliza a arquitetura mestre/escravo em modo full-duplex, podendo chegar a velocidades superiores a 4Mbit/s. Para isso seu barramento conta com 4 pontos de conexão, a saber:
Por ter um ponto para seleção do escravo, um endereço para o mesmo no barramento é dispensável. A figura abaixo mostra um barramento típico entre um mestre e seus dispositivos "escravos". Notem que cada escravo tem o seu próprio pino de seleção, e que os demais pinos (MOSI, MISO e SCLK) estão conectados entre si. Essa poderia ser uma das desvantagens desse protocolo, já que para usarmos 10 dispositivos escravos precisaríamos de 13 pinos de I/O do nosso microcontrolador. SOBRE POLARIDADE E FASE SPI O protocolo SPI tem 4 modos de trabalho, que são definidos pela "polaridade" e "fase" do clock em relação aos dados. Veja a figura abaixo. E a tabela abaixo detalha melhor os modos em relação a polaridade e fase.
Note que a
polaridade do clock diz respeito a se o mesmo
vai operar de low para high (polaridade
0) ou ainda de high para low (polaridade
1). Já a fase trata quando o dado deve estar disponível
no bus (barramento). Para a fase 0 o dado deve
estar disponível na transição ou borda de subida para
polaridade 0 ou na transição ou borda de decida para
polaridade 1. Já a fase 1 temos o contrário, o dado deve
estar disponível na transição ou borda de descida para
polaridade 0 e na transição ou fase de subida para
polaridade 1. É muito importante saber qual o modo de
operação do dispositivo que se deseja utilizar para que
seja possível configurar o mestre de acordo. E graças ao
pino SS você pode "passear" entre os modos caso tenha
mais de um dispositivo operando com modos diferentes
de operação no barramento SPI.
IMPLEMENTAÇÃO SPI POR SOFTWARE A intenção desse artigo é demonstrar como o protocolo pode ser implementado por software. Acredito que até aqui você deve ter percebido que o protocolo SPI não tem um número finito de bits e nem um número "fixo" para os mesmos. Cada dispositivo tem o seu limite máximo e/ou mínimo e pode ou não possuir registradores para leitura/escrita de dados e/ou configuração. Obs.: A única observação é que você sempre vai trabalhar com a ideia da leitura/escrita de um ou mais bytes ou seja, com múltiplos de 8 bits, caso o dispositivo não informe o contrário. Nesse caso, percebe-se então que o SPI é muito, mas muito parecido com um shift-register e sua operação é exatamente a mesma. Tudo o que é preciso fazer é, para um controle por software, selecionar o CI através do seu pino SS e pulsar o clock disponibilizando o bit de dado de acordo com a polaridade e fase escolhidos. Veja o segmento de programa em C abaixo: Esse pequeno segmento de código acima está configurado para modo 0. O clock é levado a low manualmente, mas apenas porque esse é seu estado natural (veja na saída da função) e em seguida o bit de dado é disponibilizado (0 ou 1) para somente então o bit de clock ser levado a high, momento em que o dispositivo faz a leitura do bit. Agora veja abaixo um segmento de código para leitura de dados: Este novo
segmento de código trabalha da mesma forma. O clock
é levado a low e nesse momento o escravo deve
disponibilizar o bit (o mestre adiciona um tempo para
aguardar até que o bit de dado possa ser considerado
válido - estável). Em seguida o mestre lê o bit de dado
e levanta o clock (high) aguardando
novamente um tempo e toda a sequencia é repetida até que
todos os bits desejados sejam lidos. Essas funções
podem ser aplicadas a qualquer microcontrolador da
família PIC usando quaisquer pinos de I/O.
EXEMPLO
PRÁTICO - CONTROLE MÓDULO DISPLAY MAX7219 Abaixo o
esquema para um exemplo prático utilizando um módulo
MAX7219 com 8 displays de 7 segmentos. Há um
vídeo no inicio do artigo que demonstra esse exemplo. O
código fonte está disponível mais abaixo em downloads
e foi ricamente comentado para facilitar o seu
entendimento. Note que o
microcontrolador utilizado foi o PIC16F628A, que não
possui um periférico interno SPI. Você poderá montar
esse exemplo em um proto-board sem
maiores problemas. O código precisa ser compilado via
ferramenta MPLABX Microchip com o
compilador XC8 2.40 ou superior. Obs.:
Todas as informações sobre a placa PE-PIC16F628A
utilizada nesta experiência podem ser obtidas aqui.
CONCLUSÃO Conhecer um
protocolo garante a você que pretende entrar no mundo
dos microcontroladores um maior "controle" sobre as
várias situações que podem surgir durante a sua
carreira. Hoje em dia, o uso de bibliotecas e/ou
ferramentas "mágicas" permitem uma grande velocidade no
desenvolvimento, porém as mesmas estão tirando dos
estudantes/aprendizes algo que é irreparável: o
conhecimento necessário sobre alguns conceitos
importantes! Saber como usar uma biblioteca/ferramenta
não difere você dos demais. O que vai fazer a diferença
é o conhecimento sobre um determinado assunto/conceito.
Bons testes, bons estudos e até a próxima! DOWNLOADS - Pacote com
arquivos (*.c, *.h e arquivo HEX)
|
Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor. |