PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
História e características dos Microcontroladores PIC em
1. História e características dos Microcontroladores PIC
Microcontroladores
E tudo começou com os microprocessadores. Primeiro eram de 4
bits, depois de 8 bits e assim por diante. Mas o que é um
microprocessador? É um chip, com alta integração de componentes,
que precisa de memória RAM externa, memória EEPROM externa,
HD para armazenamento de programas e outros diversos
periféricos. Ou seja, você usa um microprocessador dentro de um
microcomputador e ele, em conjunto com um monte de outros CIs,
trabalham direitinho. Porém, visando desenvolver um dispositivo
simples, que tivesse características de computadores integrados em
um único chip, os fabricantes de processadores desenvolveram os
primeiros MCUs [Micro Controle Unit ou Unidade Microcontoladora
- Microcontroladores] e passaram a distribuí-los efetivamente na
década de 80. Tais características tornaram mais simples o projeto
de dispositivos inteligentes, pois os MCUs raramente necessitam de
componentes externos para funcionar, diminuindo o custo e o seu
tamanho.
Um sistema computacional é composto por uma unidade de
processamento, memória e portas de entrada/saída [I/O]. A maioria
das pessoas limita o conceito de sistema computacional ao
computador que temos em casa [Personal Computer; MAC]. No
entanto todo sistema que a partir de dados de entrada, executa
algum processamento mediante um programa armazenado em uma
memória gerando uma saída é chamado de sistema computacional.
Podemos definir microcontrolador como sendo um sistema
computacional integrado, pois ele possui unidade de processamento,
integrado
memória e entradas e saídas integrados em um único chip. Sendo
esta a diferença de microcontrolador e microprocessador [este
último é apenas a unidade de processamento em si; Claro que os
microprocessadores comercializados atualmente possuem
capacidades de processamento muito maiores do que as dos
microcontroladores].
2. Mas, tudo isto começou com a lógica digital baseada na condução ou
não de transistores, fets ou diodos entre outros. Mas para não
entrar neste detalhe, vamos simplificar resumindo esta lógica em
dois números ou como falamos muito, em dois dígitos: O 0 [zero] e o
1 [um]. Quando falamos em 0 [zero], estamos nos referindo a Zero
Volt DC e quando falamos em 1 [um] estamos falando em + Vcc No
Vcc.
caso dos PICs, geralmente, estaremos falando que:
PICs
0 = GND e 1 = 5Vcc [padrão/lógica TTL].
Tenha em mente, então, que a lógica digital se baseia em níveis de
tensão contínua. E que os microcontroladores usam a lógica digital,
e que um programa de computador ou para um microcontrolador,
por mais complexo que seja, se resume em uma enorme quantidade
de 0s [zeros] e 1s [uns] ordenados corretamente.
Os primeiros microcontroladores implementavam a tecnologia do
microprocessador 8080, como, por exemplo, o 8048 e posteriormente
o 8051 [todos da Intel]. Existem no mercado diversos tipos de
microcontroladores, como o 8051. A ATMEL possui uma enorme
família de componentes com as mesmas características do 8051,
alguns até com as mesmas pinagens dos registradores; outros com
pinagens diferentes, mas com o mesmo conjunto de instruções, com
clock de 4MHZ até aproximadamente 10MHZ. A DALLAS
Semicondutors tem um microcontrolador de alta performance, de
até 90MHZ, compatível com 8051. Por fim, vem a Microchip com os
microcontroladores PIC ou PICmicro MCUs, como ela mesmo
MCU
denomina, que se tornaram muito populares [há um grande número
de materiais didáticos e acadêmicos relacionados ao PIC].
A Microchip é uma empresa norte americana, fundada em
1989, com sede na cidade de Chandler, Arizona [oeste dos
EUA].
A família PIC possui extensa variedade de modelos e periféricos
internos, com arquitetura Harvard e conjunto de instruções RISC
[Reduced Instruction Set Computer ou Conjunto de Instruções
Reduzidas], com recursos de programação por Memória Flash,
3. EEPROM e OTP. Há o reconhecimento de interrupções tanto
externas como de periféricos internos. Funcionam com tensões de
alimentação de 2 a 6V e os modelos possuem encapsulamento de 6 a
100 pinos em diversos formatos [SOT23, DIP, SOIC, TQFP,etc].
Quantas vezes os PICs Flash podem ser regravados?
Se as gravações forem feitas dentro dos parâmetros sugeridos
pelo fabricante, ele garante que pelo menos 1000 ciclos de
gravação podem ser feitos [alguns tem o mínimo de 100000
vezes]. A memória EEPROM de dados pode ter um ciclo de
1000000 vezes. A partir dai, a memória começa a se degradar
e perde a confiabilidade.
Quantas vezes podemos reprogramar os PICs OTP?
Os PICs OTP são os que possuem a letra C no meio do código
[exceto o 16C84 que é EEPROM]. Os PICs OTP [One Time
Programmable], como o próprio nome indica, somente podem
ser programados uma vez. Entretanto, as posições de memória
de programa que não forem usadas poderão ser gravadas
posteriormente.
O que é a EEPROM?
Alguns modelos de PIC possuem uma área de memória
EEPROM [Electrically Erasable Programmable Read Only
Memory] que serve como memória não volátil [que não se
perde ao desligarmos a alimentação] útil para guardarmos
dados de calibração, senhas, etc. Essas memórias podem
suportar um ciclo de 1000000 de gravações. Em modelos sem
EEPROM, podemos usar memórias EEPROM seriais
externas.
O acesso a essas memórias [gravação e leitura] pode ser feito
no momento da gravação de um programa no PIC ou pelo
próprio PIC executando o programa gravado nele, pelos
registradores específicos [EEDATA, EEADR, EECON].
4. [Configuração física do interior de um microcontrolador]
Arquitetura de Construção
A arquitetura de um sistema digital define quem são e como as
partes que compõe o sistema estão interligadas.
Os primeiros microcontroladores usavam uma estrutura
interna que tinha apenas um caminho para trafegar os dados
e endereços. Lembre-se, dados são informações e endereços são
os locais onde serão armazenados os dados [memória de
programa]. O nome mais correto para este “caminho” é Bus
[barramento]. Com apenas um bus tínhamos que trafegar hora
endereços, hora dados [arquitetura von-Neuman].
As duas arquiteturas mais comuns para sistemas computacionais
digitais são as seguintes:
• Von-Neuman;
• Harvard.
A principal característica da arquitetura Harvard utilizada na
construção dos MCUs PIC é ter a memória de programa separada
da memória de dados e acessada por um barramento independente
[a Unidade Central de Processamento é interligada a memória de
dados e a memória de programa por barramento específico]. Existe
também a arquitetura von-Neumann, onde tanto as memórias de
dados quanto a de programa, são acessadas usando-se um mesmo
barramento de dados [a Unidade Central de Processamento é
5. interligada à memória por um único barramento. O sistema é
composto por uma única memória onde são armazenados dados e
instruções]. Nesta arquitetura não há limitações à complexidade
das instruções, os sistemas geralmente têm conjuntos de instruções
complexos, o que equivale a dizer que possuem um grande número
de instruções [o que dificulta a memorização do programador] e
cada instrução realiza uma grande seqüência de ações [instruções
complexas], gastando tempos [quantidade de ciclos de execução]
diferentes para serem executadas. Processadores deste tipo são
chamados CISC [Complex Instruction Set CPU ou CPU com
Conjunto de Instruções Complexo]. Os PICs usam um Set ou
conjunto de instruções reduzidas, devido a sua arquitetura
Harvard, chamados de RISC [Reduced Instruction Set Computer].
Este set tem entre 33 a 35 instruções dependendo do PIC. Isto ajuda
na memorização, mas, exige mais do programador. É como falar
fluentemente um outro idioma, conhecendo poucas palavras.
Clock
O clock é um sinal de sincronismo que coordena as ações do MCU e
é obtido a partir de um componente oscilador externo [ressonador,
cristal e capacitores, circuito RC, etc] ou interno [Circuito RC
interno]. Se fizermos uma analogia de um microcontrolador com um
relógio de sala, o nosso clock corresponde ao pêndulo deslocando
sempre com uma certa precisão e coordenando a contagem da
passagem das horas.
Um microcontrolador pode ser entendido como sendo uma máquina
que executa operações em ciclos. O clock do oscilador é ligado ao
6. PIC através do pino OSC1, onde, o circuito interno do
microcontrolador divide o sinal de clock em quatro fases, Q1, Q2, Q3
e Q4 [PICs com memória de programa de 12 e 14 bits] que não se
sobrepõem. Estas quatro pulsações perfazem um ciclo de instrução
[também chamado Ciclo de Máquina e durante o qual uma
Máquina]
instrução é executada [Todos os sinais necessários para a busca ou
execução de uma determinada instrução devem ser gerados dentro
deste período de tempo].
[Nos PICs com memória de programa de 12 e 14 bits um Ciclo de Máquina
corresponde a quatro períodos de clock [1:4] denominados Q1,Q2,Q3 e Q4]
Como pode ser o clock do PIC?
Em aplicações onde a precisão do clock [sinal de sincronismo
para coordenar as ações do MCU] é necessária, costuma-se
usar um cristal de quartzo e dois capacitores [ver figura
abaixo] ou um ressonador cerâmico [menos preciso] ligado a
dois pinos do PIC. Em aplicações onde precisão não é
necessária, podemos usar um circuito RC [resistor – capacitor]
para gerar as oscilações. Muitos modelos de PIC possuem o
recurso de oscilador interno, onde não precisamos ligar
componentes externos, porém, a precisão fica entre 1% a 7%.
Também podemos simplesmente injetar um sinal de clock de
um oscilador independente do PIC.
Exemplo de Circuito Oscilador:
7. CRYSTAL OPERATION [OR CERAMIC RESONATOR]
[HS, XT OR LP OSC CONFIGURATION]
Abaixo segue uma lista identificando os vários modos de clock
dos PICs [as nomenclaturas podem variar dependendo da
fonte de consulta ou dos programas utilizados], só que nem
todos os modelos possuem todos estes [a aplicação e
configuração do clock no PIC será melhor detalhada em
Aplicação e Programando]:
• LP [Low Power Crystal] – uso de um cristal de alguns
kHz e capacitores para que o consumo seja baixo.
• XT [Crystal/Resonator] – cristal de até 4MHz. Pode ser
usado um ressonador cerâmico.
• HS [High Speed Crystal/Resonator] – para cristais com
até 20MHz ou ressonadores com frequências próximas a isto.
• HSPLL [High Speed Phase Locked Loop] – multiplica a
frequência do cristal por quatro.
• ER [External Resistor] – este modo usa apenas um
resistor externo ao PIC, utilizando a capacitância intrínseca
do PIC como capacitor.
• RC [External Resistor/Capacitor] – esse modo precisa de
apenas um resistor e um capacitor externo ao PIC [Circuito
RC], entretanto a precisão e a estabilidade não são muito
grandes.
• INTOSC [Internal Oscillator] – oscilador RC interno que
permite que economizemos em componentes e libera os pinos
para usar como portas [frequência próxima de 4MHz
frequência
frequ 4MHz].
• EC [External Clock In] – apenas injetamos um sinal de
clock externo no PIC.
8. Os PICs mais modernos possuem o recurso de PLL para
multiplicar a frequência de clock obtida a partir de um cristal,
permitindo assim se obter uma maior velocidade com cristais
de menor frequência, sem gerar EMI.
Como funcionam os osciladores internos dos PICs?
Alguns modelos de PICs possuem um oscilador de clock
interno, o que permite que economizemos em componentes e
libera-se mais dois pinos para serem usados como portas de
I/O. Esse oscilador é baseado num circuito RC e não tem muita
precisão. Entretanto em alguns PICs podemos calibrar a
frequência de oscilação para que fique bem perto da
frequência desejada. Isso se faz através dos bits do registrador
OSCCAL. Nesse caso, os PICs vêm com um valor gravado de
fábrica no último endereço de memória de programa, que deve
ser carregado no OSCCAL.
Exemplo de programa com calibração do oscilador interno
[assembly em C - mikroC for PIC - para PIC16F676
PIC16F676]:
void main ()
{
asm {
bsf STATUS, RP0 ;Bank 1
call 0x3FF ;Get the cal value
movwf OSCCAL ;Calibrate
bcf STATUS, RP0 ;Bank 0
}
// restante do programa em C [mikroC for PIC]…
}
Neste exemplo, o valor 3FFh aparece na Datasheet
[Especificação fornecida pelo fabricante] para a programação
em assembly, porém, nos compiladores de linguagem C este
valor deve ser escrito como 0xNNN [onde “N” é o valor em
hexadecimal aceito pelo compilador]. Para outros
microcontroladores PIC basta consultar sua Datasheet no
item CALIBRATING THE INTERNAL OSCILLATOR.
9. Todas as datasheets de todos os MCU PIC, bem como todos os
manuais dos programas e os programas de desenvolvimento
da Microchip [por exemplo: MPLAB IDE], podem ser baixados
do próprio site da Microchip [www.microchip.com]. Também
existem dezenas de Application Notes sobre os PICs, bem
como de outros componentes.
[Datasheet PIC16F630/676]
O que acontece se eu fizer o PIC funcionar a uma frequência
maior do que a especificada pelo fabricante?
Em tese isso pode funcionar sem problemas [entretanto, a
dissipação de potência será maior = calor], pois alguns
modelos possuem versões de 4MHz e 20MHz, a diferença entre
eles é o teste de fábrica, que garante até qual frequência o PIC
10. pode funcionar sem erros. Entretanto um chip de 4MHz pode
não ter passado no teste para 20MHz, mas pode perfeitamente
funcionar a 6MHz sem dar problemas.
Pipeline
Se para efeito de análise dividirmos o processamento interno do
PIC em ciclos de busca e execução, podemos afirmar que para cada
instrução executada foi necessária a execução prévia de um ciclo de
busca. Imagine um sistema que implemente um ciclo de busca e ao
mesmo tempo processe um ciclo de execução [Na arquitetura
Harvard a leitura de instruções e de alguns tipos de operandos
podem ser feitas ao mesmo tempo em que as instruções são
executadas]. Isso significa que o sistema fica o tempo todo
executando instruções, o que acarreta um significativo ganho de
velocidade. Enquanto uma instrução é executada, a seguinte esta
sendo lida [Desta forma, no início de cada Ciclo de Máquina haverá
uma instrução pronta para ser executada]. Esse processo é
conhecido como pipeline [canalização].
No entanto algumas instruções fazem com que este sistema seja
desarticulado: são as chamadas instruções de desvio. As instruções
de desvio são aquelas que alteram o valor do Program Counter
[contador/ponteiro de programa]. Quando ocorre um desvio a
instrução que já foi previamente buscada pelo sistema de Pipeline
não é válida, pois estava na posição de memória de programa
apontada pelo PC antes dele ter seu valor alterado para o destino
especificado. Conseqüentemente torna-se necessário a execução de
um novo ciclo de busca, que obviamente demandará mais um ciclo
de máquina, resultando em um tempo total de processamento igual
a dois ciclos de máquinas.
11. TCY0 é lido da memória o código da instrução MOVLW 55h (não
nos interessa a instrução que foi executada, por isso não está
representada por retângulo).
TCY1
TCY1 é executada a instrução MOVLW 55h e é lida da memória a
instrução MOVWF PORTB.
TCY2 é executada a instrução MOVWF PORTB e lida a instrução
CALL SUB_1.
TCY3 é executada a chamada [call] de um subprograma CALL
SUB_1 e é lida a instrução BSF PORTA, BIT3. Como esta instrução
não é a que nos interessa, ou seja, não é a primeira instrução do
subprograma SUB_1, cuja execução é o que vem a seguir, a leitura
de uma instrução tem que ser feita de novo. Este é um bom exemplo
de uma instrução que precisa de mais de um ciclo.
TCY4 este ciclo de instrução é totalmente usado para ler a primeira
instrução do subprograma no endereço SUB_1.
TCY5 é executada a primeira instrução do subprograma SUB_1 e
lida a instrução seguinte.
12. [Toda instrução do PIC demanda um Ciclo de Máquina para ser executada,
exceto instruções de desvio e salto que demandam dois Ciclos de Máquina]
Qual a velocidade de processamento dos PICs?
Um PIC pode executar uma instrução simples em 4 ciclos de
clock [1 ciclo de máquina] graças à sua estrutura de pipeline.
Assim, um PIC rodando a 4MHz de clock [sinal de sincronismo
para coordenar as ações do MCU], consegue trabalhar a
1MIPS [Um Milhão de Instruções por Segundo]. Algumas
instruções de desvio e salto, precisam de 2 ciclos de máquina.
PICs mais rápidos rodam a 48MHz de clock.
Famílias PIC
Como os microcontroladores podem ter diferentes configurações de
montagem, a divisão dos mesmos em Famílias ou Linhas ou Séries
foi realizada para agrupar os MCUs que têm vários componentes,
com tamanhos e recursos iguais. Sendo que o código desenvolvido
para um componente de uma determinada família é compatível com
os demais componentes da mesma família, exceto por algumas
pequenas alterações, que se referem principalmente aos periféricos.
Cada família tem o seu próprio conjunto de instruções. Assim, para
13. um mesmo fabricante, as famílias guardam uma semelhança entre
si, apesar de não serem exatamente iguais.
Tanto a linha PIC18 quanto a linha PIC16 são compostas por
microcontroladores de oito bits para o endereçamento e barramento
de dados. Já o endereçamento e barramento de programa da linha
PIC18 contam com dois bits a mais, que a linha PIC16. Fazendo
uma comparação, a linha PIC12 e PIC16 tem instruções de 14bits e
um conjunto de 35 instruções, com o aumento para 16bits na linha
PIC18 o conjunto passa a executar de 75 a 83 instruções [incluídas
as 8 instruções de tabela, não disponíveis em todos os modelos],
dependendo do modelo do MCU.
A família PIC24F / PIC24H é composta por componentes de 16bits
[com mais de 140 instruções]. Já a linha dsPIC30F/dsPIC33F traz
controladores híbridos de 16bits. A família PIC32MX [com núcleo
MIPS] é composta por componentes de 32bits. Existem ainda outras
famílias de microcontroladores PIC.
Sub-Famílias
Devido a grande variedade de opções de dispositivos dentro de uma
mesma família, foram criadas as sub-famílias. Os seus componentes
se diferenciam em quantidade de memória RAM, quantidade de
memória EEPROM de dados [alguns modelos nem possuem],
quantidade de memória Flash de programa, número de pinos [18,
28, 40,...], freqüência de clock e periféricos. Dentre os principais
periféricos podemos citar os timers, conversores A/D, comparadores
analógicos, módulos USART [Porta de Comunicação Serial
Assíncrona de RX e TX], módulos MSSP [I2C e SPI master],
módulos CCP [Captura – Comparação – PWM], etc.
O que significam as letras nos códigos dos PICs?
A letra que vai logo após o prefixo de dois dígitos significa a
tecnologia da memória utilizada pelo microcontrolador. Assim
as mais comuns são: C que quer dizer memória OTP [One
Time Programmable], F quer dizer Flash [programável
14. diversas vezes], LF quer dizer Flash de baixa tensão, FJ de
Flash de baixa tensão de operação [até 3,6V]. As letras ao final
do código, definem o tipo de encapsulamento [por ex. P = DIP,
SP = skinny DIP, SO = small outline, SS = SSOP] e a faixa de
temperaturas de trabalho [por ex. I = industrial]. Maiores
informações a este respeito podem ser obtidas na Datasheet do
microcontrolador.
Qual é a capacidade máxima de memória dos PICs?
A capacidade máxima de memória da série 16 é de 8kword
[8Kbytes ou 8192 posições de memória]. No entanto, devido a
limitações impostas pela estrutura das instruções RISC dos
PICs, a memória de programa é dividida em blocos ou páginas,
cada uma com 2kword ou 2048 posições de memória
[PEREIRA, 2004].
A memória de programa é mapeada de forma que cada
endereço tenha 8bits ou 1byte. Porém, as instruções
armazenadas na memória de programa têm 16 ou 32bits.
Assim cada instrução ocupa dois endereços de memória e o PC
[Program Counter ou Contador de Programa] ao ser executado
incrementa de dois em dois endereços e como o barramento de
instrução contem 16bits a leitura dos dois endereços é
simultânea, formando assim uma instrução de 16bits para um
único acesso [instruções curtas] e 32bits para dois acessos
[instruções longas].
Ports
Para que o funcionamento dos pinos I/O coincida com a organização
a 8 bits, todos eles estão agrupados em PORTs [portas; portos]
PORT
denominadas A,B,C,etc [cada PIC, dependendo da quantidade de
pinos que possui, tem uma certa quantidade de PORTs; a PortA e a
PortC são as mais comuns]. O agrupamento é semelhante para os
registradores de configuração da Port. Este assunto será melhor
visualizado em Programando.
15. Por razões práticas, a maioria dos pinos I/O tem várias funções. Se
um pino é usado para uma função qualquer, não pode ser usado
para outra. sabendo-se quais são os registradores que configuram as
diversas funções de um determinado pino é possível e necessário
pino
desabilitar aquelas que não serão úteis em um projeto.
projeto
O que eu posso acionar ou controlar com um PIC?
Todo acionamento de dispositivos deve ser feito direta ou
indiretamente através das portas de I/O do PIC. Cada porta
tem capacidade de drenar ou suprir uma corrente de
aproximadamente 25mA, o que é suficiente para acionar leds e
pequenas cargas. Para cargas maiores se faz necessário o uso
de transistores, tiristores ou relés.
Também é comum usarmos as portas do PIC para controlar
LCDs, displays de leds, interfaces seriais, optoacopladores,
buzzers, portas lógicas TTL e CMOS, etc
Como podemos fazer comunicação de dados entre
componentes e um PIC?
Alguns modelos de PIC possuem periféricos especializados em
comunicação [serial], como USARTs, SPI, I2C, USB, etc. com
controle realizado pelos respectivos registradores internos.
Para os que não os possuem, é possível realizar essas tarefas
por software. Para comunicação em RS232, é necessário o uso
de conversores de nível de sinal [por exemplo: MAX232].
Como o PIC pode receber informações de fora?
Através das portas de I/O e configurando-as como portas de
entrada. Essas portas dão acesso aos conversores A/D,
comparadores, USARTs, timers, etc. É comum ligarmos as
portas de entrada: teclados, sensores, links seriais e paralelos,
portas lógicas, etc.
Interrupções
16. Interrupções são eventos que ocorrem no hardware interno e
externo ao PIC [são eventos assíncronos – que podem ocorrer a
qualquer momento] que fazem com que a execução do programa seja
interrompida [devido ao desvio no processamento] e desviada para
uma rotina especial [o destino é o vetor de interrupção] e depois de
atendida, retorna ao ponto de parada do programa principal.
Uma boa analogia para melhor entendermos o conceito de
interrupção é a seguinte: você está trabalhando digitando algo no
computador quando o seu ramal toca. Neste momento você,
interrompe o que está fazendo, para atender ao telefone e verificar o
que a pessoa do outro lado da linha está precisando. Terminada a
conversa, você coloca o telefone no gancho novamente e retoma o
seu trabalho do ponto onde havia parado. Observe que não
precisamos verificar a todo instante, se existe ou não alguém na
linha, pois quando o ramal é chamado, o telefone toca avisando que
existe alguém querendo falar com você.
Exemplos de interrupções:
• Interrupção externa [Ex.: recebimento de dados na serial];
• Interrupção por mudança de estado [Ex.: mudança de nível em
porta – tecla];
• Interrupção por tempo [Ex.: estouro de timers internos];
• Interrupção de final de escrita na EEPROM.
A habilitação das interrupções nos PIC segue a seguinte filosofia.
Existe uma chave geral [general interrupt enable] e chaves
específicas para cada uma das interrupções. Deste modo, se eu
quiser habilitar a interrupção de tempo [TMR0] eu devo “setar” o bit
da chave geral e também o bit da chave específica [T0IE], ambos
presentes no registrador especial INTCON [veja este registrador e
suas características na Datasheet do componente MCU que você
pretende ter no circuito aplicação].
17. [Analogia gráfica para o registrador INTCON]
O que são vetores de reset e de interrupção?
São endereços na área de memória para onde é desviada a
execução do programa, caso ocorra um evento de reset ou de
interrupção.
Timer
Não se preocupe muito com a informação sobre Timer e Prescaler
[ou ainda Bank0, Bank1, relação destes com posições na EEPROM,
e similares], pois, é um conteúdo mais específico e dirigido para uns
poucos loucos como eu que se interessam por maiores detalhes e que
nem precisam ser levados em consideração quando se usa o mikroC
for PIC que se encarrega destes sem que você perceba
[problema_01: é na busca por maiores detalhes que muitos de meus
projetos se emperram]. Em outras palavras: saber ou não os
próximos dois parágrafos não fará muita diferença!
O PIC possui internamente um recurso de hardware denominado
Timer0. Trata-se de um contador de 8bits incrementado
internamente pelo ciclo de máquina ou por um sinal externo [borda
de subida ou descida], sendo esta opção feita por software durante a
programação. Como o contador possui 8 bits ele pode assumir 256
valores distintos [0 até 255]. Caso o ciclo de máquina seja de 1us,
cada incremento do Timer corresponderá a um intervalo de 1us.
Caso sejam necessário intervalos de tempos maiores para o mesmo
Ciclo de Máquina, utilizamos o recurso de Pre-scale.
18. Prescaler
O prescaler é um divisor de frequência programável do sinal que
incrementa o Timer0. Quando temos um prescaler de 1:1, cada ciclo
de máquina corresponde a um incremento do Timer0 [unidade de
Timer0]. Ao alterarmos o prescaler para, por exemplo, 1:4 [os
valores possíveis são as potencias de dois até 256], o Timer0 será
incrementado uma vez a cada quatro ciclos de máquina.
Sleep
O modo de operação Sleep foi incluído na família PIC para atender
um mercado cada vez maior de produtos que devem funcionar com
pilhas ou baterias. Estes equipamentos devem ter um consumo
mínimo para que a autonomia seja a máxima. Quando o PIC é
colocado em modo Sleep [dormir], através da instrução SLEEP, o
consumo passa da ordem de grandeza de mA [mili àmperes] para
uA [micro àmperes]. Existem três maneiras de "acordar o PIC": por
interrupção externa/estado, estouro de Watchdog ou reinicialização
[/MCRL].
Linguagem de programação usual para PICs
Os PICs podem ser programados em linguagem assembly ou em
linguagem de alto nível como C. Para tanto, é necessário um
programa compilador para gerar o código hexadecimal a ser gravado
no microcontrolador.
A linguagem C é uma linguagem de alto nível e estruturada. Sua
sintaxe é simples e portátil, isto é, pode-se usar o mesmo programa
em várias plataformas com poucas modificações.
C é muito utilizada para a programação de microcontroladores e
também tem o poder de interagir com a plataforma em baixo nível
podendo incluir códigos em assembly em sua implementação
implementação.
Estou com um PIC protegido. Como posso ler o programa?
19. Não pode. Este recurso implementado nos PICs é feito
justamente para prevenir que o código do programa seja lido e
replicado em outros chips, dessa forma protegendo o direito
autoral do programador. Isto é conseguido por fusível de
configuração.
configuração
O que é a palavra ou fusíveis de configuração [Bits de
configuração]?
configuração]
No momento da gravação de um programa em um PIC
podemos fazer a escolha de alguns recursos de que o PIC
dispõe, setando ou zerando os bits de um determinado
endereço da memória. Esses recursos se referem a: tipo de
usado, programa,
oscilador usado proteção de leitura do programa ativação do
WDT, proteção de leitura da EEPROM ativação do Brownout,
proteção EEPROM,
ativação do Master Clear, ativação do Power up timer, seleção
do Bandgap, habilitação de gravação por baixa tensão entre
tensão,
outros. Essa configuração de fusíveis pode ser inserida
também no programa fonte e vai aparecer automaticamente
no software de gravação Este assunto será detalhado em
gravação.
Programando.
Como gravar o PIC?
De posse de um arquivo .hex que contenha os códigos
hexadecimais das instruções do programa [Opcode – Código
Operacional], você precisa de um software de controle no PC e
um hardware de gravação de PICs. Existem diversos
programas e circuitos de gravação disponíveis na Internet
[muitos gratuitos]. Também é possível comprar um gravador
pronto.
FAQ
Analógico
Como funcionam os conversores Analógico-Digitais dos PICs?
20. A maioria dos modelos de PICs possui conversor A/D de 10 bits
[alguns têm de 8 bits e de 12 bits]. Sempre é só um conversor com
vários canais de entrada [selecionados por multiplexação]. Os
conversores são do tipo SAR [Registradores por Aproximação
Sucessiva], portanto não são muito velozes [em média gastam uns
40us para cada conversão]. Além disso, sofrem de algumas
limitações, como a faixa de entrada de tensão dos sinais [de 0V a
Vdd], impedância da fonte do sinal, etc.
O processo de conversão é o seguinte: o sinal a ser amostrado
carrega um capacitor de hold. Ao final de um certo período, esse
capacitor interno do PIC é desligado da fonte de sinal e o conversor
começa a fazer as aproximações sucessivas para descobrir o
equivalente digital. O valor fica armazenado em dois registradores
de 8 bits [nem todos usados] do PIC para serem processados
posteriormente.
O que é um módulo CCP?
Alguns modelos de PIC possuem um ou mais módulo de Capture
Compare PWM.
O recurso de capture serve para se medir a largura [tempo] de um
pulso injetado numa porta do PIC através da leitura do valor do
contador TMR1 quando ocorrer a descida ou subida do pulso
medido.
O recurso de Compare serve para comparar o valor que está em
alguns registradores com o valor que está sendo contado no TMR1, e
quando ocorrer a coincidência, executa uma ação.
O recurso de PWM – modulação por largura de pulso, permite
gerar um sinal pulsado de freqüência constante e largura de
pulso variável.
O que é bootloader?
bootloader
21. Alguns modelos de PIC podem receber dados externos [ou mesmo
internos] e reprogramarem-se [a memória de programa]
automaticamente sem o uso de um gravador de PICs. Esses PICs
precisam ter uma rotina especial gravada na memória e perdem
alguns registradores e portas de I/O para isso. Normalmente os
PICs que usam o recurso de bootloader, recebem os dados a serem
gravados através de uma porta serial.
Os PICs podem executar operações de ponto flutuante?
Sim, desde que sejam criadas sub-rotinas especiais para essas
operações. No Application Note 575 da Microchip, se encontram
diversas rotinas de ponto flutuante. Operações de ponto flutuante
exigem muito processamento e usam muitos bytes de memória [Os
compiladores também possuem rotinas de exponenciação,
trigonométricas, logarítmicas, etc além de multiplicação e divisão].
Como a estrutura interna dos PICs usa filosofia RISC, não podemos
esperar que ele execute operações aritméticas ou matemáticas
complexas diretamente. Basicamente ele executa instruções simples
de soma e de subtração de 8 bits [inteiros], além das de
deslocamento de bits para esquerda ou direita.
By AIM