Seja bem vindo ao Robótica Fácil.
Aqui você poderá encontrar vários artigos relacionados a Robotica além de Projetos para você fazer em Casa e tudo isso simplesmente FACIL.

Microcontroladores

Hoje, estaremos começando uma nova etapa do robótica fácil. Estaremos começando a trabalhar com microcontroladores.
Como existem diversos tipos e formas de programá-los, não estarei abordando nenhum em especial nesta postagem, apenas mostrando o que é e para que eles servem em geral.

O que é um Microcontrolador ?
Os microcontroladores surgiram no princípio dos anos 80 e trata-se de um circuito integrado programável que contém toda a estrutura (arquitetura) de um microcomputador. Isto é, dentro de um microcontrolador podemos encontrar:

· Uma CPU (Unidade Central de Processamento)
· Memória RAM
· Memória ROM
· Memória EEPROM (Memória de leitura e escrita não volátil, isto é, que não se perdem dados quando o circuito é desconectado)
· Portas de Entrada/Saída (Pinos de E/S)
· Inclusive muitos modelos de microcontroladores incorporam diferentes módulos "periféricos", podem ser; conversores analógico/digital (A/D), módulos PWM (contrôle por largura de pulso), módulos de comunicação serial ou paralelo e muito mais.

Podemos encontrar tudo isso dentro do mesmo circuito integrado.
Cada vez mais existem produtos que incorporam microcontroladores com a finalidade de aumentar substancialmente seus recursos, reduzir seu tamanho e custo, melhorar sua confiabilidade e diminuir o consumo de energia.

PIC 
16F84A

Os Microcontroladores "PIC"
Os microcontroladores denominados "PIC" correspondem exclusivamente à marca "Microchip". PIC significa "Peripheral Interface Controler" e foi desenvolvido pela Microchip no início dos anos 80.
Existe uma grande quantidade de modelos de microcontroladores cujas características e recursos variam de um modelo para outro. Assim sendo, os projetista podem selecionar o modelo que melhor se ajuste a suas necessidades.
Os diferentes modelos de microcontroladores se agrupam por "família". Uma família pode ser formada por um conjunto de modelos cujas características e recursos são bastante similares.
Quando compramos um microcontrolador, a memória do mesmo se encontra "vazia" e para que funcione é necessário que seja "programado", ou seja, o projetista deve escrever um programa que contenha todos os processamentos que o microcontrolador deve executar.
Este programa se escreve em uma linguagem chamada "Assembler" (assemblador) cuja principal característica é sua alta complexidade ja que trata-se de um linguagem de "baixo nível", isto é, se encontra "mais próximo" à linguagem da máquina do que da linguagem humana.
Por isso, só os técnicos altamente capacitados estão em condições de realizar projetos eletrônicos que incluam microcontroladores. Cabe a estes especialistas um grande esforço intelectual e muito tempo de projeto.

Estrutura de um Microcontrolador
Básicamente, um microcontrolador esta composto pelos seguintes componentes:
· Processador o CPU (do inglês: Central Processing Unit ou Unidade Central de Processa-mento).
· Memória para o programa tipo ROM.
· Memória RAM para conter os dados.
· Linhas de E/S para comunicar-se com o exterior.
· Diversos módulos para o contrôle de periféricos (Temporizadores, Portas Série e Paralelo, CAD: Conversores Analógico/Digital, CDA: Conversores Digital/Analógico, etc.).

O processador ou CPU
É o elemento mais importante do microcontrolador e determina suas principais características, tanto a nível hardware como software. A CPU (Central Processing Unit ou Unidade Central de Processamento) se encarrega da decodificação e da execução do programa.

Atualmente, existem 3 tipos de arquitetura de processadores:

· CISC (Computadores com Conjunto de Instruções Complexas): Dispõem de mais de 80 instruções em seu repertório, algumas das quais são muito sofisticadas e potentes, requerendo muitos ciclos para sua execução. Uma vantagem dos processadores CISC é que oferecem instruções complexas que atuam como macros.

· RISC (Computadores com Conjunto de Instruções Reduzido): Nestes processadores o repertório de instruções é muito reduzido e as instruções são simples e geralmente se executam em um ciclo. A vantagem destes é que a simplicidade e rapidez das instruções permitem otimizar o hardware e o software do processador.

