Estrutura interna de um microcontrolador
Um
m microcontrolador é composto por um conjunto de periféricos interligados a
uma unidade de processamento e todo este conjunto confere a este componente uma
versatilidade que torna possível sua aplicação nas mais diversas situações, ou seja,
equipamentos. Nos subitens a seguir são apresentados os periféricos mais relevantes
encontrados em microcontroladores.
1. Unidade de memória
A memória é o elemento do microcontrolador cuja função é armazenar dados.
Uma analogia que facilita a compreensão é descrevê-la através de um armário cheio de
gavetas. Se marcarmos as gavetas para evitar que possamos confundir umas com
c
as
outras,, então o seu conteúdo será facilmente acessível. Basta conhecer a designação da
gaveta e o seu conteúdo estará disponível.
disponível
Desta forma, a memória é o conjunto de todas
tod as gavetas, palavras de memória,
memória
e a marcação de cada gaveta consiste num endereço específico desta memória, portanto,
para se selecionar uma determinada palavra de memória é necessário ter conhecimento
prévio do endereço da palavra em questão.. Isto significa que precisamos selecionar o
endereço desejado,, gaveta, e esperar que o conteúdo desse endereço nos seja
apresentado, abrir a gaveta. Além de ler de um local da memória,
memória ler o conteúdo da
gaveta, também é possível escrever num endereço da memória,
memória introduzir um conteúdo
na gaveta. Isto é feito utilizando uma linha adicional chamada
chamada linha de controle,
controle
designada por linha R/W,, “read/write” ou leitura/escrita.. A linha de controle,
controle para
alguns tipos de memórias, é usada do seguinte modo: se r/w = 1, é executada uma
operação de leitura, caso contrário é executada uma operação de escrita
escrita no endereço de
memória. Uma representação de uma unidade de memória é apresentada na Figura 1.
Figura 1 - Unidade de memória.
2. Unidade
ade central de processamento,
processamento UCP, ou unidade lógica aritmética,
aritmética ULA
Considere um bloco específico composto, por exemplo, por três palavras de
memória que nos permitem realizar diversas operações como multiplicar, dividir,
subtrair e mover os seus conteúdos de um local de memória para outro. Este bloco
recebe o nome de Unidade Central de processamento, ou "Central Processing
P
Unit",
CPU, e os locais de memória nela contidos chamam-se
chamam registradores, Figura 2.
Figura 2 - Representação simplificada da CPU.
Os registradoress são, portanto, locais de memória cujo papel é ajudar a executar
várias operações matemáticas ou quaisquer
quaisquer outras operações com dados,
independentemente dos locais em que estes se encontrem. Alguns registradores
registr
também
são utilizados para armazenar a situação atual do microcontrolador,, ou seja, como
sinalizadores ou “flags”.
De acordo com o apresentado até
at o momento, temos duas entidades
independentes, memória e CPU. Se, por exemplo, for necessário adicionar os conteúdos
de dois locais de memória e armazenar o resultado em alguma outra posição na
memória, será necessária uma interligação entre a memória e a CPU. Sendo assim, é
imprescindível fornecer um “caminho elétrico” através do qual os dados possam passar
de um bloco para outro.
3. Barramentos ou BUS
O barramento consiste no “caminho elétrico” citado no item anterior,
anterior Figura 3.
Fisicamente ele é composto por um grupo de 8, 16 ou mais condutores, linhas.
Existem dois tipos de barramento, o de dados e o de endereços. O número de
linhas do barramento de endereços depende
nde da quantidade de memória que desejamos
endereçar e o número de linhas do barramento de dados da largura da palavra de dados.
Por exemplo, um barramento
mento de dados de 16 linhas, ou 16 bits, é capaz de endereçar 216
palavras de memória, portanto, 65536 palavras.
pal
Por outro lado, um barramento de dados
de 8 bits é capaz de transmitir uma palavra de memória composta por 8 bits, ou seja, 1
byte, por vez.
Com o apresentado até o momento, temos uma maior funcionalidade deste
componente, mas uma questão ainda precisa
precisa ser resolvida. Embora este componente
seja capaz de trabalhar sozinho o mesmo é a incapaz de lidar com o “mundo exterior”,
ou seja, não possui utilidade prática. Para sanar esta deficiência, é necessário adicionar
um bloco que contém várias localizações
localizações de memória e que, de um lado, está ligado ao
barramento de dados e do outro às linhas de saída do microcontrolador que coincidem
com pinos do circuito integrado e que, portanto, são acessíveis através de seus pinos.
Figura 3 - Barramentos de dados e endereços.
4. Unidade
nidade de entrada e saída
As localizações de memória mencionadas no parágrafo anterior consistem nas
n
portas do microcontrolador. Existem vários tipos de portas, as de saída, de entrada e as
bidirecionais de entrada/saída,
entrada/saí
Figura 4. Para utilizar as portas, inicialmente, é
necessário informar ao microcontrolador qual a porta pretendemos acessar e em seguida
enviar ou ler os dados sob as mesmas.
Figura 4 - Representação da Unidade de Entrada e Saída, E/S.
5. Interface de comunicação serial
seria
No item anterior, acrescentamos ao microcontrolador a possibilidade de
comunicação com o “mundo exterior”. Contudo, a forma de comunicação apresentada
tem como inconveniente o fato de ser caracterizada por uma comunicação paralela,
onde é necessário um meioo físico ou linha que consistem em condutores
condutor para cada um
dos bits a serem transferidos. Considerando a possibilidade transferitransferi-los a distâncias
elevadas, por exemplo, alguns metros ou centenas de metros,, a quantidade de
condutores necessários seria proibitiva.
proibitiva. Para contornar este problema é necessário
reduzir o número de linhas, mas mantendo as características de comunicação entre as
partes. Consideree a possibilidade de se utilizar apenas três linhas,, sendo que uma é
utilizada para enviar dados, outra para
para receber e a terceira é usada como linha de
referência. Para que isto funcione precisamos definir regras para a troca de dados, sendo
estas regras conhecidas como protocolo de comunicação.
Este protocolo deve ser definido com antecedência de modo que não haja
desentendimento entre as partes envolvidas na comunicação. Por exemplo, se um
homem fala em francês e o outro em inglês, são poucas as chances de que a
comunicação seja eficiente entre eles. No caso do microcontrolador vamos
v
supor o
seguinte protocolo, a linha de transmissão é mantida em nível lógico "1" na ausência de
comunicação entre as partes. Caso uma transferência seja iniciada por qualquer uma das
partes, instantes antes do início da transmissão a parte responsável pela transmissão
coloca a linha de transmissão em nível lógico “0” por um período de tempo “T”
determinado,, sinalizando para a parte receptora sua intenção de transmitir
transm dados, neste
instante o receptor irá se preparar para receber os dados, o transmissor por sua vez envia
através desta linha oito bits e ao final deste processo coloca a linha de transmissão
novamente em nível lógico “1”,
“ desta forma ele indica para o transmissor o término da
transmissão de um “byte”.
“byte” Este protocolo é conhecido como NRZ (Não Retorno a
Zero).
Figura 5 - Representação simplificada de
uma unidade de comunicação serial.
Uma vez que dispomos de duas linhas separadas,
separadas, uma para recepção e outra para
transmissão é possível enviar e receber
eceber dados simultaneamente. O bloco que possibilita
este tipo de comunicação é chamado de unidade de comunicação seri
rial, Figura 5. Ao
contrário da transmissão em paralelo, aqui os dados movem-se
movem se bit após bit em série, daí
da
a origem do termo comunicação serial. Depois de receber os dados é necessário
armazená-los na memória.. No caso da transmissão o processo é inverso,
inverso ou seja, os
dados provenientes da memória,
memória através do barramento, são enviados para a interface de
comunicação, atuando como transmissor, e dali para a interface de comunicação do
outro equipamento, atuando como receptor de acordo com o protocolo.
6. Unidade de temporização
Uma vez que a interface de comunicação serial foi implementada podemos
enviar, receber e processar os dados. Contudo, para aplicações industriais é necessário
prover mais alguns blocos ao nosso componente.
compon
Um destes blocoss é o de temporização
que torna possível lidar com informações relacionadas ao tempo, como duração de um
evento, temporização para implementação do protocolo de comunicação e muitas outras
aplicações.. A unidade básica do temporizador é um contador que na realidade consiste
em um registro cujo conteúdo é incrementado em uma unidade num intervalo de tempo
fixo, assim, anotando o seu valor durante os instantes de tempo “T1” e “T2” e calculando
a sua diferença, obtêm-se o tempo decorrido, Figura 6.
Figura 6 - Representação da unidade de temporização.
7. “Watchdog”
Uma questão de grande interesse em aplicações mais críticas é a garantia da
correta execução do programa pelo microcontrolador durante a sua utilização. Suponha
que devido a algum tipo de interferência ou temperatura elevada, o que é comum em
ambientes industriais, o microcontrolador pare de executar o programa ou opere de
forma inadequada, realizando comandos não esperados, o que seria ainda pior, podendo
trazer conseqüências materiais ou até mesmo humanas.
Este tipo de situação também pode ocorrer em um computador, mas neste caso,
temos a opção consciente de efetuar um “reset” no mesmo e após o carregamento do
sistema operacional, voltamos a realizar a tarefa normalmente. Contudo, no caso dos
microcontroladores não podemos contar com a possibilidade de realizar um “reset”
manual pelos mais diversos motivos, falta de acesso ao equipamento, inexistência do
botão de “reset” e outros. Para resolver esta questão é necessário introduzir um novo
bloco em nosso componente conhecido como “wacthdog” ou “cão de guarda”. Este
bloco é de fato outro contador que está continuamente sendo incrementado e que o
programa em execução no microcontrolador leva à zero periodicamente, deste de que o
programa esteja sendo executado corretamente. No caso de algum travamento do
programa este não irá zerar o contador do “watchdog” e um estouro do mesmo irá
ocorrer o que irá reiniciar automaticamente o microcontrolador, levando a execução
correta do programa, Figura 7. Este é um elemento importante para que qualquer
programa e todo o sistema sejam confiáveis dentro de sua aplicação.
Figura 7 - O sistema de "watchdog".
8. Conversor analógico digital
Considerando que os sinais presentes na natureza são analógicos e que,
que além
disto,, os provenientes de outros equipamentos são substancialmente diferentes dos
sinais digitais que o microcontrolador é capaz de processar, estes
es devem ser convertidos
para o formato digital compreendido pelo microcontrolador. Esta tarefa é executada por
intermédio
ermédio de um bloco destinado à conversão analógica-digital,
analógica
ou conversor A/D,
A/D
Figura 8. Este bloco é responsável pela conversão de uma informação de valor
analógico para um número binário e pelo seu envio até a CPU, de modo que esta possa
realizar o processamento pertinente deste sinal.
Figura 8 - Unidade de conversão analógica/digital.
Finalmente, considerando os itens apresentados, neste ponto a configuração do
microcontrolador já está concluída, faltando apenas introduzi-lo
introduzi lo em um circuito
eletrônico que irá acessar os blocos internos apresentados através dos pinos do
microcontrolador. A Figura 9, ilustra o aspecto interno de um microcontrolador, as
linhas mais finas que partem do centro em direção à periferia do microcontrolador
correspondem aos fios que interligam os blocos interiores aos pinos do encapsulamento
deste componente.
Figura 9 - Aspecto interno de um microcontrolador.
Ressalta
A Figura 10 apresenta o diagrama completo de um microcontrolador. Ressalta-se
que nem todos os blocos apresentados estão presentes em todos os microcontroladores e
que, além disto,, alguns modelos de componentes
componentes podem conter outros tipos de blocos
que não estão apresentados nesta
nest figura.
Figura 10 - Diagrama completo de um microcontrolador.
Em uma aplicação real, um microcontrolador, por si só, não é suficiente. Além
dele, é necessário o programa que será executado.
9. O Programa
O desenvolvimento do programa é parte especial do trabalho com
microcontroladores que o diferencia de outras classes de componentes, e é designado
por "programação". A seguir é apresentado um exemplo de programa escrito em uma
linguagem fictícia, apenas para facilitar nosso entendimento.
INICIO
REGISTRADOR_1 = LOCAL_DE_MEMORIA_A
REGISTRADOR_2 = LOCAL_DE_MEMORIA_B
PORTA_A = REGISTRADOR_1 + REGISTRADOR_2
FIM
O programa adiciona os conteúdos de dois locais de memória e coloca a soma
destes conteúdos na porta A. A segunda linha do programa move o conteúdo do local de
memória, "A", para o registrador 1 da unidade central de processamento. Como
necessitamos também de outro operando, a terceira linha move o conteúdo do outro
local de memória,“B”, para o registrador 2 da unidade central de processamento (UCP
ou CPU). A instrução seguinte pede a CPU para adicionar os conteúdos dos dois
registros e enviar o resultado obtido para a porta A, de modo que o resultado desta
adição seja visível para o mundo exterior.
A tarefa de programação pode ser executada em várias linguagens tais como o
Assembler, C e Basic que são as linguagens normalmente mais usadas. O Assembler
pertence ao grupo das linguagens de baixo nível que implicam em um trabalho de
programação lento e muitas vezes cansativo, mas que oferece os melhores resultados
quando se pretende poupar espaço de memória e aumentar a velocidade de execução do
programa. Os programas na linguagem C são mais fáceis de escrever e compreender,
mas, também, são mais lentos quando comparados com os programas em Assembler.
Por sua vez, a linguagem Basic é a mais fácil de todas e as suas instruções são
semelhantes à maneira de um ser humano se expressar, mas tal como a linguagem C, é
também de execução mais lenta que o Assembler. Em qualquer caso, da escolha entre
uma destas linguagens, e necessário examinar cuidadosamente os requisitos de
velocidade de execução, de espaço de memória e o tempo de desenvolvimento
necessário.
Uma vez concluído o programa é necessário gravar o mesmo em um
microcontrolador para ser executado. Para isto é necessário adicionar mais alguns
componentes externos. A seguir damos “vida” ao microcontrolador fornecendo-lhe a
alimentação necessária a seu funcionamento e o oscilador que tem a função de
determinar a cadencia de execução do programa. Uma vez energizado o
microcontrolador executa um procedimento de autoteste e a seguir vai para o início do
programa e começa a executá-lo, linha por linha. O modo como o dispositivo vai
trabalhar depende de muitos parâmetros, sendo o mais importante o conhecimento do
programador e do desenvolvedor do hardware onde o microcontrolador irá operar
visando garantir o máximo de eficiência de todo o sistema.
Primeira lista de exercícios de Microcontroladores
1 – Qual a função dos seguintes blocos constituintes de um microcontrolador:
a)
b)
c)
d)
e)
f)
g)
Unidade de memória;
UCP ou ULA;
Barramento;
Unidade de entrada e saída;
Unidade de comunicação serial;
Unidade de temporização;
Conversor A/D;
2 – Em que consiste o “watchdog” de um microcontrolador?
3 – Diferencie comunicação paralela de serial.
4 – Quais as vantagens da programação em linguagem C em relação ao Assembler?
5 – Em que situações a linguagem Assembler é mais adequada que a linguagem C?
6 – Qual a função do oscilador em um microcontrolador?
7 – Qual a função do terra (GND) para a comunicação entre dois equipamentos?
8 – Quais são as portas do microcontrolador PIC18F4550?
9 – Quais as características do conversor A/D do PIC18F4550, ou seja, qual a sua
resolução em bits e o número de canais?
10 – Qual a função do pino /MCLR do microcontrolador PIC18F4550?
11 – O que vem a ser um registrador?
Pinos do Microcontrolador PIC18F4550
Download

Apostila - Microcontroladores