Zilog - ZDSII a IDE de programação free em C. - 2 Parte
Autor: André Pereira da Silva | Publicado: 2013-07-08T15:11:00-07:00

Zilog - Acendendo um LED com Z8 encore XP! - Parte 2&nbsp;


 bb_bid = "1674044";
 bb_lang = "pt-BR";
 bb_keywords = "GLCD,microcontrolador, TI, RENESAS, zilog,microchip,PLC,elevador, CD, programação,matemática,IC,LCD.";
 bb_name = "custom";
 bb_limit = "8";
 bb_format = "bbb";














Configurando as PORTAS do Z8 Encore corretamente.



&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; As portas de qualquer microcontrolador são acessos do mesmo ao mundo externo e devem estar configuradas de acordo com o que se quer fazer com elas, isso por que podemos fornecer sinais a esses pinos e usar sinais que saem desses pinos ou portas, se não forem, corretamente, configuradas, podem gerar curto circuitos ou a queima do microcontrolador.&nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Quando configurados como entrada, é possível usar esses pinos para acordar o microcontrolador se estiver no modo "STOP" e alguns pinos podem gerar interrupções a serem acessadas e processadas pelo microcontrolador. No modo entrada, a função "Analog to Digital converter" é acessada, também.&nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Quando configurados como saídas, é possível usar esses pinos como driver padrão ou driver de alta corrente elétrica para acionar cargas. Podem ser usados como "Open drain", permitindo que o microcontrolador forneça nível baixo ou zero a uma carga quando acionado o pino correspondente, porém quando não o nível um ou alto passa a ser usado ou por um circuito externo ou pelo microcontrolador. Em modo saída, pode, também, ser usado com as funções alternativas que cada pino possui, como UART, Timer,PWM, I2C e etc.,&nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Para usar a função alternativa, as PORTAS e Pinos do microcontrolador devem ser adequadamente configuradas.



Registro de I/O de uso geral.



&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Como estamos usando os três pinos do PORTA, usaremos os pinos de PA0~PA2 e para poder ter acesso a ele no mundo externo, vamos dar uma olhada na tabela a seguir e perceber que precisamos manipular os outros registros de endereçamento e outro de controle. É assim que vamos configurar as PORTAS e o PINOS do microcontrolador.&nbsp;




Tabela referente a PORTA A



 
 
 
 
 
 
 
 
 
 

  
Bit

  
7

  
6

  
5

  
4

  
3

  
2

  
1

  
      
0

 




 
 
 

  
Field

  
PADDR[7:0]

 

  
Reset

  
00H

 

  
R /W

  
R/W

 

  
Endereço

  
PA=FD0H ; PB = FD4H ; PC = FD8H

 


 
 
 

  
Bit

  
Descrição dos endereços .

 

  
[7:0]

PADDR

  
Endereços das portas 
   

O endereço das portas seleciona um dos
   sub-registros acessível pelo registro de controle das portas.

00H = Sem função, contem alguma proteção
   contra configuração acidental.

01H = Direção dos dados – 0 é saída e 1 é
   entrada. 
   

02H = Função alternativa – habilita
   periféricos como UART, Timers e etc.

03H = Controle de saída – Open drain 
   

04H = Habilita driver de alta corrente –
   ideal para suprir mais potência para cargas. 
   

05H = Habilita acordar do modo “STOP” -  ou
   por pino ou a PORTA .

06H = Habilita Pull-up – coloca os resistores
   de pull-up ao vcc.

07H ~FFH  = Sem função.

 

Valores referentes ao conjunto de sub-registros do microcontrolador da série Encore XP! F0822

_________________________________________________________________________________




&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; O registro de controle das portas de A~C determina que valores serão colocados nos sub-registros correspondentes aos registros endereçados pelo registro de endereço de portas.&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PxCTL ( onde x é a porta de A~C) é o registro de controle de portas, que é zerado quando de um reset no microcontrolador e tem como endereço das portas de PA~PC em FD1H, FD6H, FD9H, para o microcontrolador da série Encore XP! F0822.
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Agora, vamos conhecer os outros três registros associados com a porta A, que são eles :&nbsp;