· SISC (Computadores com Conjunto de Instruções Específico): Nos microcontroladores destinados a aplicações muito concretas, o conjunto de instruções, além de ser reduzido, é "específico", ou seja, as instruções se adaptam às necessidades da aplicação prevista.

Memória ROM
A memória ROM é uma memória não volátil, isto é, não se perdem os dados ao desligar o equipamento e se destina a conter o programa de instruções que controla a aplicação. Os microcontroladores dispõem de capacidades de ROM compreendidas entre 512 bytes e 8 k bytes.
Existem diferentes tipos de memórias ROM, a qual determinará a aplicação do microcontrolador.

· ROM com janela: é uma memória não volátil só de leitura cujo conteúdo é gravado durante a fabricação do chip. Devido ao elevado custo do lay-out da máscara só é aconse-lhável o emprego dos microcontroladores com este tipo de memória quando se necessitam de quantidades superiores a várias milhares de unidades.
· OTP: o microcontrolador contém uma memória não volátil de só leitura "programável uma só vez" pelo usuário. OTP (One Time Programmable). É o usuário quem pode escrever o programa no chip mediante um simples gravação controlado por um programa de um PC. A versão OTP é recomendável quando é muito curto o ciclo de lay-out do produto, ou então, na construção de protótipos e séries muito pequenas. Tanto neste tipo de memória como na EPROM, pode-se usar a encriptação mediante fusíveis para proteger o código conteúdo.
· EPROM: Os microcontroladores que dispõem de memória EPROM (Erasabel Programmavel Read OnIy Memory) pode-se apagar e gravar muitas vezes. A gravação se realiza, como no caso dos OTP, com uma gravação controlada por um PC. Se, posteriormente, caso deseja-se apagar o conteúdo, possui uma janela de cristal em sua superficie pela qual se submete a EPROM a raios ultravioleta durante vários minutos. As cápsulas são de material cerâmico e são mais caros que os microcontroladores com memória OTP que são feitos com material plástico.
· EEPROM: São de memórias só de leitura, as quais podem-se escrever e apagar elétricamente. EEPROM (Electrical Erasabel Programmavel Read OnIy Memory). Tanto a programação como o apagamento, se realizam elétricamente do próprio gravador e sob o contrôle programado de um PC. É muito cômoda e rápida a operação de gravação e a de apagamento. Não possui uma janela de cristal na superficie. Os microcontroladores dotados de memória EEPROM uma vez instalados no circuito, permite gravar e apagar quantas vezes se queira sem ser retirado do referido circuito. Para isso se usam "gravações em circuito" que conferem uma grande flexibilidade e rapidez na hora de realizar modificações no programa de trabalho. O número de vezes que se pode gravar e apagar uma memória EEPROM são finitas, portanto não é recomendável uma reprogramação contínua. São muito práticos para o ensino e engenharia de desenvolvimento. Esta aumentando a tendência dos fabricantes de incluir uma pequena área de memória EEPROM nos circuitos programávels para guardar e modificar cômodamente uma série de parâmetros que adequam o dispositivo às condições do entorno. Este tipo de memória é relativamente lenta.
· FLASH: É uma memória não volátil, de baixo consumo, que se pode escrever e apagar. Funciona como uma ROM e uma RAM porém consomem menos e são menores. A diferença da ROM é que a memória FLASH é programável no circuito. É mais rápida e de maior densidade que a EEPROM. A alternativa FLASH é recomendada perante a EEPROM quando necessita-se de grande quantidade de memória de programa não volátil. É mais veloz e tolera mais ciclos de escrita e apagamento.

Memória RAM
A memória RAM é uma memória volátil, isto é, os dados se perdem ao desligar o equipamento, é destinada a guardar as variáveis e os dados. Os microcontroladores dispõem de capacidades de RAM compremdidas entre 20 e 512 bytes.

Registros e Bits
Um registro é uma posição de memória na qual pode-se armazenar um dado. Isto é, a memória está dividida em pequenas "partes" chamadas "Registros".
Dentro da memória, cada registro se identifica mediante um número, o qual se denomina "endereço de memória" e geralmente está expresso em formato Hexadecimal. O primeiro registro de uma memória cor-responde ao endereço 00H.
É muito complexo identificar cada registro mediante um número na hora de escrever o programa, existe a possibilidade de atribuir um "nome" a um endereço de registro. Em geral, este nome está diretamente relacionado com a função que cada registro cumpre dentro do sistema.
Os registros não são somente utilizados pelo programador (usuário) para armazenar os dados que a aplicação deve processar, sendo que servem também para controlar todo o funcionamento do microcontrolador no seu conjunto. Esta função é realizada por um conjunto de registros que ja vêm "pré-definidos" de fábrica. Isto é, o fabricante atribui as funções de configuração e contrôle do microcontrolador em um grupo de registros e o usuário não pode modificar a função que é realizada por cada um destes.
Cada Registro está dividido em 8 "partes" aos quais se denominam "Bits". Então podemos dizer que um Registro esta formado por um conjunto de 8 bits.
O Bit é a menor unidade de informação que um sistema digital pode processar e somente conter os valores lógicos 0 e 1.

