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