PAADDR, que fica no endereço FD0H, permite ao PACTL configurar os sub-registros.
PACTL, que fica no endereço FD1H, configura ou transfere dados de configuração aos sub-registros.
PAIN, que fica no endereço FD2H, permite que seja lido os valores de dados contido nele.
PAOUT, que fica no endereço FD3H, coloca os valores entre 0 e 1 na saída da porta ou pinos.


&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Todos esses 4 registros estão presentes nas portas de A~H de todos os microcontroladores da linha Z8 Encore, diferenciando apenas nos valores dos endereços de cada porta, controle de portas e demais registros. Não é necessário se preocupar tanto com isso, pois o arquivo de cabeçalho ez8.h já vem com esses valores corretos na sua macro interna, bastando, apenas, recordar os nomes desses registros e sub-registros de PxADDR, PxCTL, PxIN e PxOUT como tendo x o nome da porta correspondente a que se quer configurar e usar. No nosso exemplo, x fica como PxADDR em PAADDR, pois estamos utilizando a porta A.&nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;

Acessando sub-registros&nbsp;através&nbsp;de PxCTL (PACTL)



&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Existem 5 perguntas a se fazer, antes de configurar cada porta, para que, nessa sequência, se tenha um bom desenvolvimento de projeto ou programação, tanto em C quanto em ASM, que são elas :&nbsp;


A porta ou pino é de entrada de dados ou de saída de dados ?
A porta será usada como de uso geral ou com função específica, como UART, Timer e etc ?
Se for usada como saída, é em operação normal ou open drain ?&nbsp;
Se for usada como saída, é em modo normal ou driver de alta corrente (high drive) ?&nbsp;
Se for usada como entrada, habilito o modo acordar de um STOP e queremos ou não usar o A/D, se usado em modo função alternativa ?&nbsp;


&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Como visto na tabela acima, referente ao endereçamento que dá acesso aos sub - registros através de PxCTL ( no caso PACTL), teríamos um total de 5 diferentes registros para cada porta, somando os registros de entrada e de saída, teríamos um total de 7 registros para cada porta. Para um microcontrolador maior em recursos, mais um se somaria, o que te daria uma enorme quantidade de endereços para memorizar e poder usar, ficando dispendioso o aprendizado e, consequentemente, difícil de trabalhar. Então a Zilog, criou este método de usar só dois registros de endereçamento, o PxADDR, e o registro de controle de portas, o PxCTL, onde x é o valor da porta de A~H correspondente a porta que se quer usar, facilitando o trabalho do programador e deixando que o compilador e o microcontrolador se encarreguem desse monte de endereços de registros e sub registros.

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; As 5 perguntas, acima feitas, são configuradas escrevendo valores no registro PxCTL, onde x é um nome de A~H da porta correspondente. Por exemplo, se colocarmos um valor de 0x04H em PAADDR, estamos selecionando o sub-registro "High drive" e podemos configurar ele atravéz de PxCTL colocando um valor que corresponda aos pinos de 0~7 da porta x. assim se coloco 0x0F em PxCTL, estou habilitando todos pinos de 0~3 como sendo high drive &nbsp;da porta x e de 4~7 como sendo saída padrão.&nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;

Configurando porta A como saída em alta corrente elétrica.