A palavra BIT provém da contração das palavras "Binary Digit".

Os sistemas digitais representam a informação em forma de bits porque seus circuitos só podem ter 2 estados: aceso ou apagado.
Em geral podemos dizer que:

1 = Aceso = Verdadeiro = "SIM" = +5V
0 = Apagado = Falso = "NÂO" = 0V

Cada Bit se identifica pela posição que ocupa dentro do registro, sendo o Primeiro Bit o número 0, que é o que se encontra na extrema direita do registro.

REGISTRO: | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |

Assim como nos registros, pode-se atribuir um nome a cada Bit para facilitar sua identificação.
Em um registro pode-se armazenar uma combinação de 8 "zeros" e "uns". Isto nos da uma quantidade de 2^8 combinações , isto é, 256 possíveis combinações de zeros e uns.
Isto significa que um registro pode processar valores entre 0 e 255.

Esta característica de processar números ("Dígitos") é o que da o nome à "Eletrônica Digital". A eletrônica digital processa números formados por combinações de zeros e uns. Qualquer sinal analógico deve ser "digitalizado", isto é, convertido em números, para poder ser processado em um sistema digital.

Podemos dizer que o conjunto de zeros e uns armazenados em um registro é um número entre 0 e 255, expresso em sistema Binário, isto é, em base 2. Para interpretar tal número devemos realizar o cálculo de conversão de base para poder expressá-lo em sistema decimal.

O seguinte exemplo mostra o desenho de um cálculo de conversão de base de sistema binário (base 2) a sistema decimal (base 10):

10001000 = 0x2^0 + 0x2^1 + 0x2^2 + 1x2^3 + 0x2^0 + 0x2^1 + 0x2^2 + 1x2^3
10001000 = 0 + 0 + 0 + 8 + 0 + 0 + 0 + 128
10001000 = 136

Chama-se "Pêso Binário" o valor que remostra um Bit segundo a posição que ocupa dentro do registro. O Bit que está localizado mais à direita do registro, é o Bit menos significativo (LSB, Least Significant Bit) e têm um pêso de 2^0=1. O Bit do extremo esquerdo do registro é o Bit mais significativo (MSB, Most Significant Bit) e têm um pêso de 2^7=128. Os pêsos binários crescem da direita para a esquerda em potências de 2.

Mais Significativo Menos Significativo
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |

Uma maneira de simplificar o cálculo de conversão de binário para decimal é, somar diretamente os valôres dos pêsos binários dos bits cujo valor seja 1.

| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | Peso binário dos registros
| 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | Valor a ser calculado
| 128 | 0 | 0 | 0 | 8 | 0 | 0 | 0 | Somar os pesos binarios

128 + 8 = 136

O sistema hexadecimal é um sistema em base 16 e consta de 16 dígitos diferentes que são: do 0 ao 9 e depois da letra "A" até "F", isto é, 10 dígitos numéricos e seis caracteres alfabéticos.
O sistema hexadecimal é utilizado como forma simplificada de representação de números binários e devido a que 16 é uma potência de 2 (2^4=16), portanto é muito simples a conversão dos números do sistema binário ao hexadecimal e vice-versa.
Mediante o sistema hexadecimal podemos converter um valor numérico de 8 bits utilizando só 2 dígitos. Desta maneira estamos dividindo o registro de 8 bits em 2 partes de 4 bits cada uma chamada Nibble. O nibble correspondente aos 4 bits menos significativos, é denominado "Nibble Baixo" e o nibble correspondente aos 4 bits mais significativos é denominado "Nibble Alto".

O sistema hexadecimal é utilizado para identificar os endereços de registros das memórias em sistemas digitais porque permite converter o valor de um Nibble com só 1 digito, ja que:

1111 -> (8+4+2+1) = 15 = F

