MICROCONTROLADORES HOLTEK - PARTE 3


Continuando  com a série sobre os microcontroladores Holtek HT48EXX, neste artigo farei uma analise dos pinos de I/O e seus registradores de controle, além dos circuitos de reset e clock para os microcontroladores da família HT48EXX.



O QUE JÁ FOI MOSTRADO NESTA SÉRIE

Nas duas primeiras partes desta série, foram apresentados os seguintes temas:

- Principais características do microcontrolador Holtek HT48EXX;
- Apresentação das ferramentas de desenvolvimento Starter Kit MTP e Emulador HT ICE;
- Apresentação do Ambiente para desenvolvimento HT-IDE3000;
- Hardware interno do microcontrolador – arquitetura;
- Organização da memória (programa e dados);
- Registradores de uso especial.

Se você está interessado em conhecer mais sobre o microcontrolador Holtek - família HT48EXX, recomendo a leitura das partes anteriores (parte 1 e parte 2).

Obs.: Conforme detalhado nas partes anteriores, esta série foi baseada no microcontrolador Holtek HT48E10. Porém tudo o que for dito a respeito deste pode ser utilizado com outros membros da mesma família (HT48EXX), sem maiores problemas.



PINOS DE I/O E SEUS REGISTRADORES DE CONTROLE

No microcontrolador HT48E10 existem 19 pinos de I/O bidirecionais, divididos em três “portas”: PA, PB e PC. Estas podem ser acessadas através dos endereços de memória (registros) 12H, 14H e 16H respectivamente. Para uma operação segura, a corrente máxima no modo source não deve ultrapassar 10 mA com alimentação de 5 VDC. No modo dreno esta não deve ser superior a 20 mA, para a mesma alimentação (5 VDC). A figura 1 demonstra ambos os modos.


Uma característica importante a respeito dos pinos de I/O na família HT48EXX é a presença de resistores de pull-up (ou pull-high) em todos os pinos para uso no modo “entrada”. Geralmente em um projeto é comum a inserção de tais resistores externamente. A presença dos mesmos internamente no microcontrolador pode ajudar o projetista na redução da PCI e também nos custos finais do projeto.

Os resistores pull-high internos podem ser ativados via software (configurados durante a gravação), porém apenas os pinos selecionados como “entrada” apresentarão tal resistor. Não é possível selecionar a presença do resistor de pull-high individualmente para apenas um determinado pino de entrada, mas somente para a porta como um todo (pinos configurados como entrada). Em geral o valor desta resistência é de 30 kOhms com uma alimentação de 5 VDC, sendo que não é possível alterar este valor via software.

Alguns pinos de I/O são compartilhados com funções especiais, como Wake-up (retorno do modo Power Down para economia de energia), entrada para interrupção externa, função buzzer, entrada para timer/counter externo, etc. A tabela abaixo descreve estes pinos, assim como suas funções especiais (quando existirem).

Tabela – Descrição dos pinos de I/O

Porta Nr pinos Opções Descrição
PA 8 - Resistores de pull-up em todos os pinos

- Função Wake-up

Oito pinos bidirecionais. Cada um dos pinos de I/O pode ser selecionado como entrada Wake-up (para saída do modo Halt). Cada pino pode ser selecionado de maneira independente como saída CMOS ou entrada Schmitt Trigger e neste caso com ou sem resistores de pull-up
PB 8 - Resistores de pull-up em todos os pinos

Funções especiais em:
- PB0 - BZ
- PB1 - /BZ
Oito pinos bidirecionais. Cada pino pode ser selecionado de maneira independente como saída CMOS ou entrada Schmitt Trigger e neste caso com ou sem resistores de pull-up.

PB0 e PB1 são compartilhados com as funções BZ e /BZ, respectivamente (controle de buzzer externo). Quando esta opção é selecionada estes pinos são conectados ao gerador PFD (ligado ao timer/counter)
PC 3 - Resistores de pull-up em todos os pinos

Funções especiais em:
- PC0 - /INT
- PC1 - TMR