&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Agora temos subsídios para fazer o LED acender e mais adiante, fazer ele piscar. É bom lembrar que configurando os pinos do microcontrolador para saída em modo normal ele irá drenar corrente de aproximadamente 2mA, o que é muito pouco para acender um LED sem queimar o micro ou nem fazer acender, já que o microcontrolador possui proteção interna contra sobrecorrente. Para isso, configuramos o pino correspondente aos LEDs em modo High drive que nos permite acessar perto de 20mA de corrente elétrica a ser drenada para o circuito do LED.&nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Não devemos colocar todos os pinos como high drive se desejarmos um uso mais econômico do consumo de energia, principalmente se estiver usando pilhas ou baterias, o que esgotaria essa energia em pouco tempo.&nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Como estamos em modo apresentação, vamos colocar todos os pinos em high drive para o leitor poder ver seu LED acender desta vez e, assim ter uma visão melhor de como funciona o processo de programação.&nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Vamos acrescentar mais algumas linhas de código no nosso programa e ver o que acontece depois. Com o programa já aberto, acrescente as linha que estão faltando, não precisa reescrever tudo novamente, como se segue :&nbsp;



#include 

void main( void )

&nbsp; &nbsp; {

&nbsp; &nbsp; &nbsp;PAADDR = 4 ; // selecionamos high drive.

&nbsp; &nbsp; &nbsp;PACTL = 0xFF ; // colocamos 1 no sub-registro PHDEA[7:0], habilitando todos os pinos em High drive.

&nbsp; &nbsp; &nbsp;PAADDR = 0x01 ; // selecionamos direção dos dados.

&nbsp; &nbsp; &nbsp;PACTL = 0x00 ; // todos como saída, 0's no registro DDA[7:0]

&nbsp; &nbsp; &nbsp;PAADDR = 0x00 ; // prevenção contra má configuração.

&nbsp; &nbsp; &nbsp;PAOUT = 0xFF ; // porta A em nível 1

&nbsp; &nbsp; &nbsp;// PAOUT = 0x00 ; // Porta A em zero.

&nbsp; &nbsp; // PAOUT = 0xFF ; // Porta A em 1, novamente.

&nbsp; &nbsp; &nbsp;return;

&nbsp; &nbsp; }

&nbsp; &nbsp; &nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Escrevemos o valor 4 no registro PAADDR para selecionar o sub-registro High Drive de nome PHDEA[7:0] &nbsp;e com PACTL com um valor de 0xFF, colocamos todos os bits de PHDEA[7:0] habilitados para high drive.&nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Note que em direção dos dados, 0 é saída e 1 entrada.
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Agora compilamos e montamos o programa com F7 ou clicando em montar e compilar e vemos o resultado de sucesso da compilação, enviamos o arquivo ou baixamos o programa compilado para o microcontrolador e temos o LED aceso, ou seja, funcionando o programa, caso isso não ocorra, será necessário resetar o microcontrolador fisicamente, aterrando, momentaneamente o pino de reset..
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Como se pode ver, programar em C para os microcontroladores da Zilog é muito fácil e divertido, muito diferente de muitas linhas de microcontroladores que dificultam com seleção de banco de memórias e outras dificuldades. Em Z8 Encore, isso é mais fácil e rápido.&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;


Considerações Finais (até o próximo post da série )



&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Quando conectamos cargas como LED, buzzers ou qualquer carga entre a saída de um pino do microcontrolador e o Vcc, estamos fazendo de forma usual e explicamos por quê :&nbsp;


A saída de sinal de algum pino do microcontrolador tem um &nbsp;valor mais próximo de 0 Vcc que Vcc acionado, onde há uma tensão positiva bem baixa dos 3.3V da fonte de alimentação.
Na linha Z8 Encore, o máximo de queda de tensão elétrica é de 0.6V, o que nos dá (3.3 - 0.6) 2.7V na sua saída.
O mínimo de tensão elétrica é de 2.4V quando se liga um LED em série com resistor e o conjunto ligado ao terra ou gnd.
Resumindo, se tem mais brilho no LED com ele ligado ao 3.3Vcc da fonte de alimentação, em série com um resistor limitador e a outra ponta ao pino do microcontrolador. Pois se tem 2.7V e não 2.4V, se ligado ao gnd.&nbsp;


&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Continua ....



&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;