Isto permite converter números grandes utilizando poucos dígitos.
Por exemplo:

FF FF = 11111111 11111111 = 65535

Na programação de microcontroladores, é habitual utilizar os 3 sistemas de numeração (Binário, Decimal e Hexadecimal) dependendo do processamento que necessitamos realizar. Por isso é fundamental ter claros estes conceitos.

Linhas de Entrada/Saída (E/S), (Portas)Os microcontroladores contam com uma série de pinos destinados a entrada e saída de dados ou sinais digitais. Estes pinos são denominados de "Porta".
Como mencionamos anteriormente, todo o funcionamento do microcontrolador está controlado através dos registros. As portas não são uma exceção, também são controladas pelos registros. Por isso, uma porta não pode ser formada por mais de 8 pinos; 1 pino por cada Bit de um registro. Uma porta pode ser formada por menos de 8 pinos.
Um microcontrolador pode conter várias portas dependendo do modelo.
Cada porta é identificada com uma letra. Por exemplo; "Porta A", "Porta B", etc.
Para poder utilizar uma porta, primeiro a mesma deve ser configurada. Cada pino de uma porta pode ser configurado como entrada ou saída independentemente do resto dos pinos da mesma porta.

Módulos Temporizadores Internos (TMRs)
Um temporizador interno (TMR) é um módulo de hardware incluído no mesmo microcontrolador o qual é especialmente projetado para incrementar automáticamente o valor de um registro associado ao TMR cada vez que o módulo TMR recebe um pulso. Este pulso é chamado "sinal de relógio".

O módulo TMR sempre incrementa o valor do registro associado, nunca decrementa o referido valor.

Alguns microcontroladores podem incluir mais de um módulo TMR e o sinal de relógio de cada um destes pode ser de origem interna ou externa.
Se a origem do sinal de relógio está configurada como externa, o módulo temporizador pode ser utilizado como um contador de eventos externos, incrementando o TMR com cada pulso recebido mediante o pino correspondente.
Se a origem do sinal de relógio é interna, o TMR incrementa com cada ciclo do oscilador. Isto permite utilizar o temporizador como "contador de ciclos de programa", onde, um ciclo corresponde ao tempo de execução de uma instrução, o qual pode-se calcular com a seguinte fórmula:

( 1 / ( Freq. Osc. / 4) )

Onde "Freq. Osc." é a frequência do oscilador utilizado.
Dado que a velocidade de execução do microcontrolador corresponde a ¼ da velocidade do cristal utilizado, cada ciclo de programa se executa em um tempo determinado segundo o cristal que estamos utilizando.
Por exemplo; com um cristal de 4Mhz a velocidade real de processamento do microcontrolador é de 1 Mhz. Aplicando a seguinte fórmula =

1 / (4.000.000 / 4)
1 / 1.000.000
0.000001 = 1 uS (microsegundo)

Isto significa que cada ciclo de programa se executa em 1/1.000.000 (1 uS) e dado que cada incremento do TMR corresponde a um ciclo de programa, se contamos os incrementos de um TMR, indiretamente podremos calcular o tempo transcorrido.
O incremento do TMR se realiza automáticamente e de forma paralela na execução do resto do programa. Isto significa que o programa não deve "controlar" o incremento do TMR, o qual deve ser realizado nas temporizações por blocos, nas quais o microcontrolador se mantem "esperando" até que transcorra um tempo, e não é possível executar outras tarefas enquanto não finalizar a temporização.

Então o TMR pode ser utilizado como temporizador enquanto o microcontrolador executa outros processamentos.
Por exemplo: Se elaborarmos um programa que acenda e apague um led cada 1 segundo, o microcontrolador acende o led e depois pode se ocupar de esperar até que transcorram os ciclos correspondentes a 1 segundo, depois apaga o led e continua esperando.

Porém se o microcontrolador deve realizar alguma outra tarefa além de de temporizar, por exemplo, mostrar valores em dígitos de 7 segmentos, o micro não pode permanecer temporizando por blocos ja que enquanto se encontra temporizando não poderá realizar o processamento de mostrar os dados nos displays, e como resultado teremos que os displays se apagam enquanto o microcontrolador se encontra temporizando.

Neste caso, se utiliza um TMR para realizar a temporização enquanto o microcontrolador se ocupa de mostrar os dados nos displays.

Template by - Nick | Baixarbr - Revolucionando a web