Escolar Documentos
Profissional Documentos
Cultura Documentos
Microcontrolador PIC
Microcontrolador PIC
Os PICs são populares, tanto industrialmente como para hobbystas graças ao seu
baixo custo, ampla disponibilidade, grande base de usuários, extensa coleção de
notas de aplicação, disponibilidade de ferramentas de desenvolvimento de baixo
custo ou grátis, e capacidade de programação serial e reprogramação com memória
flash.
História
As raízes dos PICs se originaram na universidade de Harvard com um projeto para o
Departamento de Defesa, mas este foi vencido por um projeto de memória mais simples
(e mais confiável na época) da Universidade de Princeton. A arquitetura de Harvard
foi primeiramente usada no 8x300 da Signetics, e foi adotada pela General
Instruments para uso como interface controladora de periféricos (PIC) que foi
projetada para compensar o fraco barramento de I/O da sua CPU CP1600 de 16 bits. A
divisão de microeletrônica foi depois transformada na Arizona Microchip Technology
(por volta de 1985), com os PICs como seu produto principal. Os PICs tinham um
grande conjunto de registradores (de 25 a 192 registradores de 8 bits, comparado
com os 144 do Z8). Existem até 31 registradores diretos, mais um acumulador W,
embora R1 a R8 também tenham funções especiais - R2 é o PC (com uma pilha implicita
de 2 a 16 níveis), e R5 a R8 controlam as portas de I/O. R0 é mapeado no
registrador R4 (FSR) e serve como apontador (semelhante ao ISR no F8, ele é o único
meio de se acessar o registrador R32 ou acima).
O PIC 16x é uma variante interessante do projeto de 8 bits feita por volta de 1985
pela General Instruments com técnicas de projeto mais inovadoras do que a de outras
CPUs da lista (o 1650, o sucessor do 1600 mais comum). Ela perdeu para outras CPUs
mais populares e foi posteriormente vendida para a Microchip Technology, que ainda
o vende para pequenas aplicações em sistemas embarcados. Um exemplo deste
microcontrolador é uma pequena placa chamada Basic Stamp. que consiste em 2
circuitos integrados (1 PIC 16C56 de 18 pinos, um interpretador Basic em 512
palavras de ROM e uma memória EEPROM serial de 256 bytes) com uma porta de I/O onde
os programas do usuário podem ser armazenados (por volta de 80 linhas de comando de
Basic).
No final dos anos 80, a General Instruments fez uma grande revisão no seu negócio e
se restruturou, deixando para se concentrar nas suas atividades principais, que
eram essencialmente semicondutores de potência. A Divisão de Microeletrônica da
General Instruments se tornou a General Instruments Microelectronics Inc.
(subsidiária integral), da qual 85% foi finalmente vendida para alguns
investidores, incluindo a fábrica em Chandler, no Arizona. O pessoal desses
investidores analisou profundamente a linha de produtos e fez uma limpeza na
maioria deles, como a linha AY3 e AY5 e outros produtos, restando como negócio
principal os PICs e as EEPROMs paralelas. Houve uma decisão de reiniciar uma nova
empresa, chamada Arizona Microchip Technology.
PIC1655A-748
Como parte da estratégia, a família NMOS PIC165X foi reprojetada para usar um
recurso em que a empresa era muito, o EPROM, o conceito de ser baseado em CMOS,
one-time-programmable e assim a família PIC16C5X de memória de programa EPROM
apagável tinha nascido.
O PIC original foi fabricado para ser usado com a nova CPU de 16 bits da General
Instruments, o CP1600. Apesar de ser uma boa CPU, o CP1600 tinha fraco desempenho
de portas de I/O, e o PIC de 8 bits foi desenvolvido em 1975 para melhorar o
desempenho do sistema em geral liberando as tarefas de I/O da CPU. O PIC usava
simples microcódigos armazenados na ROM para desempenhar suas tarefas, e e embora o
termo não tenha sido usado na época, ele tinha um projeto RISC que executava uma
instrução por ciclo (4 ciclos de 'clock').
Arquitetura de núcleo
A arquitetura do PIC é caracterizada pelos seus múltiplos atributos:
Espaço de Instruções
O espaço de instruções geralmente é implementado como ROM, EPROM ou flash ROM. Em
geral, a memória de instruções externa não é endereçável directamente devido à
falta de uma interface de memória externa. As exceções são PIC17 e selecione
dispositivos PIC 18 com grande quantidade de pinos.[5]
Palavra de memória
Todos os PICs manipulam (e endereçam) dados em blocos de 8 bits. No entanto, a
unidade de endereçamento do espaço de código geralmente não é o mesmo que o espaço
de dados. Por exemplo, famílias de PICs na linha de base (PIC12) e mid-range
(PIC16) têm memória de instruções endereçável no mesmo tamanho como a largura de
instrução, ou seja, 12 ou 14 bits, respectivamente. Em contraste, na série PIC18, a
memória de instruções é dirigido em incrementos de 8 bits (bytes), que difere da
largura da instrução de 16 bits.
Pilhas
PICs têm uma pilha de chamadas implementada em hardware, que é utilizada para
guardar endereços de retorno. A pilha de hardware não é acessível por software em
dispositivos anteriores, mas isso mudou com os dispositivos da série 18.
Suporte de hardware para uma pilha de parâmetros de uso geral era ausente em séries
anteriores, mas isso melhorou muito na série 18, fazendo com que a arquitetura da
série 18 mais amigável para compiladores de linguagem de alto nível.
Conjunto de Instruções
Instruções de um PIC podem variar de cerca de 35 instruções (PICs mais simples)
para mais de 80 instruções para os PICs high-end. O conjunto de instruções inclui
instruções para executar uma variedade de operações em registros diretamente, o
acumulador e uma constante literal ou o acumulador e um registrador, bem como para
a execução condicional, e saltos de execução.
Algumas operações, como bit setting e testes, pode ser realizada em qualquer
registrador numerado, mas operações aritméticas bi-operando sempre envolvem o W
(acumulador), escrevendo o resultado de volta para W ou outro registrador operando.
Para carregar uma constante, é necessário carregá-lo em W antes de ser transferida
para outro registrador. Nos cores mais antigos, todos os movimentos de registrador
precisavam passar por W, mas isso mudou nos núcleos "high-end".
Núcleos do PIC tem instruções de saltos que são utilizados para a execução
condicional e desvios. As instruções de salto são "skip if bit set" e "skip if bit
not set". Porque os núcleos anteriores ao PIC18 tinham apenas instruções de desvio
incondicional, saltos condicionais são implementados por um desvio condicional (com
a condição oposta), seguido de um desvio incondicional. Pulos também são de
utilidade para a execução condicional de qualquer instrução simples imediatamente
seguinte. Também é possível pular instruções de salto. Por exemplo, a sequencia de
instruções "pular se A; pular se B; C" irá executar C se A é verdadeiro ou B for
falso.
Vantagens
Pequeno conjunto de instruções para aprender
Arquitetura RISC
Oscilador embutido com velocidade selecionável
Kits de desenvolvimentos para iniciantes disponíveis por menos de 50 dólares
Microcontroladores baratos
Grande disponibilidade de interfaces, como USB, I²C, SPI, Ethernet, entre outros[6]
Disponibilidade de processadores em pacote DIL torná-los fáceis de manusear para
uso como hobby.
Limitações
Um acumulador
Bank switching por registrador é necessário para acessar a RAM em diversos
dispositivos
Operações e registradores não são ortogonais; algumas instruções podem endereçar
RAM e/ou constantes imediatas, enquanto outros podem usar apenas o acumulador.
As seguintes limitações em pilhas foram corrigidos na série PIC18, mas ainda são
presentes em PICs anteriores:
A partir de 2013, a Microchip oferece sua série de compiladores XC, para uso com
MPLAB X. Microchip acabará por eliminar gradualmente os seus compiladores mais
antigos, como C18, e recomenda o uso de seus compiladores série XC para novos
modelos.
Diferenças arquiteturais
Os PICs usam a arquitetura Harvard, e as palavras de instrução possuem tamanhos
incomuns. Originalmente, instruções de 12 bits incluíam endereço de 5 bits para
especificar o operando em memória, e destinos de desvios de 9 bits. Revisões
posteriores adicionaram bits aos códigos de operações (opcode), permitindo
adicionar bits para endereços.
O espaço de endereço ROM é de 512 palavras (12 bits cada), que podem ser estendidos
a 2048 palavras por comutação. Instruções CALL e GOTO especificar as últimos 9 bits
do novo local do código; bits de ordem superior adicionais são tomadas a partir do
registrador de status. Note-se que a instrução CALL inclui apenas 8 bits de
endereço, e só pode especificar endereços no primeira metade de cada página de 512
palavras.
A arquitetura PIC32 traz uma série de novos recursos para portfólio da Microchip,
incluindo:
A maior velocidade de execução: 80 MIPS (mais de 120 MIPS @ 80 MHz com o benchmark
Dhrystone[10])
A maior memória flash: 512 KB
Execução de uma instrução por ciclo de clock
O primeiro processador com cache
Permite a execução a partir RAM
O próximo produto da Microchip será a família de microcontroladores PIC32MZ.
Programação e desenvolvimento
Como qualquer arquitetura os processadores PIC apenas aceitam linguagem de máquina
(assembly). No entanto a programação pode ser feita em linguagens de alto nível
utilizando-se compiladores. Existem várias alternativas pagas de compiladores. Em
geral é possivel utilizá-los de modo gratuito com algumas restrições. Para as
famílias PIC16 e PIC18 existe uma alternativa opensource o SDCC, que pode ser
configurado para operar com o MPLAB.
Existem ainda diversas IDE's disponíveis para a programação, entre elas a mais
utilizada é o MPLAB, disponibilizado de modo gratuito pela própria Microchip. Há
atualmente uma versão beta de IDE baseada no Netbeans sendo desenvolvida pela
Microchip: MPLABX. Esta IDE já vem com suporte para qualquer Windows, Mac e Linux.
Periféricos internos
Dispositivos PIC
Seus principais periféricos internos (a disponibilidade varia conforme o modelo):
USARTs
Controladores de comunicação I2C, SPI, USB e Paralelo
Controladores PWM
Controladores de LCD
Controladores de motores
Gerador de energia de alta potência
Periféricos para LIN, CAN
Controladores Ethernet
Periféricos IRDA
Codificadores para criptografia Keeloq
Watchdog timer
Detetores de falha na alimentação
Portas digitais com capacidade de 25mA (fornecer ou drenar) para acionar circuitos
externos
Osciladores internos
RTCC - Real Time Clock and Calendar (Relógio de tempo real e calendário)
Tecnologia Deep Sleep - consumo de nano Watt
CRC - Cyclic Redundancy Check programável
Modelos comuns de PICs
PIC16F84/PIC16F84A
PIC16F628/PIC16F628A
PIC16F877/PIC16F877A
PIC18F452/PIC18F4520
PIC16F876
PIC24F/PIC24H