Escolar Documentos
Profissional Documentos
Cultura Documentos
Versão 1.0
04/2003
Conversão 16F84 para 16F628 2 de 2
Índice
Página
Introdução ................................................................................................................... 5
1 Características .......................................................................................................... 6
1.1 Temporizadores e comparadores ..................................................................... 6
1.2 Comparadores analógicos................................................................................ 6
1.3 CCP, USART e tensão de referência. .............................................................. 6
1.4 Terminais. ....................................................................................................... 6
1.5 Memória.......................................................................................................... 7
1.6 Oscilador......................................................................................................... 9
2 Guia de conversão 16F84 para 16F628 .................................................................. 10
Página
Tabela 1.1 – Comparação entre o 16F84 e o 16F628 ..................................................... 6
Figura 1.1 – Mapa de memória do PIC 16F84 ............................................................... 7
Figura 1.2 – Mapa de memória do PIC 16F628 ............................................................. 8
Introdução
No universo dos microcontroladores PIC é muito difundido o uso do PIC16F84.
Existe grande quantidade de programas, livros e cursos baseados nesse dispositivo.
Porém, se comparado como ele, os PIC16F628 e PIC16F627 apresentam várias
vantagens que tornam preferível trabalhar com esses últimos.
O 16F84 é compatível “pino a pino” com, o 16F628, de forma que pode ser
realizada sua substituição sem alterações de hardware, bastando apenas alterar o
firmware.
O presente documento visa ser um tutorial para a alteração de softwares
inicialmente desenvolvidos para 16F84 para serem gravados em 16F628. São
apresentadas de forma resumidas as características de cada microcontrolador,
ressaltando as principais diferenças entre eles. Em seguida tem-se um guia para a
alteração do firmware.
1 Características
A tabela abaixo apresenta uma comparação entre as principais características
desse dos microcontroladores:
1.4 Terminais.
O 16F628 pode trabalhar com até 3 terminais de I/O a mais que o 16F84. Esses
terminais. Esses terminais são pertencentes ao portal A. São eles os terminais 5, 15, 16,
respectivamente RA5, RA6 e RA7. RA7 e RA6 são terminais multiplexados com o
oscilador do PIC. Se estiver sendo utilizado o modo de oscilador XT, LP, HS, RC
externos, esses terminais fazem parte do circuito oscilador e não há ligação do registro
PORTA com o pino do microcontrolador. Se estiver sendo utilizado o modo RC interno
(opção que não existe para o 16F84), não existe circuito externo para o oscilador, e
esses terminais podem ser utilizados como I/O.
RA5 pode ser utilizado somente como entrada, pois não existe driver de saída.
Para sua utilização como entrada deve-se configurar o MCLR ligado internamente para
Vdd, o que é feito através dos fusíveis (fuses).
Para utilização de rotinas desenvolvidas para 16F84 não há necessidade de
nenhuma alteração no código com relação aos terminais.
1.5 Memória
No que se refere à memória, o 16F628 apresenta grandes diferenças em relação
ao 16F84. As figuras abaixo apresentam a organização da memória do 16F84 e do
16F628.
GPRS (acessa
68 bytes banco 0)
4Fh - CFh
50h D0h
Não implementado
7Fh FFh
Figura 1.1 – Mapa de memória do PIC 16F84
GPR GPR
80 bytes 48 bytes
GPR 14Fh
96 bytes 150h
Como pode ser observado, existe uma grande diferença entre os dois mapas de
memórias. O 16F628 possui um total de 224 bytes e o 16F84 apenas 68.
Em primeiro lugar, o 16F628 possui quatro bancos de memória, enquanto o
16F84 possui dois. Contudo não existem registros nos bancos 2 e 3 três que não possam
ser acessados nos bancos 0 e 1. A única região de interesse nesses bancos é a região de
RAM de uso geral entre os endereços 120h e 14Fh, no banco dois.
Quanto aos registros de funções especiais (SFR – Special Function Registers), o
16F628 os possui nos mesmos endereços que o 16F84, excetuando-se os registros
relacionados com a memória EEPROM. No 16F628 todos esse registros se encontram
no banco 1, e seus endereços podem ser observados na figura 1.2. Para programas que
utilizam a EEPROM do 16F84 serem adaptados para o 16F628 as rotinas de aceso a
EEPROM devem ser alteradas.
O 16F628 possui mais registros de uso geral (GPR – General Purpose Registers)
que o 16F84. Então programas desenvolvidos para 16F84 não terão problemas com falta
de memória. A mudança importante que deve ser observada é que no 16F84 os GPR
começam no endereço 0Ch, enquanto no 16F628 começam no 20h. Os endereços dos
registros devem ser alterados para ser adequar a faixa de endereços do 16F6268. Outra
observação importante é que acessando do endereço 8Ch ao CFh no banco 1 do 16F84
são acessados os registros de 0Ch a 4Fh do banco 0. No 16F628 os registros do banco 1
que acessam endereços correspondentes no banco 0 são apenas os de endereço entre
F0h e FFh.
1.6 Oscilador
Para a substituição do 16F84 pelo 16F628 não se faz necessária nenhuma
alteração do hardware do circuito. Porém, para reduzir componentes e
conseqüentemente o custo do sistema, pode-se optar por substituir um circuito oscilador
externo pelo oscilador interno do 16F628. O 16F628 apresenta a possibilidade escolher
entre duas freqüências para o oscilador interno, 4MHz e 37KHz. Nesse caso deve-se
considerar que o oscilador interno de 4MHz tem uma precisão inferior à de um
oscilador a cristal. Esse oscilador pode variar entre 3,65MHz e 4,28MHz.
Para utilizar o oscilador interno deve-se habilitar essa opção nos “fusíveis”. A
seleção da freqüência é feita por software pelo bit OSCF do registro PCON. Se OSCF
for “1” a freqüência é de 4MHz; se for “0”, a freqüência e 37KHz. A freqüência do
oscilador pode ser alterada a qualquer momento no programa.
SIM NÃO
Está sendo utilizada
a diretiva CBLOCK para declaração
de variáveis?
subsituir
Realocar as variáveis declaradas nos
CBLOCK 0Ch
endereços entre 0Ch e 20h para
por
endereços entre 20h e 0Fh
CBLOCK 20h
NÃO
Realocar as variáveis para endereços entre F0h e
FFh.
Realocar os respectivos endereços do banco 0
para a faixa entre 70h e 7Fh.
SIM
Estão sendo utilizadas rotinas
de aceso a EEPROM?
NÃO