Três pinos bidirecionais. Cada pino pode ser selecionado de maneira independente como saída CMOS ou entrada Schmitt Trigger e neste caso com ou sem resistores de pull-up.

PC0 e PC1 são compartilhados com as funções /INT (interrupção externa) e TMR (clock/counter externo), respectivamente.

Obs.: Os 5 pinos mais significativos da porta C não estão implementados fisicamente no HT48E10 e são lidos sempre como “0”

Na figura abaixo você pode ver a estrutura interna dos pinos de I/O do microcontrolador HT48EXX.

Observando a figura pode-se perceber a presença do registro de controle. Estes registros (PAC, PBC e PCC) permitem a seleção de um pino de I/O como entrada ou saída. Estes registros são acessados através dos endereços de memória 13H, 15H e 17H para as portas PA, PB e PC, respectivamente.

Ao inserir, por exemplo, o valor binário “00001111” no registrador PBC o microcontrolador estará apto a utilizar os quatro bits mais significativos da porta “B” (PB4 a PB7) como saída e os quatro bits menos significativos (PB0 a PB3) como entrada. Desta forma, o “1” lógico configura um pino como entrada e o “0” lógico configura um pino como saída.Nesta momento não falarei sobre as funções especiais.



CIRCUITOS E MODO DE OPERAÇÃO DO RESET

Um circuito externo típico para reset que pode ser adotado para os microcontroladores HT48EXX é mostrado na figura abaixo.


O pino reservado para o reset (re-inicialização do sistema) é na verdade uma entrada tipo Schmitt Trigger ativa em nível lógico “0”. A figura abaixo traz o diagrama interno para a entrada reset no microcontrolador.


Existem alguns modos de reset para a família de microcontroladores HT48EXX que são:

- Reset power-up;
- Reset
LVR (Low Voltage Reset);
- Reset “manual” durante operação normal;
- Reset através do time-out do WDT (Watch Dog Timer) durante operação normal;
- Reset através do time-out do WDT durante modo HALT.

Reset power-up: muito importante para o correto funcionamento do microcontrolador. Ele garante a inicialização dos registradores (memória) e dos pinos de I/O (todos configurados como entrada) durante o start-up, pois o mesmo ocorre quando a alimentação aplicada ao microcontrolador for maior que 0.9 x VDD. Este tipo de reset é automático e independe de qualquer ação inserida no programa. A figura abaixo demonstra o diagrama de tempo para o reset por power-up.


Reset LVR: acontece sempre que a alimentação chegar a um valor considerado crítico (menor que 0.9 x VDD). Quando isso ocorrer o microcontrolador sofrerá o reset. Este tipo de reset  também é automático e sua ação não pode ser impedida pelo programa. A figura abaixo traz o diagrama de tempo para este tipo de operação.



Reset Manual : é provocado pelo usuário. Para isso basta levar o pino /RES ao nível lógico “0”. Isto pode ser feito através do acionamento de uma chave conectada entre o pino /RES e o GND, por exemplo, ou ainda por um circuito externo especialmente preparado para realizar o reset manual. A figura abaixo mostra o diagrama de tempo envolvido desta operação.


Reset por time-out do WDT operação normal: ocorrerá sempre que o WDT estiver ativado e o mesmo não for re-inicializado antes da contagem do tempo total previsto no WDT. Este tipo de reset é automático e sua ação pode ser impedida com a re-inicialização do WDT através do programa. A figura abaixo mostra o diagrama de tempo para esta condição.


Reset por time-out do WDT – operação modo HALT: pode ocorrer durante o time-out do WDT com o microcontrolador operando no modo HALT. Este tipo de reset é automático e sua ação só pode ser impedida com desabilitação do WDT antes da entrada no modo HALT. Vale lembrar que em alguns casos pode ser interessante ao sistema desenvolvido a entrada no modo HALT e a saída deste através do reset por time-out do WDT após o período estipulado. Para o reset descrito o diagrama de tempo se parecerá como mostrado na figura abaixo.



Obs.: Não será discutido nesta parte da série o reset por Wake-up. Caso você tenha interesse neste recurso, leia o manual (datasheet) do fabricante.

