quarta-feira, 27 de abril de 2016

Microprocessadores x Microcontoladores... Existe diferença?

Depois de falar sobre o básico da eletrônica digital, está na hora de falar um pouco sobre circuitos mais complexos.
Neste post vamos identificar e diferenciar Microprocessadores e Microcontroladores assim como seus possíveis usos.

Microprocessador: O "Cérebro" da computação.

Para que um circuito eletrônica possa realizar alguma tarefa de forma organizada é necessário que ele seja programado, um programa é uma sequência de regras lógicas a serem seguidas com o objetivo de realizar alguma atividades.
Um circuito que realiza essa atividade é chamado de Microprocessador, ele é o que chamamos de "Cérebro" do computador ou equipamento, já que ele é quem segue a sequência que foi determinada previamente.
Para que um programa seja executado ele precisa estar armazenado em algum lugar, nos microcomputadores eles ficam em uma memória externa como um Disco Rígido, Pendrive ou Mídia de CD/DVD. Mas esse programa não pode ser executado pelo microprocessador enquanto está nesse tipo de armazenamento, então a forma de executar um programa é fazer uma cópia do seu conteúdo para a memória principal (também chamada de memória RAM).
Dessa forma vemos que o "Cérebro" possui uma unidade que interpreta as instruções (Microprocessador) e outra que "lembra" dessas informações (As memórias RAM ou ROM).
Vamos criar um exemplo fictício e didático apenas para mostrar como os comandos poderiam ser tratados e executados por um Microprocessador, antes veja as seguintes considerações importantes sobre este exemplo:
1) Cada instrução possui um valor numérico equivalente, já que na memória só é possível armazenar números.
2) Um registrador interno é o local dentro do Microprocessador onde um valor pode ser armazenado temporariamente.
3) A memória é endereçada por meio de números (nesse exemplo usei a notação decimal, mas o comum é usar em hexadecimal).
4) Nesse exemplo tanto o programa como os dados são armazenados na mesma memória, mais adiante mostrarei que isso depende da arquitetura do Microprocessador.
5) Cada instrução aqui está ocupando dois bytes, mas em um caso real diferentes instruções usam quantidades diferentes de bytes, isso só depende de como o Microprocessador foi projetado. O primeiro byte indica qual instrução deve ser executada e o segundo indica qual o parâmetro para essa instrução.
6) O endereçamento inicial é a posição de memória 01 e será assumido como o endereço inicial para que a rotina seja executada, geralmente os endereços reais começam em zero. Esse programa já está armazenado em algum tipo de memória acessível ao Microprocessador como ROM, RAM ou Flash.

Considerações sobre portas de entrada/saída nesse exemplo:
A porta 01 está ligada um botão e o valor lido nessa porta pode ser 0 (botão não pressionado) ou 1 (botão pressionado)
A porta 02 está conectada a um LED, quando a porta estiver em 0 o LED estará apagado e quando estiver em 1, aceso.
obs: em um dispositivo real é provável que sejam necessários diversos circuitos extras para ligar tanto as portas de I/O quanto às memórias RAM ou ROM ao Microprocessador, mas não vamos abordar esse assunto aqui por enquanto.

As instruções disponíveis no microprocessador são:
    Código da instrução: Mnemônico - Descrição
    01: IN  XX - Leia o estado da porta XX e armazene em um registrador interno.
    02: CMP XX - Compare o valor do registrador interno com o valor XX.
    03: JE  XX - Se a última comparação foi igual, pule para o endereço XX.
    04: OUT XX - Armazena o valor do registrador interno na porta XX.
    05: JMP XX - Salta para o endereço XX.
    06: MOV XX - Movimenta o valor XX para dentro do registrador interno.
    07: LD  XX - Carrega para o registrador o conteúdo da memória em XX.
    08: ST  XX - Armazena na memória em XX o valor do registrador interno.

obs: Mnemônicos são representações na forma de siglas dos comandos que são entendidos por um Microprocessador, esse conjunto é definido pelo fabricante e equivale a uma configuração de bits que instrui como devem ser executados os comandos.

O programa a seguir verifica se o botão está pressionado, se estiver faz com que o LED fique piscando.   
    Posição: Conteúdo - Mnemônico # Comentário
    01: 06 00  -  MOV 00  #  Zera o registrador
    03: 08 31  -  ST 31   #  Armazena o zero na variável
    05: 01 01  -  IN  01  #  Lê o valor da porta 1 (botão)
    07: 02 00  -  CMP 00  #  Verifica se botão não pressionado
    09: 03 05  -  JE 05   #  Se não estiver, salta para INI
    11: 07 31  -  LD 31   #  Lê a variável
    13: 02 00  -  CMP 00  #  Compara se é zero
    15: 03 23  -  JE  23  #  Pula, se for zero
    17: 06 00  -  MOV 00  #  Coloca 0 no registrador
    19: 08 31  -  ST 31   #  Salva na variável
    21: 05 27  -  JMP 27  #  Volta para piscar o LED
    23: 06 01  -  MOV 01  #  Coloca 1 no registrador
    25: 08 31  -  ST 31   #  Salva na variável
    27: 04 02  -  OUT 02  #  Alterna o LED na porta 2
    29: 05 05  -  JMP 05  #  Volta para o início
    31: 00


A primeira coluna mostra o número do endereço de memória, em seguida vem os bytes que representam o código a ser entendido pelo Microprocessador e em seguida o seu parâmetro.
Tente ler o código e observar como o programa se comporta.

Observe que a posição 31 não possui instrução, ela é usada como um local de armazenamento de dados, contém o estado atual do LED (aceso ou apagado) para fazer ele piscar. Essa arquitetura que armazena programas e dados na mesma memória é chamada de arquitetura de Von-Neumann e é usada nos microprocessadores dos computadores pessoais da atualidade. Isso quer dizer que quando usamos uma memória RAM ela é usada para armazenar tanto os programas que serão executados quanto os dados que são usados por estes programas.
Mas existe também a arquitetura Harvard em que o Microprocessador possui uma ligação com um barramento de memória para programas e outro barramento diferente para dados. Isso significa que eles não são armazenados no mesmo local. Cada uma possui suas vantagens e desvantagens características.

Esse tipo de codificação de comandos em mnemônicos é conhecido como linguagem Assembly, o programa que faz a "montagem" (ou seja, converte os mnemônicos em valores binários entendíveis pelo Microprocessador) são chamados de Assembler, como os mnemônicos variam de um Microprocessador para outro, a linguagem Assembly também varia. Na prática podemos criar os programas usando uma linguagem de programação mais simples e de mais alto nível, como a linguagem C, por exemplo, e usar um programa chamado "compilador" para converter nosso programa que está escrito na forma de texto em um arquivo binário que contém as instruções que o Microprocessador entendem e que são equivalentes ao programa que escrevemos.

Microcontrolador: Mais próximo ao Hobby e ao hardware.

Agora vamos falar um pouco sobre os Microcontroladores. Estes circuitos integrados são muito importantes para quem quer usar a eletrônica como hobby, eles implementam um pequeno computador quase completo em um único circuito integrado. Em geral eles possuem um Microprocessador, memória RAM, memória Flash (onde os programas são armazenados e executados), portas de I/O digitais, alguns possuem portas analógicas e PWM (esse último tipo vale uma postagem só sobre esse assunto, vou deixar para explicar depois).
Dentre os circuitos Microcontroladores mais usados na atualidade temos a linha PIC da Microchip e os AVR da Atmel que são o núcleo das famosas placas Arduino.
Os Microprocessadores da linha ARM são os mais comuns em dispositivos móveis como Smartphones e Tablets, mas geralmente a indústria não utiliza esse Microprocessador na forma de um circuito integrado discreto, geralmente eles utilizam um circuito chamado SoC (System on Chip) onde além do Microprocessador eles colocam no mesmo integrado outros circuitos para controlar o acesso à memória, unidades de cartão SD, gráficos, touchscreen, som e etc.

Utilizar Microprocessadores em um projeto de hobby é impraticável, eles necessitam de muitos outros circuitos adicionais e tornam o projeto muito complexo. Por outro lado os Microcontroladores foram feitos para suprir essa necessidade, eles operam em uma velocidade muito inferior, possuem menos recursos mas são suficientes para a maioria dos projetos, desde pequenos robôs, impressoras 3D e drones esses circuitos podem fazer muita coisa, mas quando isso não for suficiente podemos criar um sistema híbrido (que também é um bom tema a ser explorado em outra postagem) onde podemos usar um celular como processamento central e um microcontrolador como interface com dispositivos de hardware ou controlar ele por meio de um computador usando uma comunicação WiFi.

Nenhum comentário:

Postar um comentário