Escolar Documentos
Profissional Documentos
Cultura Documentos
Solbet Ltda
Expandindo a percepção humana
Este tutorial cobre somente partes teóricas. Você só precisará de um computador com leitor
PDF.
Você pode copiar este material a vontade, desde que mantida a informação da fonte.
Introdução
E ste conjunto de tutoriais se destina a todos aqueles que desejam se tornar bons projetistas e
programadores com os microcontroladores, especialmente os microcontroladores de 14 bits
da Microchip, com ênfase no PIC16F877. A escolha deste microcontrolador se deve ao
fato dos recursos que ele disponibiliza ao programador abrangem um grande número de periféricos,
e o conhecimento da programação destes periféricos permite a programação de dezenas de outros
chips desta linha.
Como pré-requisito para a leitura deste tutorial, você deve ter conhecimentos básicos sobre
lógica Booleana, da estrutura dos microcontroladores e de seus periféricos em geral, assim como
fundamentos de programação em qualquer linguagem. O enfoque é eminentemente prático. Você
estuda a teoria e experimenta na prática os conceitos trabalhados. Ao final do livro você terá
aprendido a desenvolver um conjunto de projetos que variam desde um simples pisca-pisca a um
controlador de servo mecanismos para uso em sistemas robóticos.
Este volume faz parte de uma série de tutoriais de programação de microcontroladores, que
estão sendo paulatinamente colocados em formato eletrônico e disponibilizados para cópia
individual. O material pode ser utilizado livremente por indivíduos ou instituições sem fim
lucrativo, devendo ser mantida sempre a obra integral, com os créditos do autor.
N este série de tutoriais você encontrará capítulos teóricos e capítulos com sugestões de
exercícios de laboratório. Cada exercício é acompanhado de propostas de projetos
baseadas nos pontos explanados. Não deixe de implementar de forma prática os exercícios,
tanto os já resolvidos como os propostos. Para realizar as práticas de laboratório você deverá ter
acesso a um computador do tipo IBM-PC, com o sistema operacional Windows ou Linux , e ser
capaz de ler esquemas eletrônicos, e de uma placa Powerboard2. A maioria dos experimentos pode
ser realizada com a placa mais custo, a Powerboard2 Light. Instrumentação básica para o
desenvolvimento de circuitos eletrônicos, tais como multímetro e osciloscópio, irão ajudar muito a
depuração dos circuitos, porém não são indispensáveis. Um conjunto de exercícios é deixada como
desafio ao estudante. Se você deseja comparar a sua resposta com a por nós sugerida, basta acessar
o site http://www.solbet.com.br , e procurar na seção Notas de aplicação. As respostas aos
problemas e mais informação adicionais sobre programação de microcontroladores estão lá
disponíveis para você.
A seguinte seqüência será adotada neste tutorial:
Introdução
Considerações Básicas sobre microcontroladores
Compreendendo a arquitetura do PIC16F877
Os experimentos podem ser avaliados utilizando apenas o simulador disponível no
MPLAB, mas sugerimos fortemente que você efetivamente monte os diversos circuitos
apresentados. Embora o simulador seja uma ferramenta fantástica para o desenvolvimento, a
experiência com o dispositivo real irá ampliar de forma significativa o seu aprendizado.
Você notará aqui vários termos em inglês. Escolhemos não traduzir alguns termos, visto ser
a nomenclatura inglesa mais utilizada em nosso meio. A tradução de alguns termos como STATUS,
RESET, CLOCK e outros similares iria apenas dificultar a quem está realizando este curso, a
compreensão dos conceitos envolvidos e seria de pouco valor para o projetista.
O que é um microcontrolador
P odemos pensar num microcontrolador como um dispositivo composto de sete partes, como
mostrado na figura 2-1. Os dados dentro de um microcontrolador são manipulados em
unidades chamadas palavras. O PIC16F877A possui palavras de dados de oito bits de
tamanho, e palavras de instrução de 14 bits. Este comprimento da palavra de instrução do
PIC16F877A permite que a maioria das instruções possa ser executada dentro de um único ciclo de
máquina, um dos motivos da grande velocidade que se consegue nestes microcontroladores.
CPU
MEMÓRIA DE PROGRAMAS MEMÓRIA DE DADOS
Figura 2-1. Microcontrolador básico
As origens do PIC16F877A
• Programa gravado em EEPROM, com até 1000000 de ciclos de apagamento e escrita, com
retenção garantida por mais de 40 anos.
• Trinta e três terminais de Entrada e Saída, com controle individual por terminal. Capacidade de
manipulação de corrente de 25 mA atuando como dreno e 20mA atuando como fonte.
•Dois temporizadores de oito bits programável, com pré-divisor também programável de oito bits.
•Um temporizador de 16 bits
Vamos inicialmente olhar para o PIC como uma “caixa preta”, aprendendo qual a função de
cada terminal do circuito integrado. Na tabela 3.1 temos o nome e a função de cada um dos
terminais:
Funcionalmente, podemos agrupar os terminais nos seguintes grupos:
♦
♦ Alimentação
♦ Entrada/Saída
♦ Clock
O clock se utiliza dos terminais 13 e 14. São possíveis várias configurações de clock, todas
elas descritas em detalhes mais adiante.
O terminal MCLR é uma entrada de controle com duas funções. Em primeiro lugar ele atua
como reset do microcontrolador. Esta função é ativada quando o nível lógico deste terminal for feito
igual a zero. A outra função é atuar como indicador de gravação da memória de programas. Para
isto a tensão neste terminal deve ser feita igual a 13.5 volts. Para a operação normal este terminal
deve ser mantido em cinco volts, ou na tensão de alimentação utilizada.
Observe que
a memória de
programa é
organizada em
quatro bancos. As
instruções de call e
goto operam apenas
dentro de um banco.
É preciso
complementar o
conteúdo do
contador de
programa caso
desejemos fazer um
goto ou um call para
uma página
diferente da que
estamos. Cada
página possui um
tamanho de
2Kbytes.
Você não tem acesso direto ao STACK. E além disso o microcontrolador não lhe avisa de
estouro (overflow ou underflow) do stack. É responsabilidade do programador se assegurar que o
stack está válido. Isto pode ser especialmente complicado na caso de rotinas recursivas (que
chamam a si mesmas) ou no tratamento de interrupção. Não existem as funções PUSH e POP
comuns a outros microcontroladores.
A ALU (unidade lógica e aritmética) é quem interpreta e executa as instruções armazenadas
na área de programas. Embora as instruções sejam de 14 bits, os dados são de oito bits. Todas as
instruções operam sempre sobre oito bits. A ALU trabalha em estreito relacionamento com o
registro W, onde grande parte das operações são realizadas ou tem neste registro o local de
armazenamento do resultado da operação. Para aqueles com conhecimento dos microprocessadores
8080 e Z80, o registro W é funcionalmente equivalente ao acumulador destes processadores.
Os demais blocos selecionados são os responsáveis pela sincronização das operações da
CPU, assim como garantem que, logo após a energização ou reset, a máquina assuma um estado
bem conhecido. Isto é muito importante para que o programador possa se assegurar das condições
que estarão presentes quando o seu programa começar a operar.
Um dos registros de grande importância para o aumento da confiabilidade de um programa
que deve operar em ambientes robustos a falhas é o temporizador de watchdog. O funcionamento
deste temporizador é o seguinte. Se o programa estiver executando corretamente, ele reinicializa o
watchdog dentro de períodos bem determinados. Se por algum motivo qualquer o programa entra
em loop ou se desvia do fluxo programado (por exemplo, devido a um transiente na alimentação), o
watchdog não será reinicializado, e quando o mesmo atingir o tempo limite , será gerado um
interrupt que reinicializará todo o sistema para uma condição segura.
O sistema de interrupts
P ara um programa tomar contato com algum evento externo, como por exemplo, um
interruptor que se fecha ou abre, existem duas maneiras. A primeira é ficar vigiando na porta
em que está ligado o interruptor, verificando se ocorreu alguma mudança, e a segunda é
utilizando os interrupts.
A primeira opção é muito simples de ser programada, mas tem uma grande desvantagem. A
CPU gasta muito tempo apenas vigiando a porta de entrada. Além do mais, se uma dada tarefa
toma muito tempo para ser executada, a chave pode mudar de estado mais de uma vez, fechando e
abrindo outra vez, sem que a CPU perceba.
Para evitar que a CPU perca a informação de alteração do sinal de entrada, pode-se utilizar
os interrupts. Programado desta maneira, quando ocorre o sinal na entrada, o programa é desviado
para uma posição fixa, no caso do PIC16F877 o desvio ocorre na posição 0x04H . Passa a ser
executado então o trecho do programa responsável pelo atendimento da interrupção. Após
processado a interrupção o sistema volta a executar o programa que estava sendo executado
anteriormente. Desta forma não gastamos tempo vigiando inutilmente a porta e não perdemos o
evento que desejamos processar.
As configurações do oscilador
J á vimos anteriormente que o PIC16F877 pode operar com quatro tipos de osciladores. Estas
configurações são necessárias para que o circuito funcione numa grande faixa de freqüências
(32Khz a 10MHz), e com diferentes dispositivos osciladores.
•Osciladores a cristal de baixa potência (LP)
•Osciladores a cristal/ressonadores cerâmicos convencionais (XT)
O sistema de reset