Como você pode perceber a maioria das condições de reset no microcontrolador HT48EXX são “automáticas” e apenas uma é “manual”. Dentro das condições consideradas automáticas, algumas podem ser “manuseadas” de acordo com o desejado (operação do sistema) dentro do programa. Um outro detalhe importante a ser considerado é que sempre será possível ao programador (através do programa) saber sobre a última condição de reset provocada.

Desta forma o programa poderá realizar a analise sobre as reais condições de operação do sistema através da analise do reset (caso este seja constante). Assim será possível encontrar um bug no programa ou ainda uma situação indesejada de operação como, por exemplo, hardware auxiliar incompatível (problemas na fonte de alimentação, por exemplo), problemas no software (erro no programa), entre outras.

Os bits TO e PDF do registrador STATUS “guardam” as condições do último reset. A tabela abaixo mostra o estado desses bits de acordo com a condição do último reset.

Tabela – Estado lógico dos bits TO e PDF de acordo com último reset

Condição TO PDF
Reset durante power-up 0 0
Reset durante operação normal ou LVR X X
Time-out do WDT durante operação normal 1 X
Time-out do WDT durante modo HALT 1 1

X – não se modifica



CIRCUITOS E MODOS DE OPERAÇÃO DO CLOCK

Na família HT48EXX são permitidos três métodos para se gerar o clock necessário à operação do microcontrolador: cristal ou ressonador externo, rede RC externa e em alguns casos, oscilador interno. A figura abaixo demonstra um típico circuito com cristal ou ressonador externo.


Observando atentamente a figura você pode verificar que este circuito é bastante parecido com outros utilizados por outras famílias de microcontroladores. Os pinos OSC1 e OSC2 recebem o cristal ou ressonador, além dos capacitores e de um resistor. Os valores recomendados para os capacitores e o resistor estão inseridos na tabela abaixo.

Tabela – Valores para os capacitores C1, C2 e para o resistor R1

Cristal ou Ressonador C1 e C2 (em pF) R1 (em kOhms)
Cristal de 4 MHz 0 10
Ressonador de 4 MHz 10 12
Cristal de 3.58 MHz 0 10
Ressonador de 3.58 MHz 25 10
Cristal/ressonador de 2 MHz 25 10
Cristal de 1 MHz 35 27
Ressonador de 480 kHz 300 9.1
Ressonador de 455 kHz 300 10
Ressonador de 429 kHz 300 10

É importante salientar que a função do resistor R1 é manter o oscilador operando em uma condição de baixo consumo. Se o microcontrolador em questão possuir a opção LVR e esta estiver ativada, o resistor R1 poderá ser omitido.

A figura abaixo demonstra um circuito para oscilação por meio de uma rede RC para os microcontroladores da família HT48EXX.


O valor admitido para o resistor ROSC deve ficar entre 22 kOhms e 1 MOhm e o valor do capacitor deve, necessariamente, ser 470 pF. Para este tipo de oscilador a entrada utilizada será sempre OSC1, sendo que OSC2 apresentará FSYS/4 (freqüência da rede RC dividida por quatro). A precisão do clock neste caso dependerá muito da qualidade dos componentes utilizados (precisão dos mesmos) além da temperatura de operação.

O oscilador interno (quando implementado no microcontrolador) permite selecionar uma freqüência de operação igual a: 3.2 Mhz, 1.6 Mhz, 800 khz ou 400 khz. Fica fácil perceber que o valor da freqüência inferior é obtida a partir da divisão por dois da freqüência superior.

Um outro detalhe importante sobre o uso do oscilador interno é que quando este é selecionado os pinos OSC1 e OSC2 podem ser utilizados como pinos de I/O.



CONCLUSÃO

Nesta terceira parte desta pequena série, apresentei mais algumas informações importantes sobre o hardware da família de microcontroladores HOLTEK HT48EXX. Por hora o conteúdo destá série é basicamente formado por “conceitos teóricos”, porém sem os mesmos não temos como ir adiante com a "prática". Eu sempre acreditei que somente com uma boa base teórica é que podemos nos considerar prontos para a prática tão desejada. Bons estudos e até a próxima!



Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor.